From 434085ded6a06c0dfff3aed10d3cf6397c3929a6 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 24 Sep 2024 15:50:18 +0100 Subject: [PATCH 01/50] Initial code drop for movie tracker sample app Signed-off-by: Peter Friese --- Examples/FriendlyFlix/.editorconfig | 8 + Examples/FriendlyFlix/.firebase/.graphqlrc | 1 + Examples/FriendlyFlix/.swift-format | 70 + Examples/FriendlyFlix/LICENSE | 202 + Examples/FriendlyFlix/README.md | 3 + .../FriendlyFlix.xcodeproj/project.pbxproj | 619 ++ .../xcschemes/FriendlyFlix.xcscheme | 102 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../Features/Details/DetailsSection.swift | 94 + .../Features/Details/MovieDetailsView.swift | 160 + .../Features/Details/MovieReviewCard.swift | 67 + .../Features/Details/StarRatingView.swift | 43 + .../FriendlyFlix/Features/Hero/CardView.swift | 243 + .../Features/Hero/GradientView.swift | 152 + .../Features/List/MovieCardView.swift | 76 + .../Features/List/MoviesList.swift | 67 + .../FriendlyFlix/FriendlyFlixApp.swift | 36 + .../Preview Assets.xcassets/Contents.json | 6 + .../FriendlyFlix/Utilities/Color+Hex.swift | 47 + .../Utilities/String+Placeholder.swift | 26 + .../String+StringInterpolation.swift | 31 + .../Utilities/View+Extensions.swift | 28 + .../FriendlyFlixTests/FriendlyFlixTests.swift | 30 + .../FriendlyFlixUITests.swift | 55 + .../FriendlyFlixUITestsLaunchTests.swift | 45 + .../app/FriendlyFlixSDK/Package.swift | 32 + .../Sources/FriendlyFlixClient.swift | 93 + .../Sources/FriendlyFlixKeys.swift | 501 ++ .../Sources/FriendlyFlixOperations.swift | 6319 +++++++++++++++++ .../app/_FriendlyFlixSDK/Package.swift | 34 + .../Sources/FriendlyFlixClient.swift | 33 + .../Sources/FriendlyFlixKeys.swift | 501 ++ .../Sources/FriendlyFlixOperations.swift | 5813 +++++++++++++++ .../.dataconnect/schema/main/implicit.gql | 20 + .../.dataconnect/schema/main/input.gql | 272 + .../.dataconnect/schema/main/mutation.gql | 258 + .../.dataconnect/schema/main/query.gql | 71 + .../.dataconnect/schema/main/relation.gql | 74 + .../.dataconnect/schema/prelude.gql | 1170 +++ .../dataconnect/1_movie_insert.gql | 204 + .../dataconnect/2_actor_insert.gql | 104 + .../dataconnect/3_movie_actor_insert.gql | 238 + .../4_user_favorites_review_insert.gql | 142 + .../dataconnect/5_optional_vector_embed.gql | 141 + .../FriendlyFlix/dataconnect/dataconnect.yaml | 11 + .../movie-connector/connector.yaml | 7 + .../dataconnect/movie-connector/mutations.gql | 114 + .../dataconnect/movie-connector/queries.gql | 379 + .../dataconnect/schema/schema.gql | 89 + Examples/FriendlyFlix/firebase.json | 31 + 52 files changed, 18914 insertions(+) create mode 100644 Examples/FriendlyFlix/.editorconfig create mode 100644 Examples/FriendlyFlix/.firebase/.graphqlrc create mode 100644 Examples/FriendlyFlix/.swift-format create mode 100644 Examples/FriendlyFlix/LICENSE create mode 100644 Examples/FriendlyFlix/README.md create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql create mode 100644 Examples/FriendlyFlix/dataconnect/1_movie_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/2_actor_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql create mode 100644 Examples/FriendlyFlix/dataconnect/dataconnect.yaml create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql create mode 100644 Examples/FriendlyFlix/dataconnect/schema/schema.gql create mode 100644 Examples/FriendlyFlix/firebase.json diff --git a/Examples/FriendlyFlix/.editorconfig b/Examples/FriendlyFlix/.editorconfig new file mode 100644 index 0000000..4d5d604 --- /dev/null +++ b/Examples/FriendlyFlix/.editorconfig @@ -0,0 +1,8 @@ +[*.swift] +indent_style = space +indent_size = 2 +tab_width = 2 +end_of_line = crlf +insert_final_newline = true +max_line_length = 100 +trim_trailing_whitespace = true \ No newline at end of file diff --git a/Examples/FriendlyFlix/.firebase/.graphqlrc b/Examples/FriendlyFlix/.firebase/.graphqlrc new file mode 100644 index 0000000..4028adf --- /dev/null +++ b/Examples/FriendlyFlix/.firebase/.graphqlrc @@ -0,0 +1 @@ +{"schema":["../dataconnect/schema/**/*.gql","../dataconnect/.dataconnect/**/*.gql"],"document":["../dataconnect/movie-connector/**/*.gql"]} \ No newline at end of file diff --git a/Examples/FriendlyFlix/.swift-format b/Examples/FriendlyFlix/.swift-format new file mode 100644 index 0000000..23f51c8 --- /dev/null +++ b/Examples/FriendlyFlix/.swift-format @@ -0,0 +1,70 @@ +{ + "fileScopedDeclarationPrivacy" : { + "accessLevel" : "private" + }, + "indentation" : { + "spaces" : 2 + }, + "indentConditionalCompilationBlocks" : true, + "indentSwitchCaseLabels" : false, + "lineBreakAroundMultilineExpressionChainComponents" : false, + "lineBreakBeforeControlFlowKeywords" : false, + "lineBreakBeforeEachArgument" : false, + "lineBreakBeforeEachGenericRequirement" : false, + "lineLength" : 100, + "maximumBlankLines" : 1, + "multiElementCollectionTrailingCommas" : true, + "noAssignmentInExpressions" : { + "allowedFunctions" : [ + "XCTAssertNoThrow" + ] + }, + "prioritizeKeepingFunctionOutputTogether" : false, + "respectsExistingLineBreaks" : true, + "rules" : { + "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : false, + "AlwaysUseLowerCamelCase" : true, + "AmbiguousTrailingClosureOverload" : true, + "BeginDocumentationCommentWithOneLineSummary" : false, + "DoNotUseSemicolons" : true, + "DontRepeatTypeInStaticProperties" : true, + "FileScopedDeclarationPrivacy" : true, + "FullyIndirectEnum" : true, + "GroupNumericLiterals" : true, + "IdentifiersMustBeASCII" : true, + "NeverForceUnwrap" : false, + "NeverUseForceTry" : false, + "NeverUseImplicitlyUnwrappedOptionals" : false, + "NoAccessLevelOnExtensionDeclaration" : true, + "NoAssignmentInExpressions" : true, + "NoBlockComments" : true, + "NoCasesWithOnlyFallthrough" : true, + "NoEmptyTrailingClosureParentheses" : true, + "NoLabelsInCasePatterns" : true, + "NoLeadingUnderscores" : false, + "NoParensAroundConditions" : true, + "NoPlaygroundLiterals" : true, + "NoVoidReturnOnFunctionSignature" : true, + "OmitExplicitReturns" : false, + "OneCasePerLine" : true, + "OneVariableDeclarationPerLine" : true, + "OnlyOneTrailingClosureArgument" : true, + "OrderedImports" : true, + "ReplaceForEachWithForLoop" : true, + "ReturnVoidInsteadOfEmptyTuple" : true, + "TypeNamesShouldBeCapitalized" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : true, + "UseLetInEveryBoundCaseVariable" : true, + "UseShorthandTypeNames" : true, + "UseSingleLinePropertyGetter" : true, + "UseSynthesizedInitializer" : true, + "UseTripleSlashForDocumentationComments" : true, + "UseWhereClausesInForLoops" : false, + "ValidateDocumentationComments" : false + }, + "spacesAroundRangeFormationOperators" : false, + "tabWidth" : 8, + "version" : 1 +} diff --git a/Examples/FriendlyFlix/LICENSE b/Examples/FriendlyFlix/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/Examples/FriendlyFlix/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md new file mode 100644 index 0000000..7eee8e2 --- /dev/null +++ b/Examples/FriendlyFlix/README.md @@ -0,0 +1,3 @@ +# FriendlyFlix + +A sample app for Firebase DataConnect \ No newline at end of file diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c5db3f0 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj @@ -0,0 +1,619 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */; }; + 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */; }; + 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; + remoteInfo = FriendlyFlix; + }; + 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; + remoteInfo = FriendlyFlix; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FriendlyFlix.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlix; + sourceTree = ""; + }; + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlixTests; + sourceTree = ""; + }; + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlixUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 884EA4C92C7E0CC7009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */, + 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */, + 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4D92C7E0CC8009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E32C7E0CC8009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 884EA4C32C7E0CC7009866B5 = { + isa = PBXGroup; + children = ( + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, + 884EA4CD2C7E0CC7009866B5 /* Products */, + ); + sourceTree = ""; + }; + 884EA4CD2C7E0CC7009866B5 /* Products */ = { + isa = PBXGroup; + children = ( + 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */, + 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */, + 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */; + buildPhases = ( + 884EA4C82C7E0CC7009866B5 /* Sources */, + 884EA4C92C7E0CC7009866B5 /* Frameworks */, + 884EA4CA2C7E0CC7009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, + ); + name = FriendlyFlix; + packageProductDependencies = ( + 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */, + 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */, + 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */, + ); + productName = FriendlyFlix; + productReference = 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */; + productType = "com.apple.product-type.application"; + }; + 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */; + buildPhases = ( + 884EA4D82C7E0CC8009866B5 /* Sources */, + 884EA4D92C7E0CC8009866B5 /* Frameworks */, + 884EA4DA2C7E0CC8009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, + ); + name = FriendlyFlixTests; + packageProductDependencies = ( + ); + productName = FriendlyFlixTests; + productReference = 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */; + buildPhases = ( + 884EA4E22C7E0CC8009866B5 /* Sources */, + 884EA4E32C7E0CC8009866B5 /* Frameworks */, + 884EA4E42C7E0CC8009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, + ); + name = FriendlyFlixUITests; + packageProductDependencies = ( + ); + productName = FriendlyFlixUITests; + productReference = 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 884EA4C42C7E0CC7009866B5 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + 884EA4CB2C7E0CC7009866B5 = { + CreatedOnToolsVersion = 16.0; + }; + 884EA4DB2C7E0CC8009866B5 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 884EA4CB2C7E0CC7009866B5; + }; + 884EA4E52C7E0CC8009866B5 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 884EA4CB2C7E0CC7009866B5; + }; + }; + }; + buildConfigurationList = 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 884EA4C32C7E0CC7009866B5; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */, + 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 884EA4CD2C7E0CC7009866B5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */, + 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */, + 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 884EA4CA2C7E0CC7009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4DA2C7E0CC8009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E42C7E0CC8009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 884EA4C82C7E0CC7009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4D82C7E0CC8009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E22C7E0CC8009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; + targetProxy = 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */; + }; + 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; + targetProxy = 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 884EA4EE2C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 884EA4EF2C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 884EA4F12C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"FriendlyFlix/Preview Content\""; + DEVELOPMENT_TEAM = YGAZHQXHH4; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "-Xlinker", + "-interposable", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlix; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 884EA4F22C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"FriendlyFlix/Preview Content\""; + DEVELOPMENT_TEAM = YGAZHQXHH4; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlix; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 884EA4F42C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; + }; + name = Debug; + }; + 884EA4F52C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; + }; + name = Release; + }; + 884EA4F72C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FriendlyFlix; + }; + name = Debug; + }; + 884EA4F82C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FriendlyFlix; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4EE2C7E0CC8009866B5 /* Debug */, + 884EA4EF2C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F12C7E0CC8009866B5 /* Debug */, + 884EA4F22C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F42C7E0CC8009866B5 /* Debug */, + 884EA4F52C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F72C7E0CC8009866B5 /* Debug */, + 884EA4F82C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../FriendlyFlixSDK; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + branch = main; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = FriendlyFlixSDK; + }; + 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = FriendlyFlixSDK; + }; + 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */ = { + isa = XCSwiftPackageProductDependency; + package = 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAuth; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 884EA4C42C7E0CC7009866B5 /* Project object */; +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme new file mode 100644 index 0000000..7bc5f51 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift new file mode 100644 index 0000000..0a94936 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift @@ -0,0 +1,94 @@ +// +// DetailsSection.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +import SwiftUI + +struct DetailsSection: View { + var title: String + var content: () -> Details + + init(title: String, @ViewBuilder content: @escaping () -> Details) { + self.title = title + self.content = content + } + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .center) { + Text(title) + .font(.title2) + .bold() + Image(systemName: "chevron.right") + .font(.title2) + .bold() + } + .padding(.bottom, 8) + + content() + } + .padding(.bottom, 20) + } +} + +#Preview { + ScrollView { + DetailsSection(title: "Details Section") { + Text("Content goes here") + } + .padding() + } +} + +#Preview { + ScrollView { + DetailsSection(title: "Ratings & Reviews") { + HStack(alignment: .center) { + Text("4.7") + .font(.system(size: 64, weight: .bold)) + Spacer() + VStack(alignment: .trailing) { + StarRatingView(rating: 4.7) + Text("23 Ratings") + .font(.title) + .bold() + } + } + Text("Most Helpful Reviews") + .font(.title3) + .bold() + ScrollView(.horizontal) { + LazyHStack { + ForEach(0..<10) { i in + MovieReviewCard( + title: "Great stuff", + rating: 4.5, + reviewerName: "John Doe", + review: + "Incididunt reprehenderit ad elit et commodo. Sint magna Lorem eiusmod. Ea ut culpa cupidatat Lorem culpa ad cupidatat excepteur voluptate consectetur nostrud eu laborum." + ) + .frame(width: 350) + } + } + .scrollTargetLayout() + } + .scrollTargetBehavior(.viewAligned) + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift new file mode 100644 index 0000000..2aca1c1 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -0,0 +1,160 @@ +// +// for.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +// introduce a common protocol for movie actors, so we can use the same view for ActorMainActors and ActorSupportingActors +protocol MovieActor { + var id: UUID { get set } + var name: String { get set } + var imageUrl: String { get set } +} + +extension GetMovieByIdQuery.Data.Movie.ActorMainActors: MovieActor {} +extension GetMovieByIdQuery.Data.Movie.ActorSupportingActors: MovieActor {} + +struct MovieDetailsView: View { + var movie: ListMoviesQuery.Data.Movie + let movieDetailsRef: GetMovieByIdQuery.Ref + + init(movie: ListMoviesQuery.Data.Movie) { + self.movie = movie + movieDetailsRef = DataConnect.friendlyFlixConnector.getMovieByIdQuery.ref(id: movie.id) + } + +// var movieRef: GetMovieByIdQuery + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + // description + VStack(alignment: .leading, spacing: 10) { + Text("About") + .font(.title2) + .bold() + .unredacted() + + Text(movieDetailsRef.data?.movie?.description ?? .placeholder(length: 150)) + .font(.body) + .redacted(reason: movieDetailsRef.data?.movie == nil ? .placeholder : []) + HStack { + Spacer() + } + } + .redacted(if: movieDetailsRef.data == nil) + + // Actors + if let mainActors = movieDetailsRef.data?.movie?.mainActors, mainActors.count > 0 { + actorsSection(title: "Main actors", actors: mainActors) + } + if let supportingActors = movieDetailsRef.data?.movie?.supportingActors, supportingActors.count > 0 { + actorsSection(title: "Supporting actors", actors: supportingActors) + } + + // Reviews + DetailsSection(title: "Ratings & Reviews") { + HStack(alignment: .center) { + Text("4.7") + .font(.system(size: 64, weight: .bold)) + Spacer() + VStack(alignment: .trailing) { + StarRatingView(rating: 4.7) + Text("23 Ratings") + .font(.title) + .bold() + } + } + Text("Most Helpful Reviews") + .font(.title3) + .bold() + ScrollView(.horizontal) { + LazyHStack { + if let reviews = movieDetailsRef.data?.movie?.reviews { + ForEach(reviews, id: \.id) { review in + if let rating = review.rating, let feedback = review.reviewText { + MovieReviewCard( + title: "Feedback", + rating: Double(rating), + reviewerName: review.user.username, + review: feedback + ) + .frame(width: 350) + } + } + } + } + .scrollTargetLayout() + } + .scrollTargetBehavior(.viewAligned) + .scrollIndicators(.hidden) + } + + // Similar Movies + // if let movie = movieRef.data?.movie { + // let metadata = "\(movie.description) \nGenres: \(movie.genres.joined(separator: " "))" + // RelatedSection(similarMoviesRef: DataConnect.moviesClient.listSimilarMoviesQueryRef(to: movie.id, metadata: metadata)) + // } + } + .padding(8) + } +} + +extension MovieDetailsView { + func actorsSection(title: String, actors: [any MovieActor]) -> some View { + DetailsSection(title: title) { + ScrollView(.horizontal) { + LazyHStack { + ForEach(actors, id: \.id) { actor in + VStack(alignment: .center) { + if let imageUrl = URL(string: actor.imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .scaledToFill() + .frame(width: 96, height: 96, alignment: .center) + .clipShape(Circle()) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "person.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 96, height: 96, alignment: .center) + .redacted(reason: .placeholder) + .clipShape(Circle()) + } + } + } + Text(actor.name) + .font(.headline) + } + .padding(.horizontal, 8) + } + } + } + } + } +} + +//#Preview { +// MovieDetailsView(for: UUID()) +//} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift new file mode 100644 index 0000000..f9f7c02 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift @@ -0,0 +1,67 @@ +// +// MovieReviewCard.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieReviewCard: View { + var title: String + var rating: Double + var reviewerName: String + var review: String + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text(title) + .font(.headline) + HStack { + StarRatingView(rating: rating) + Text("·") + Text(reviewerName) + Spacer() + } + .font(.subheadline) + Text(review) + Spacer() + } + .padding(16) + .frame(height: 200) + .background(Color(UIColor.secondarySystemBackground)) + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: 16, + bottomLeading: 16, + bottomTrailing: 16, + topTrailing: 16), + style: .continuous)) + } +} + +#Preview { + ScrollView { + MovieReviewCard( + title: "Really great", + rating: 4.5, + reviewerName: "John Doe", + review: + "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." + ) + .padding() + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift new file mode 100644 index 0000000..c1d3a1e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift @@ -0,0 +1,43 @@ +// +// StarRatingView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct StarRatingView: View { + var rating: Double + + var body: some View { + HStack(spacing: 4) { + ForEach(0..<5) { index in + Image(systemName: self.starType(for: index)) + .foregroundColor(.yellow) + } + } + } + + func starType(for index: Int) -> String { + if rating > Double(index) + 0.75 { + return "star.fill" + } else if rating > Double(index) + 0.25 { + return "star.lefthalf.fill" + } else { + return "star" + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift new file mode 100644 index 0000000..c1ccc83 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift @@ -0,0 +1,243 @@ +// +// CardView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +// Try for blendmode https://saeedrz.medium.com/unleashing-creativity-a-deep-dive-into-blendmode-in-swiftui-2edc3f204fa8 + +struct CardView: View { + @Environment(\.dismiss) var dismiss + + var showDetails = true + + var hero: some View { + heroView() + } + + var heroView: () -> Hero + var heroTitle: () -> Title + var details: () -> Details + + public init( + showDetails: Bool = false, @ViewBuilder heroView: @escaping () -> Hero, + @ViewBuilder heroTitle: @escaping () -> Title, @ViewBuilder details: @escaping () -> Details + ) { + self.showDetails = showDetails + self.heroView = heroView + self.heroTitle = heroTitle + self.details = details + } + + @ViewBuilder + var dismissButton: some View { + if showDetails { + HStack { + Spacer() + Button { + dismiss() + } label: { + Image(systemName: "xmark") + .font(.headline) + .foregroundColor(.white) + .frame(width: 30, height: 30) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + } + .padding([.top, .trailing], 30) + } + } else { + EmptyView() + } + } + + var cardView: some View { + VStack(spacing: 0) { + ZStack(alignment: .topLeading) { + hero + dismissButton + heroTitle() + } + .frame(height: 450) + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: cornerRadius, + bottomLeading: showDetails ? 0 : 16, + bottomTrailing: showDetails ? 0 : 16, + topTrailing: cornerRadius), + style: .continuous) + ) + .padding(showDetails ? 0 : 16) + .shadow(radius: showDetails ? 0 : 8) + + if showDetails { + details() + .background(Color(UIColor.systemBackground)) + } + } + } + + @State var scaleFactor: CGFloat = 1 + @State var cornerRadius: CGFloat = 16 + + var body: some View { + if showDetails { + ScrollView { + cardView + .scaleEffect(scaleFactor) + .navigationBarBackButtonHidden(true) + .statusBar(hidden: true) + } + .ignoresSafeArea() + // Start: drag down to pop back + .background(Color(UIColor.secondarySystemBackground)) + .scrollIndicators(scaleFactor < 1 ? .hidden : .automatic, axes: .vertical) + .onScrollGeometryChange(for: CGFloat.self) { geometry in + geometry.contentOffset.y + } action: { oldValue, newValue in + if newValue >= 0 { + scaleFactor = 1 + cornerRadius = 16 + } else { + scaleFactor = 1 - (0.1 * (newValue / -50)) + cornerRadius = 55 - (35 / 50 * -newValue) + } + } + .onScrollGeometryChange(for: Bool.self) { geometry in + geometry.contentOffset.y < -50 + } action: { oldValue, newValue in + if newValue { + dismiss() + } + } + // End: drag down to pop back + } else { + cardView + .foregroundColor(.primary) + } + } +} + +#Preview { + CardView(showDetails: true) { + GradientView(configuration: GradienConfiguration.sample) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } +} + +#Preview { + ScrollView { + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.sample) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.samples[1]) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.samples[2]) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift new file mode 100644 index 0000000..cc8c8e9 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift @@ -0,0 +1,152 @@ +// +// GradienConfiguration.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +let neonSunsetBlurb = + """ + Immerse yourself in the captivating allure of Neon Sunset, a mesmerizing gradient that seamlessly blends the warmth of daylight with the electric energy of the night. This vibrant spectrum captures the fleeting magic of twilight, where the sun dips below the horizon, painting the sky with a kaleidoscope of fiery oranges, deep pinks, and electrifying purples. + + Neon Sunset is not merely a color scheme; it's an experience. It evokes a sense of wonder, igniting the imagination and transporting you to a world where boundaries blur and possibilities abound. Whether you're designing a website, creating artwork, or simply seeking a visual feast for the eyes, Neon Sunset will infuse your projects with an undeniable vibrancy and modern flair. + + Embrace the dynamism of this gradient, as it effortlessly transitions from warm to cool tones. Let the radiant oranges and yellows awaken your creativity, while the deep purples and pinks add a touch of mystery and intrigue. Neon Sunset is a versatile tool that can be adapted to suit a wide range of styles and moods, making it an essential addition to any designer's toolkit. + + Unleash the power of Neon Sunset and watch your creations come alive with a captivating energy that is both bold and sophisticated. This gradient is more than just a visual element; it's a statement. It embodies a spirit of innovation, a celebration of individuality, and a passion for pushing boundaries. + + So, step into the world of Neon Sunset and let your imagination soar. Embrace the vibrant hues, the seamless transitions, and the electrifying energy. Discover a gradient that will elevate your designs, captivate your audience, and leave a lasting impression. + """ + +let prismaticDawnBlurb = + """ + Prismatic Dawn is an enchanting gradient that captures the ephemeral beauty of sunrise, where the first rays of light kiss the horizon and transform the world into a canvas of vibrant hues. This captivating spectrum evokes a sense of wonder, joy, and limitless possibilities. + + Immerse yourself in the mesmerizing blend of soft pastels and bold primary colors. Let the gentle pinks, blues, and purples soothe your senses, while the fiery oranges and yellows ignite your creativity. Prismatic Dawn is a celebration of diversity and harmony, where each color plays a vital role in creating a symphony of light and energy. + + Embrace the fluidity of this gradient, as it seamlessly transitions from delicate shades to vivid bursts of brilliance. Whether you're designing a website, crafting artwork, or simply seeking visual inspiration, Prismatic Dawn will infuse your projects with an undeniable charm and optimism. + + Unleash the power of Prismatic Dawn and watch your creations radiate with a captivating energy that is both playful and sophisticated. This gradient is more than just a visual element; it's an invitation to embrace the magic of color and the boundless potential of creativity. + + Step into the world of Prismatic Dawn and let your imagination dance with light. Explore the harmonious blend of hues, the gentle transitions, and the vibrant energy. Discover a gradient that will elevate your designs, inspire your audience, and leave a lasting impression. + """ + +let serenityDuskBlurb = + """ + Serenity Dusk is a captivating gradient that captures the peaceful transition between day and night. This mesmerizing blend of soft blues and warm pinks evokes a sense of tranquility, introspection, and gentle beauty. + + Immerse yourself in the calming embrace of this gradient, as it seamlessly blends cool and warm tones. Let the soothing blues wash over you, while the delicate pinks awaken a sense of hope and optimism. Serenity Dusk is a celebration of balance and harmony, where opposing forces come together to create a breathtaking visual experience. + + Embrace the subtlety of this gradient, as it gently shifts from one hue to another. Whether you're designing a website, crafting artwork, or simply seeking a moment of visual respite, Serenity Dusk will infuse your projects with a sense of peace and tranquility. + + Unleash the power of Serenity Dusk and watch your creations radiate with a captivating energy that is both calming and uplifting. This gradient is more than just a visual element; it's an invitation to embrace the beauty of stillness and the transformative power of color. + + Step into the world of Serenity Dusk and let your senses be enveloped by its gentle embrace. Explore the harmonious blend of hues, the soft transitions, and the subtle vibrancy. Discover a gradient that will elevate your designs, inspire your audience, and leave a lasting impression of serenity and beauty. + """ + +struct GradienConfiguration: Identifiable, Hashable { + let id = UUID().uuidString + let name: String + let tagLine: String + let subLine: String + let description: String + let points: [SIMD2] + let colors: [Color] +} + +extension GradienConfiguration { + var dimension: Int { + Int(Double(points.count).squareRoot()) + } + + static let samples: [Self] = [ + .init( + name: "Prismatic Dawn", + tagLine: "Where Light Dances with Color", + subLine: "Vivid, eye-catching, modern design.", + description: neonSunsetBlurb, + points: [ + [0.0, 0.0], [0.5, 0.0], [1.0, 0.0], + [0.0, 0.5], [0.6, 0.5], [1.0, 0.5], + [0.0, 1.0], [0.5, 1.0], [1.0, 1.0], + ], + colors: [ + .red, .purple, .indigo, + .orange, .white, .blue, + .yellow, .green, .mint, + ]), + .init( + name: "Neon Sunset", + tagLine: "Where the Day Meets the Night", + subLine: "Playful, vibrant, and energetic.", + description: prismaticDawnBlurb, + points: [ + [0.0, 0.0], [1.0, 0.0], + [0.0, 1.0], [1.0, 1.0], + ], + colors: [ + .red, .indigo, + .yellow, .blue, + ]), + .init( + name: "Serenity Dusk", + tagLine: "Where tranquility meets vibrancy", + subLine: "Embrace the calming hues of twilight.", + description: serenityDuskBlurb, + points: [ + [0.0, 0.0], [1.0, 0.0], + [0.0, 1.0], [1.0, 1.0], + ], + colors: [ + Color(hex: "#5a82e5"), Color(hex: "#ce6a7e"), + Color(hex: "#5084e9"), Color(hex: "#d66871"), + ]), + ] + + static let sample = Self.samples[0] +} + +struct GradientView: View { + var configuration: GradienConfiguration + @State private var isAnimating = false + var body: some View { + VStack { + if #available(iOS 18, macOS 15, tvOS 18, watchOS 11, *) { + MeshGradient( + width: configuration.dimension, + height: configuration.dimension, + points: configuration.points, + colors: configuration.colors, + smoothsColors: true, + colorSpace: .perceptual + ) + } else { + EllipticalGradient(colors: configuration.colors) + } + } + .ignoresSafeArea() + .onAppear { + withAnimation(.easeInOut(duration: 1).repeatForever(autoreverses: true)) { + isAnimating.toggle() + } + } + } +} + +#Preview { + GradientView(configuration: GradienConfiguration.sample) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift new file mode 100644 index 0000000..dc5c186 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift @@ -0,0 +1,76 @@ +// +// MovieCardView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +struct MovieCardView: View { + var showDetails: Bool = false + + var movie: ListMoviesQuery.Data.Movie + + var body: some View { + CardView(showDetails: showDetails) { + if let imageUrl = URL(string: movie.imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .aspectRatio(contentMode: .fill) + .frame(height: 450) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(height: 450) + .redacted(reason: .placeholder) + } + } + } + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + HStack { + VStack(alignment: .leading) { + Text(movie.title) + .multilineTextAlignment(.leading) + .font(.title) + .bold() + if let releaseYear = movie.releaseYear { + Text("Released: \(format: releaseYear, using: .none)") + } + } + Spacer() + } + .padding() + .background(.thinMaterial) + } + } details: { + MovieDetailsView(movie: movie) + } + } +} + +//#Preview { +// MovieCardView(showDetails: true, gradientConfiguration: GradienConfiguration.sample) +//} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift new file mode 100644 index 0000000..6c00a83 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift @@ -0,0 +1,67 @@ +// +// MoviesList.swift +// FriendlyFlix +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +struct MoviesList: View { + @Namespace var namespace + var listMovies = DataConnect.friendlyFlixConnector.listMoviesQuery.ref() + + var body: some View { + NavigationStack { + ScrollView { + if let movies = listMovies.data?.movies { + ForEach(movies) { movie in + NavigationLink(value: movie) { + MovieCardView(showDetails: false, movie: movie) + .matchedTransitionSource(id: "card\(movie.id)", in: namespace) + } + } + } + } + .navigationTitle("Friendly Flix") + .navigationDestination(for: ListMoviesQuery.Data.Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: "card\(movie.id)", in: namespace)) + } + .refreshable { + do { + let _ = try await listMovies.execute() + } catch { + } + } + } + .overlay { + if listMovies.data?.movies == nil { + ContentUnavailableView { + Label("No Movies", systemImage: "video.slash") + } description: { + Text("Movies will appear here.") + } + } + } + + } +} + +#Preview { + MoviesList() +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift new file mode 100644 index 0000000..2a69bd3 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift @@ -0,0 +1,36 @@ +// +// FriendlyFlixApp.swift +// FriendlyFlix +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Firebase +import FirebaseAuth +import SwiftUI + +@main +struct FriendlyFlixApp: App { + init() { + FirebaseApp.configure() + Auth.auth().signInAnonymously() + } + + var body: some Scene { + WindowGroup { + MoviesList() + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift new file mode 100644 index 0000000..4f3917d --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -0,0 +1,47 @@ +// +// Color+Hex.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +extension Color { + init(hex: String, opacity: Double = 1.0) { + var hexFormatted: String = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + .uppercased() + + if hexFormatted.hasPrefix("#") { + hexFormatted = String(hexFormatted.dropFirst()) + } + + assert(hexFormatted.count == 6 || hexFormatted.count == 8, "Invalid hex code") + + var rgbValue: UInt64 = 0 + Scanner(string: hexFormatted).scanHexInt64(&rgbValue) + + var alpha: Double = opacity + if hexFormatted.count == 8 { + alpha = Double((rgbValue & 0xFF00_0000) >> 24) / 255.0 + } + + let red = Double((rgbValue & 0x00FF_0000) >> 16) / 255.0 + let green = Double((rgbValue & 0x0000_FF00) >> 8) / 255.0 + let blue = Double(rgbValue & 0x0000_00FF) / 255.0 + + self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha) // Use alpha instead of opacity + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift new file mode 100644 index 0000000..547c0c3 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift @@ -0,0 +1,26 @@ +// +// String+Placeholder.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String { + static func placeholder(length: Int) -> String { + String(Array(repeating: "X", count: length)) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift new file mode 100644 index 0000000..a744357 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -0,0 +1,31 @@ +// +// String+StringInterpolation.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String.StringInterpolation { + mutating func appendInterpolation(format value: Int, using style: NumberFormatter.Style) { + let formatter = NumberFormatter() + formatter.numberStyle = style + + if let result = formatter.string(from: value as NSNumber) { + appendLiteral(result) + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift new file mode 100644 index 0000000..475f4c0 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift @@ -0,0 +1,28 @@ +// +// View+Extensions.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import SwiftUI + +extension View { + @ViewBuilder + func redacted(if condition: @autoclosure () -> Bool) -> some View { + redacted(reason: condition() ? .placeholder : []) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift new file mode 100644 index 0000000..921120a --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift @@ -0,0 +1,30 @@ +// +// FriendlyFlixTests.swift +// FriendlyFlixTests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Testing + +@testable import FriendlyFlix + +struct FriendlyFlixTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift new file mode 100644 index 0000000..6a6fea6 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift @@ -0,0 +1,55 @@ +// +// FriendlyFlixUITests.swift +// FriendlyFlixUITests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import XCTest + +final class FriendlyFlixUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift new file mode 100644 index 0000000..d0b7ca7 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift @@ -0,0 +1,45 @@ +// +// FriendlyFlixUITestsLaunchTests.swift +// FriendlyFlixUITests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import XCTest + +final class FriendlyFlixUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift new file mode 100644 index 0000000..465913e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]) + ], + dependencies: [ + .package(name: "FirebaseDataConnect", path: "../../../../") + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "FirebaseDataConnect") + ], + path: "Sources" + ) + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift new file mode 100644 index 0000000..efa1322 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -0,0 +1,93 @@ +import Foundation +import FirebaseDataConnect + + + + + + + +public extension DataConnect { + + static var friendlyFlixConnector: FriendlyFlixConnector = { + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig) + return FriendlyFlixConnector(dataConnect: dc) + }() + +} + +public class FriendlyFlixConnector { + + var dataConnect: DataConnect + + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + + // init operations + self.createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) + self.deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) + self.deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) + self.deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.searchMovieDescriptionUsingL2similarityQuery = SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) + self.moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) + self.searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) + self.searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) + self.getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + + } + + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) + } + + // MARK: Operations +public let createMovieMutation: CreateMovieMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addFavoritedActorMutation: AddFavoritedActorMutation +public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation +public let addReviewMutation: AddReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let upsertUserMutation: UpsertUserMutation +public let updateMovieMutation: UpdateMovieMutation +public let deleteMovieMutation: DeleteMovieMutation +public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation +public let listMoviesQuery: ListMoviesQuery +public let listMoviesByGenreQuery: ListMoviesByGenreQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery +public let searchAllQuery: SearchAllQuery +public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let listMoviesByTagQuery: ListMoviesByTagQuery +public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery +public let searchMovieOrQuery: SearchMovieOrQuery +public let searchMovieAndQuery: SearchMovieAndQuery +public let getFavoriteActorsQuery: GetFavoriteActorsQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery + + +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift new file mode 100644 index 0000000..59be0f9 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -0,0 +1,501 @@ +import Foundation + +import FirebaseDataConnect + + + +public struct ActorKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension ActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension ActorKey : Equatable { + public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension ActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct FavoriteActorKey { + + public private(set) var userId: String + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case actorId + + } +} + +extension FavoriteActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension FavoriteActorKey : Equatable { + public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension FavoriteActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.actorId) + + } +} + + + +public struct FavoriteMovieKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension FavoriteMovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension FavoriteMovieKey : Equatable { + public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension FavoriteMovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct MovieActorKey { + + public private(set) var movieId: UUID + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case movieId + + case actorId + + } +} + +extension MovieActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension MovieActorKey : Equatable { + public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + + if lhs.movieId != rhs.movieId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension MovieActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + + } +} + + + +public struct MovieMetadataKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieMetadataKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieMetadataKey : Equatable { + public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieMetadataKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct MovieKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieKey : Equatable { + public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct ReviewKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension ReviewKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension ReviewKey : Equatable { + public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension ReviewKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct UserKey { + + public private(set) var id: String + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension UserKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension UserKey : Equatable { + public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension UserKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift new file mode 100644 index 0000000..dde7e2e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -0,0 +1,6319 @@ +import FirebaseDataConnect +import Foundation + + + + + + + + + + + + + + + + + + + + +// MARK: Common Enums + +public enum OrderDirection: String, Codable { + case ASC = "ASC" + case DESC = "DESC" + } + +// End enum definitions + + + + + + + + + +public class CreateMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "CreateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +title: String + + + + public var +releaseYear: Int + + + + public var +genre: String + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + + public var +imageUrl: String + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +title: String +, + +releaseYear: Int +, + +genre: String +, + +imageUrl: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(title, forKey: .title, container: &container) + + + + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_insert: MovieKey + + } + + public func ref( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddFavoritedMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_upsert: FavoriteMovieKey + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteFavoritedMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_delete: FavoriteMovieKey? + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddFavoritedActorMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_upsert: FavoriteActorKey + + } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteFavoritedActorMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_delete: FavoriteActorKey? + + } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddReviewMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String + + + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String + + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + case rating + + case reviewText + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_upsert: ReviewKey + + } + + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteReviewMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_delete: ReviewKey? + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class UpsertUserMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "UpsertUser" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +username: String + + + + + + public init ( + +username: String + + + ) { + self.username = username + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.username == rhs.username + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} + + enum CodingKeys: String, CodingKey { + + case username + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(username, forKey: .username, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +user_upsert: UserKey + + } + + public func ref( + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class UpdateMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "UpdateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + @OptionalVariable + public var +title: String? + + + @OptionalVariable + public var +releaseYear: Int? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + @OptionalVariable + public var +imageUrl: String? + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +id: UUID + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.id = id + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) + } + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + } + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_update: MovieKey? + + } + + public func ref( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +movie_delete: MovieKey? + + } + + public func ref( + +id: UUID + + ) -> MutationRef { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteUnpopularMoviesMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteUnpopularMovies" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +minRating: Double + + + + + + public init ( + +minRating: Double + + + ) { + self.minRating = minRating + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + } + + } + + public struct Data: Decodable { + + +public var +movie_deleteMany: Int + + } + + public func ref( + +minRating: Double + + ) -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +minRating: Double + + ) async throws -> OperationResult { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class ListMoviesQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(limit) + +} + + enum CodingKeys: String, CodingKey { + + case limit + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByGenreQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByGenre" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +genre: String + + + + + + public init ( + +genre: String + + + ) { + self.genre = genre + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostPopularKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostPopular: [MovieMostPopular] + + + + + +public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostRecentKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostRecent: [MovieMostRecent] + + } + + public func ref( + +genre: String + + ) -> QueryRefObservation { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +genre: String + + ) async throws -> OperationResult { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetMovieByIdQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetMovieById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + + +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] + + + + + +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + +public var +rating: Int? + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetActorByIdQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetActorById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + + +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] + + + + + +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetCurrentUserQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetCurrentUser" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewDate: LocalDate + + + +public var +reviewText: String? + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + + +public struct FavoriteMovieFavoriteMovies: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + +public struct FavoriteActorFavoriteActors: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favoriteActors: [FavoriteActorFavoriteActors] + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + case favoriteActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetIfFavoritedMovieQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetIfFavoritedMovie" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteMovie: Decodable { + + + +public var +movieId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + + } +} +public var +favorite_movie: FavoriteMovie? + + } + + public func ref( + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetIfFavoritedActorQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetIfFavoritedActor" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteActor: Decodable { + + + +public var +actorId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + + } +} +public var +favorite_actor: FavoriteActor? + + } + + public func ref( + +actorId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchAllQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchAll" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? + + + + public var +minYear: Int + + + + public var +maxYear: Int + + + + public var +minRating: Double + + + + public var +maxRating: Double + + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case input + + case minYear + + case maxYear + + case minRating + + case maxRating + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) + + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) + + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] + + + + + +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] + + + + + +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] + + + + + +public struct ReviewReviewsMatchingText: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } + + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieDescriptionUsingL2similarityQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +query: String + + + + + + public init ( + +query: String + + + ) { + self.query = query + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.query == rhs.query + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(query) + +} + + enum CodingKeys: String, CodingKey { + + case query + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(query, forKey: .query, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +description: String? + + + +public var +tags: [String]? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case description + + case tags + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies_descriptionEmbedding_similarity: [Movie] + + } + + public func ref( + +query: String + + ) -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +query: String + + ) async throws -> OperationResult { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByPartialTitleQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByPartialTitle" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +input: String + + + + + + public init ( + +input: String + + + ) { + self.input = input + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(input, forKey: .input, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + +input: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +input: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByTagQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByTag" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +tag: String + + + + + + public init ( + +tag: String + + + ) { + self.tag = tag + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.tag == rhs.tag + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(tag) + +} + + enum CodingKeys: String, CodingKey { + + case tag + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(tag, forKey: .tag, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case genre + + case rating + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + +tag: String + + ) -> QueryRefObservation { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +tag: String + + ) async throws -> OperationResult { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class MoviesByReleaseYearQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "MoviesByReleaseYear" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +min: Int? + + + @OptionalVariable + public var +max: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.min == rhs.min && + lhs.max == rhs.max + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(min) + + hasher.combine(max) + +} + + enum CodingKeys: String, CodingKey { + + case min + + case max + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) + } + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieOrQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieOr" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieAndQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieAnd" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetFavoriteActorsQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetFavoriteActors" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteActor: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favorite_actors_on_user: [FavoriteActor] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_actors_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetUserFavoriteMoviesQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetUserFavoriteMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteMovie: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favorite_movies_on_user: [FavoriteMovie] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_movies_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift new file mode 100644 index 0000000..77520f6 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift @@ -0,0 +1,34 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v15), + .macOS(.v10_15), + .watchOS(.v6), + .tvOS(.v13) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/firebase-ios-sdk", branch: "dataconnect"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"firebase-ios-sdk") + ], + path: "Sources" + ) + ] +) + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift new file mode 100644 index 0000000..a04f999 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -0,0 +1,33 @@ +import Foundation +import FirebaseDataConnect + + + + + + + +public extension DataConnect { + + static var friendlyFlixClient: FriendlyFlixClient = { + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixClient.connectorConfig) + return FriendlyFlixClient(dataConnect: dc) + }() + +} + +public class FriendlyFlixClient { + + var dataConnect: DataConnect + + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) + } + +} diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift new file mode 100644 index 0000000..59be0f9 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -0,0 +1,501 @@ +import Foundation + +import FirebaseDataConnect + + + +public struct ActorKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension ActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension ActorKey : Equatable { + public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension ActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct FavoriteActorKey { + + public private(set) var userId: String + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case actorId + + } +} + +extension FavoriteActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension FavoriteActorKey : Equatable { + public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension FavoriteActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.actorId) + + } +} + + + +public struct FavoriteMovieKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension FavoriteMovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension FavoriteMovieKey : Equatable { + public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension FavoriteMovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct MovieActorKey { + + public private(set) var movieId: UUID + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case movieId + + case actorId + + } +} + +extension MovieActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension MovieActorKey : Equatable { + public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + + if lhs.movieId != rhs.movieId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension MovieActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + + } +} + + + +public struct MovieMetadataKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieMetadataKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieMetadataKey : Equatable { + public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieMetadataKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct MovieKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieKey : Equatable { + public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct ReviewKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension ReviewKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension ReviewKey : Equatable { + public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension ReviewKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct UserKey { + + public private(set) var id: String + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension UserKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension UserKey : Equatable { + public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension UserKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift new file mode 100644 index 0000000..9bfd1ca --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -0,0 +1,5813 @@ +import FirebaseDataConnect +import Foundation + + + + + + + + + + + + + + + + + + + + + + +// MARK: Connector Client Extension +public extension FriendlyFlixClient { + + + + + func createMovieMutationRef( + + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + let request = MutationRequest(operationName: "CreateMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:CreateMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func addFavoritedMovieMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "AddFavoritedMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteFavoritedMovieMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "DeleteFavoritedMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func addFavoritedActorMutationRef( + + +actorId: UUID + + ) -> MutationRef { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + let request = MutationRequest(operationName: "AddFavoritedActor", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedActorMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteFavoritedActorMutationRef( + + +actorId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + let request = MutationRequest(operationName: "DeleteFavoritedActor", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedActorMutation.Data.self) + return ref as! MutationRef + } + + + + + func addReviewMutationRef( + + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + let request = MutationRequest(operationName: "AddReview", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddReviewMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteReviewMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "DeleteReview", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteReviewMutation.Data.self) + return ref as! MutationRef + } + + + + + func upsertUserMutationRef( + + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + let request = MutationRequest(operationName: "UpsertUser", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:UpsertUserMutation.Data.self) + return ref as! MutationRef + } + + + + + func updateMovieMutationRef( + + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + let request = MutationRequest(operationName: "UpdateMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:UpdateMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteMovieMutationRef( + + +id: UUID + + ) -> MutationRef { + var variables = DeleteMovieMutation.Variables(id:id) + + let request = MutationRequest(operationName: "DeleteMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteUnpopularMoviesMutationRef( + + +minRating: Double + + ) -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + let request = MutationRequest(operationName: "DeleteUnpopularMovies", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + return ref as! MutationRef + } + + + + + func listMoviesQueryRef( + + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "ListMovies", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByGenreQueryRef( + + +genre: String + + ) -> QueryRefObservation { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + let request = QueryRequest(operationName: "ListMoviesByGenre", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getMovieByIdQueryRef( + + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + let request = QueryRequest(operationName: "GetMovieById", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getActorByIdQueryRef( + + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + let request = QueryRequest(operationName: "GetActorById", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getCurrentUserQueryRef( + + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let request = QueryRequest(operationName: "GetCurrentUser", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getIfFavoritedMovieQueryRef( + + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + let request = QueryRequest(operationName: "GetIfFavoritedMovie", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getIfFavoritedActorQueryRef( + + +actorId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + let request = QueryRequest(operationName: "GetIfFavoritedActor", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchAllQueryRef( + + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchAll", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieDescriptionUsingL2similarityQueryRef( + + +query: String + + ) -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + let request = QueryRequest(operationName: "SearchMovieDescriptionUsingL2Similarity", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByPartialTitleQueryRef( + + +input: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + let request = QueryRequest(operationName: "ListMoviesByPartialTitle", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByTagQueryRef( + + +tag: String + + ) -> QueryRefObservation { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + let request = QueryRequest(operationName: "ListMoviesByTag", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func moviesByReleaseYearQueryRef( + + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "MoviesByReleaseYear", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieOrQueryRef( + + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchMovieOr", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieAndQueryRef( + + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchMovieAnd", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getFavoriteActorsQueryRef( + + + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + let request = QueryRequest(operationName: "GetFavoriteActors", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getUserFavoriteMoviesQueryRef( + + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let request = QueryRequest(operationName: "GetUserFavoriteMovies", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + +} + + + + + + +public enum CreateMovieMutation{ + + public static let OperationName = "CreateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +title: String + + + + public var +releaseYear: Int + + + + public var +genre: String + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + + public var +imageUrl: String + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +title: String +, + +releaseYear: Int +, + +genre: String +, + +imageUrl: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(title, forKey: .title, container: &container) + + + + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_insert: MovieKey + + } +} + + + + + + +public enum AddFavoritedMovieMutation{ + + public static let OperationName = "AddFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_upsert: FavoriteMovieKey + + } +} + + + + + + +public enum DeleteFavoritedMovieMutation{ + + public static let OperationName = "DeleteFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_delete: FavoriteMovieKey? + + } +} + + + + + + +public enum AddFavoritedActorMutation{ + + public static let OperationName = "AddFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_upsert: FavoriteActorKey + + } +} + + + + + + +public enum DeleteFavoritedActorMutation{ + + public static let OperationName = "DeleteFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_delete: FavoriteActorKey? + + } +} + + + + + + +public enum AddReviewMutation{ + + public static let OperationName = "AddReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String + + + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String + + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + case rating + + case reviewText + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_upsert: ReviewKey + + } +} + + + + + + +public enum DeleteReviewMutation{ + + public static let OperationName = "DeleteReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_delete: ReviewKey? + + } +} + + + + + + +public enum UpsertUserMutation{ + + public static let OperationName = "UpsertUser" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +username: String + + + + + + public init ( + +username: String + + + ) { + self.username = username + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.username == rhs.username + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} + + enum CodingKeys: String, CodingKey { + + case username + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(username, forKey: .username, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +user_upsert: UserKey + + } +} + + + + + + +public enum UpdateMovieMutation{ + + public static let OperationName = "UpdateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + @OptionalVariable + public var +title: String? + + + @OptionalVariable + public var +releaseYear: Int? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + @OptionalVariable + public var +imageUrl: String? + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +id: UUID + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.id = id + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) + } + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + } + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_update: MovieKey? + + } +} + + + + + + +public enum DeleteMovieMutation{ + + public static let OperationName = "DeleteMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +movie_delete: MovieKey? + + } +} + + + + + + +public enum DeleteUnpopularMoviesMutation{ + + public static let OperationName = "DeleteUnpopularMovies" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +minRating: Double + + + + + + public init ( + +minRating: Double + + + ) { + self.minRating = minRating + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + } + + } + + public struct Data: Decodable { + + +public var +movie_deleteMany: Int + + } +} + + + + + + +public enum ListMoviesQuery{ + + public static let OperationName = "ListMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(limit) + +} + + enum CodingKeys: String, CodingKey { + + case limit + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum ListMoviesByGenreQuery{ + + public static let OperationName = "ListMoviesByGenre" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +genre: String + + + + + + public init ( + +genre: String + + + ) { + self.genre = genre + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostPopularKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostPopular: [MovieMostPopular] + + + + + +public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostRecentKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostRecent: [MovieMostRecent] + + } +} + + + + + + +public enum GetMovieByIdQuery{ + + public static let OperationName = "GetMovieById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + + +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] + + + + + +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + +public var +rating: Int? + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? + + } +} + + + + + + +public enum GetActorByIdQuery{ + + public static let OperationName = "GetActorById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + + +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] + + + + + +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? + + } +} + + + + + + +public enum GetCurrentUserQuery{ + + public static let OperationName = "GetCurrentUser" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewDate: LocalDate + + + +public var +reviewText: String? + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + + +public struct FavoriteMovieFavoriteMovies: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + +public struct FavoriteActorFavoriteActors: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favoriteActors: [FavoriteActorFavoriteActors] + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + case favoriteActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) + + + } +} +public var +user: User? + + } +} + + + + + + +public enum GetIfFavoritedMovieQuery{ + + public static let OperationName = "GetIfFavoritedMovie" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteMovie: Decodable { + + + +public var +movieId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + + } +} +public var +favorite_movie: FavoriteMovie? + + } +} + + + + + + +public enum GetIfFavoritedActorQuery{ + + public static let OperationName = "GetIfFavoritedActor" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteActor: Decodable { + + + +public var +actorId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + + } +} +public var +favorite_actor: FavoriteActor? + + } +} + + + + + + +public enum SearchAllQuery{ + + public static let OperationName = "SearchAll" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? + + + + public var +minYear: Int + + + + public var +maxYear: Int + + + + public var +minRating: Double + + + + public var +maxRating: Double + + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case input + + case minYear + + case maxYear + + case minRating + + case maxRating + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) + + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) + + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] + + + + + +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] + + + + + +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] + + + + + +public struct ReviewReviewsMatchingText: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } +} + + + + + + +public enum SearchMovieDescriptionUsingL2similarityQuery{ + + public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +query: String + + + + + + public init ( + +query: String + + + ) { + self.query = query + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.query == rhs.query + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(query) + +} + + enum CodingKeys: String, CodingKey { + + case query + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(query, forKey: .query, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +description: String? + + + +public var +tags: [String]? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case description + + case tags + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies_descriptionEmbedding_similarity: [Movie] + + } +} + + + + + + +public enum ListMoviesByPartialTitleQuery{ + + public static let OperationName = "ListMoviesByPartialTitle" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +input: String + + + + + + public init ( + +input: String + + + ) { + self.input = input + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(input, forKey: .input, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum ListMoviesByTagQuery{ + + public static let OperationName = "ListMoviesByTag" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +tag: String + + + + + + public init ( + +tag: String + + + ) { + self.tag = tag + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.tag == rhs.tag + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(tag) + +} + + enum CodingKeys: String, CodingKey { + + case tag + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(tag, forKey: .tag, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case genre + + case rating + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum MoviesByReleaseYearQuery{ + + public static let OperationName = "MoviesByReleaseYear" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +min: Int? + + + @OptionalVariable + public var +max: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.min == rhs.min && + lhs.max == rhs.max + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(min) + + hasher.combine(max) + +} + + enum CodingKeys: String, CodingKey { + + case min + + case max + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) + } + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum SearchMovieOrQuery{ + + public static let OperationName = "SearchMovieOr" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum SearchMovieAndQuery{ + + public static let OperationName = "SearchMovieAnd" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum GetFavoriteActorsQuery{ + + public static let OperationName = "GetFavoriteActors" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteActor: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favorite_actors_on_user: [FavoriteActor] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_actors_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + + } +} +public var +user: User? + + } +} + + + + + + +public enum GetUserFavoriteMoviesQuery{ + + public static let OperationName = "GetUserFavoriteMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteMovie: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favorite_movies_on_user: [FavoriteMovie] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_movies_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + + } +} +public var +user: User? + + } +} + + diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql new file mode 100644 index 0000000..8b418e9 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql @@ -0,0 +1,20 @@ +extend type FavoriteActor { + userId: String! @fdc_generated(from: "FavoriteActor.user", purpose: IMPLICIT_REF_FIELD) + actorId: UUID! @fdc_generated(from: "FavoriteActor.actor", purpose: IMPLICIT_REF_FIELD) +} +extend type FavoriteMovie { + userId: String! @fdc_generated(from: "FavoriteMovie.user", purpose: IMPLICIT_REF_FIELD) + movieId: UUID! @fdc_generated(from: "FavoriteMovie.movie", purpose: IMPLICIT_REF_FIELD) +} +extend type MovieActor { + movieId: UUID! @fdc_generated(from: "MovieActor.movie", purpose: IMPLICIT_REF_FIELD) + actorId: UUID! @fdc_generated(from: "MovieActor.actor", purpose: IMPLICIT_REF_FIELD) +} +extend type MovieMetadata { + id: UUID! @default(expr: "uuidV4()") @fdc_generated(from: "MovieMetadata", purpose: IMPLICIT_KEY_FIELD) + movieId: UUID! @fdc_generated(from: "MovieMetadata.movie", purpose: IMPLICIT_REF_FIELD) +} +extend type Review { + movieId: UUID! @fdc_generated(from: "Review.movie", purpose: IMPLICIT_REF_FIELD) + userId: String! @fdc_generated(from: "Review.user", purpose: IMPLICIT_REF_FIELD) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql new file mode 100644 index 0000000..d0e06fe --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql @@ -0,0 +1,272 @@ +scalar Actor_Key +scalar FavoriteActor_Key +scalar FavoriteMovie_Key +scalar Movie_Key +scalar MovieActor_Key +scalar MovieMetadata_Key +scalar Review_Key +scalar User_Key +input Actor_Data { + id: UUID + id_expr: UUID_Expr + imageUrl: String + imageUrl_expr: String_Expr + name: String + name_expr: String_Expr +} +input Actor_Filter { + _and: [Actor_Filter!] + _not: Actor_Filter + _or: [Actor_Filter!] + id: UUID_Filter + imageUrl: String_Filter + name: String_Filter + favorite_actors_on_actor: FavoriteActor_ListFilter + movieActors_on_actor: MovieActor_ListFilter + movies_via_MovieActor: Movie_ListFilter + users_via_FavoriteActor: User_ListFilter +} +input Actor_ListFilter { + count: Int_Filter = {gt:0} + exist: Actor_Filter +} +input Actor_Order { + id: OrderDirection + imageUrl: OrderDirection + name: OrderDirection +} +input FavoriteActor_Data { + userId: String + userId_expr: String_Expr + actorId: UUID + actorId_expr: UUID_Expr + actor: Actor_Key + user: User_Key +} +input FavoriteActor_Filter { + _and: [FavoriteActor_Filter!] + _not: FavoriteActor_Filter + _or: [FavoriteActor_Filter!] + userId: String_Filter + actorId: UUID_Filter + actor: Actor_Filter + user: User_Filter +} +input FavoriteActor_ListFilter { + count: Int_Filter = {gt:0} + exist: FavoriteActor_Filter +} +input FavoriteActor_Order { + userId: OrderDirection + actorId: OrderDirection + actor: Actor_Order + user: User_Order +} +input FavoriteMovie_Data { + userId: String + userId_expr: String_Expr + movieId: UUID + movieId_expr: UUID_Expr + movie: Movie_Key + user: User_Key +} +input FavoriteMovie_Filter { + _and: [FavoriteMovie_Filter!] + _not: FavoriteMovie_Filter + _or: [FavoriteMovie_Filter!] + userId: String_Filter + movieId: UUID_Filter + movie: Movie_Filter + user: User_Filter +} +input FavoriteMovie_ListFilter { + count: Int_Filter = {gt:0} + exist: FavoriteMovie_Filter +} +input FavoriteMovie_Order { + userId: OrderDirection + movieId: OrderDirection + movie: Movie_Order + user: User_Order +} +input Movie_Data { + id: UUID + id_expr: UUID_Expr + description: String + description_expr: String_Expr + descriptionEmbedding: Vector + descriptionEmbedding_embed: Vector_Embed + genre: String + genre_expr: String_Expr + imageUrl: String + imageUrl_expr: String_Expr + rating: Float + releaseYear: Int + tags: [String!] + title: String + title_expr: String_Expr +} +input Movie_Filter { + _and: [Movie_Filter!] + _not: Movie_Filter + _or: [Movie_Filter!] + id: UUID_Filter + description: String_Filter + descriptionEmbedding: Vector_Filter + genre: String_Filter + imageUrl: String_Filter + rating: Float_Filter + releaseYear: Int_Filter + tags: String_ListFilter + title: String_Filter + favorite_movies_on_movie: FavoriteMovie_ListFilter + movieActors_on_movie: MovieActor_ListFilter + movieMetadatas_on_movie: MovieMetadata_ListFilter + reviews_on_movie: Review_ListFilter + actors_via_MovieActor: Actor_ListFilter + users_via_FavoriteMovie: User_ListFilter + users_via_Review: User_ListFilter +} +input Movie_ListFilter { + count: Int_Filter = {gt:0} + exist: Movie_Filter +} +input Movie_Order { + id: OrderDirection + description: OrderDirection + descriptionEmbedding: OrderDirection + genre: OrderDirection + imageUrl: OrderDirection + rating: OrderDirection + releaseYear: OrderDirection + title: OrderDirection +} +input MovieActor_Data { + movieId: UUID + movieId_expr: UUID_Expr + actorId: UUID + actorId_expr: UUID_Expr + actor: Actor_Key + movie: Movie_Key + role: String + role_expr: String_Expr +} +input MovieActor_Filter { + _and: [MovieActor_Filter!] + _not: MovieActor_Filter + _or: [MovieActor_Filter!] + movieId: UUID_Filter + actorId: UUID_Filter + actor: Actor_Filter + movie: Movie_Filter + role: String_Filter +} +input MovieActor_ListFilter { + count: Int_Filter = {gt:0} + exist: MovieActor_Filter +} +input MovieActor_Order { + movieId: OrderDirection + actorId: OrderDirection + actor: Actor_Order + movie: Movie_Order + role: OrderDirection +} +input MovieMetadata_Data { + id: UUID + id_expr: UUID_Expr + movieId: UUID + movieId_expr: UUID_Expr + movie: Movie_Key + director: String + director_expr: String_Expr +} +input MovieMetadata_Filter { + _and: [MovieMetadata_Filter!] + _not: MovieMetadata_Filter + _or: [MovieMetadata_Filter!] + id: UUID_Filter + movieId: UUID_Filter + movie: Movie_Filter + director: String_Filter +} +input MovieMetadata_ListFilter { + count: Int_Filter = {gt:0} + exist: MovieMetadata_Filter +} +input MovieMetadata_Order { + id: OrderDirection + movieId: OrderDirection + movie: Movie_Order + director: OrderDirection +} +input Review_Data { + movieId: UUID + movieId_expr: UUID_Expr + userId: String + userId_expr: String_Expr + movie: Movie_Key + user: User_Key + id: UUID + id_expr: UUID_Expr + rating: Int + reviewDate: Date + reviewDate_date: Date_Relative + reviewDate_expr: Date_Expr + reviewText: String + reviewText_expr: String_Expr +} +input Review_Filter { + _and: [Review_Filter!] + _not: Review_Filter + _or: [Review_Filter!] + movieId: UUID_Filter + userId: String_Filter + movie: Movie_Filter + user: User_Filter + id: UUID_Filter + rating: Int_Filter + reviewDate: Date_Filter + reviewText: String_Filter +} +input Review_ListFilter { + count: Int_Filter = {gt:0} + exist: Review_Filter +} +input Review_Order { + movieId: OrderDirection + userId: OrderDirection + movie: Movie_Order + user: User_Order + id: OrderDirection + rating: OrderDirection + reviewDate: OrderDirection + reviewText: OrderDirection +} +input User_Data { + id: String + id_expr: String_Expr + username: String + username_expr: String_Expr +} +input User_Filter { + _and: [User_Filter!] + _not: User_Filter + _or: [User_Filter!] + id: String_Filter + username: String_Filter + favorite_actors_on_user: FavoriteActor_ListFilter + favorite_movies_on_user: FavoriteMovie_ListFilter + reviews_on_user: Review_ListFilter + actors_via_FavoriteActor: Actor_ListFilter + movies_via_FavoriteMovie: Movie_ListFilter + movies_via_Review: Movie_ListFilter +} +input User_ListFilter { + count: Int_Filter = {gt:0} + exist: User_Filter +} +input User_Order { + id: OrderDirection + username: OrderDirection +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql new file mode 100644 index 0000000..335961a --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql @@ -0,0 +1,258 @@ +extend type Mutation { + """ + Insert a single Actor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: INSERT_SINGLE) + """ + Insert a single FavoriteActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_actor_insert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: INSERT_SINGLE) + """ + Insert a single FavoriteMovie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_SINGLE) + """ + Insert a single Movie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: INSERT_SINGLE) + """ + Insert a single MovieActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: INSERT_SINGLE) + """ + Insert a single MovieMetadata into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: INSERT_SINGLE) + """ + Insert a single Review into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: INSERT_SINGLE) + """ + Insert a single User into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: INSERT_SINGLE) + """ + Insert Actor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insertMany(data: [Actor_Data!]!): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: INSERT_MULTIPLE) + """ + Insert FavoriteActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_actor_insertMany(data: [FavoriteActor_Data!]!): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: INSERT_MULTIPLE) + """ + Insert FavoriteMovie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insertMany(data: [FavoriteMovie_Data!]!): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_MULTIPLE) + """ + Insert Movie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insertMany(data: [Movie_Data!]!): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: INSERT_MULTIPLE) + """ + Insert MovieActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insertMany(data: [MovieActor_Data!]!): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: INSERT_MULTIPLE) + """ + Insert MovieMetadata entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insertMany(data: [MovieMetadata_Data!]!): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: INSERT_MULTIPLE) + """ + Insert Review entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insertMany(data: [Review_Data!]!): [Review_Key!]! @fdc_generated(from: "Review", purpose: INSERT_MULTIPLE) + """ + Insert User entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insertMany(data: [User_Data!]!): [User_Key!]! @fdc_generated(from: "User", purpose: INSERT_MULTIPLE) + """ + Insert or update a single Actor into the table, based on the primary key. Returns the key of the newly inserted Actor. + """ + actor_upsert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: UPSERT_SINGLE) + """ + Insert or update a single FavoriteActor into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. + """ + favorite_actor_upsert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_SINGLE) + """ + Insert or update a single FavoriteMovie into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. + """ + favorite_movie_upsert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_SINGLE) + """ + Insert or update a single Movie into the table, based on the primary key. Returns the key of the newly inserted Movie. + """ + movie_upsert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: UPSERT_SINGLE) + """ + Insert or update a single MovieActor into the table, based on the primary key. Returns the key of the newly inserted MovieActor. + """ + movieActor_upsert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: UPSERT_SINGLE) + """ + Insert or update a single MovieMetadata into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. + """ + movieMetadata_upsert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_SINGLE) + """ + Insert or update a single Review into the table, based on the primary key. Returns the key of the newly inserted Review. + """ + review_upsert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: UPSERT_SINGLE) + """ + Insert or update a single User into the table, based on the primary key. Returns the key of the newly inserted User. + """ + user_upsert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: UPSERT_SINGLE) + """ + Insert or update Actor entries into the table, based on the primary key. Returns the key of the newly inserted Actor. + """ + actor_upsertMany(data: [Actor_Data!]): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: UPSERT_MULTIPLE) + """ + Insert or update FavoriteActor entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. + """ + favorite_actor_upsertMany(data: [FavoriteActor_Data!]): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_MULTIPLE) + """ + Insert or update FavoriteMovie entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. + """ + favorite_movie_upsertMany(data: [FavoriteMovie_Data!]): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_MULTIPLE) + """ + Insert or update Movie entries into the table, based on the primary key. Returns the key of the newly inserted Movie. + """ + movie_upsertMany(data: [Movie_Data!]): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: UPSERT_MULTIPLE) + """ + Insert or update MovieActor entries into the table, based on the primary key. Returns the key of the newly inserted MovieActor. + """ + movieActor_upsertMany(data: [MovieActor_Data!]): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: UPSERT_MULTIPLE) + """ + Insert or update MovieMetadata entries into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. + """ + movieMetadata_upsertMany(data: [MovieMetadata_Data!]): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_MULTIPLE) + """ + Insert or update Review entries into the table, based on the primary key. Returns the key of the newly inserted Review. + """ + review_upsertMany(data: [Review_Data!]): [Review_Key!]! @fdc_generated(from: "Review", purpose: UPSERT_MULTIPLE) + """ + Insert or update User entries into the table, based on the primary key. Returns the key of the newly inserted User. + """ + user_upsertMany(data: [User_Data!]): [User_Key!]! @fdc_generated(from: "User", purpose: UPSERT_MULTIPLE) + """ + Update a single Actor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + actor_update(id: UUID, key: Actor_Key, data: Actor_Data!): Actor_Key @fdc_generated(from: "Actor", purpose: UPDATE_SINGLE) + """ + Update a single FavoriteActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + favorite_actor_update(key: FavoriteActor_Key, data: FavoriteActor_Data!): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: UPDATE_SINGLE) + """ + Update a single FavoriteMovie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + favorite_movie_update(key: FavoriteMovie_Key, data: FavoriteMovie_Data!): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_SINGLE) + """ + Update a single Movie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movie_update(id: UUID, key: Movie_Key, data: Movie_Data!): Movie_Key @fdc_generated(from: "Movie", purpose: UPDATE_SINGLE) + """ + Update a single MovieActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movieActor_update(key: MovieActor_Key, data: MovieActor_Data!): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: UPDATE_SINGLE) + """ + Update a single MovieMetadata based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movieMetadata_update(id: UUID, key: MovieMetadata_Key, data: MovieMetadata_Data!): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: UPDATE_SINGLE) + """ + Update a single Review based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + review_update(key: Review_Key, data: Review_Data!): Review_Key @fdc_generated(from: "Review", purpose: UPDATE_SINGLE) + """ + Update a single User based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + user_update(id: String, id_expr: String_Expr, key: User_Key, data: User_Data!): User_Key @fdc_generated(from: "User", purpose: UPDATE_SINGLE) + """ + Update Actor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + actor_updateMany(where: Actor_Filter, all: Boolean = false, data: Actor_Data!): Int! @fdc_generated(from: "Actor", purpose: UPDATE_MULTIPLE) + """ + Update FavoriteActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + favorite_actor_updateMany(where: FavoriteActor_Filter, all: Boolean = false, data: FavoriteActor_Data!): Int! @fdc_generated(from: "FavoriteActor", purpose: UPDATE_MULTIPLE) + """ + Update FavoriteMovie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + favorite_movie_updateMany(where: FavoriteMovie_Filter, all: Boolean = false, data: FavoriteMovie_Data!): Int! @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_MULTIPLE) + """ + Update Movie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movie_updateMany(where: Movie_Filter, all: Boolean = false, data: Movie_Data!): Int! @fdc_generated(from: "Movie", purpose: UPDATE_MULTIPLE) + """ + Update MovieActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieActor_updateMany(where: MovieActor_Filter, all: Boolean = false, data: MovieActor_Data!): Int! @fdc_generated(from: "MovieActor", purpose: UPDATE_MULTIPLE) + """ + Update MovieMetadata entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieMetadata_updateMany(where: MovieMetadata_Filter, all: Boolean = false, data: MovieMetadata_Data!): Int! @fdc_generated(from: "MovieMetadata", purpose: UPDATE_MULTIPLE) + """ + Update Review entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + review_updateMany(where: Review_Filter, all: Boolean = false, data: Review_Data!): Int! @fdc_generated(from: "Review", purpose: UPDATE_MULTIPLE) + """ + Update User entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + user_updateMany(where: User_Filter, all: Boolean = false, data: User_Data!): Int! @fdc_generated(from: "User", purpose: UPDATE_MULTIPLE) + """ + Delete a single Actor based on `id` or `key` and return its key (or `null` if not found). + """ + actor_delete(id: UUID, key: Actor_Key): Actor_Key @fdc_generated(from: "Actor", purpose: DELETE_SINGLE) + """ + Delete a single FavoriteActor based on `id` or `key` and return its key (or `null` if not found). + """ + favorite_actor_delete(key: FavoriteActor_Key): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: DELETE_SINGLE) + """ + Delete a single FavoriteMovie based on `id` or `key` and return its key (or `null` if not found). + """ + favorite_movie_delete(key: FavoriteMovie_Key): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: DELETE_SINGLE) + """ + Delete a single Movie based on `id` or `key` and return its key (or `null` if not found). + """ + movie_delete(id: UUID, key: Movie_Key): Movie_Key @fdc_generated(from: "Movie", purpose: DELETE_SINGLE) + """ + Delete a single MovieActor based on `id` or `key` and return its key (or `null` if not found). + """ + movieActor_delete(key: MovieActor_Key): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: DELETE_SINGLE) + """ + Delete a single MovieMetadata based on `id` or `key` and return its key (or `null` if not found). + """ + movieMetadata_delete(id: UUID, key: MovieMetadata_Key): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: DELETE_SINGLE) + """ + Delete a single Review based on `id` or `key` and return its key (or `null` if not found). + """ + review_delete(key: Review_Key): Review_Key @fdc_generated(from: "Review", purpose: DELETE_SINGLE) + """ + Delete a single User based on `id` or `key` and return its key (or `null` if not found). + """ + user_delete(id: String, id_expr: String_Expr, key: User_Key): User_Key @fdc_generated(from: "User", purpose: DELETE_SINGLE) + """ + Delete Actor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + actor_deleteMany(where: Actor_Filter, all: Boolean = false): Int! @fdc_generated(from: "Actor", purpose: DELETE_MULTIPLE) + """ + Delete FavoriteActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + favorite_actor_deleteMany(where: FavoriteActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteActor", purpose: DELETE_MULTIPLE) + """ + Delete FavoriteMovie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + favorite_movie_deleteMany(where: FavoriteMovie_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteMovie", purpose: DELETE_MULTIPLE) + """ + Delete Movie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movie_deleteMany(where: Movie_Filter, all: Boolean = false): Int! @fdc_generated(from: "Movie", purpose: DELETE_MULTIPLE) + """ + Delete MovieActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieActor_deleteMany(where: MovieActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieActor", purpose: DELETE_MULTIPLE) + """ + Delete MovieMetadata entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieMetadata_deleteMany(where: MovieMetadata_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieMetadata", purpose: DELETE_MULTIPLE) + """ + Delete Review entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + review_deleteMany(where: Review_Filter, all: Boolean = false): Int! @fdc_generated(from: "Review", purpose: DELETE_MULTIPLE) + """ + Delete User entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + user_deleteMany(where: User_Filter, all: Boolean = false): Int! @fdc_generated(from: "User", purpose: DELETE_MULTIPLE) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql new file mode 100644 index 0000000..3b373f9 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql @@ -0,0 +1,71 @@ +extend type Query { + """ + Look up a single Actor based on `id` or `key` and return selected fields (or `null` if not found). + """ + actor(id: UUID, key: Actor_Key): Actor @fdc_generated(from: "Actor", purpose: QUERY_SINGLE) + """ + Look up a single FavoriteActor based on `id` or `key` and return selected fields (or `null` if not found). + """ + favorite_actor(key: FavoriteActor_Key): FavoriteActor @fdc_generated(from: "FavoriteActor", purpose: QUERY_SINGLE) + """ + Look up a single FavoriteMovie based on `id` or `key` and return selected fields (or `null` if not found). + """ + favorite_movie(key: FavoriteMovie_Key): FavoriteMovie @fdc_generated(from: "FavoriteMovie", purpose: QUERY_SINGLE) + """ + Look up a single Movie based on `id` or `key` and return selected fields (or `null` if not found). + """ + movie(id: UUID, key: Movie_Key): Movie @fdc_generated(from: "Movie", purpose: QUERY_SINGLE) + """ + Look up a single MovieActor based on `id` or `key` and return selected fields (or `null` if not found). + """ + movieActor(key: MovieActor_Key): MovieActor @fdc_generated(from: "MovieActor", purpose: QUERY_SINGLE) + """ + Look up a single MovieMetadata based on `id` or `key` and return selected fields (or `null` if not found). + """ + movieMetadata(id: UUID, key: MovieMetadata_Key): MovieMetadata @fdc_generated(from: "MovieMetadata", purpose: QUERY_SINGLE) + """ + Look up a single Review based on `id` or `key` and return selected fields (or `null` if not found). + """ + review(key: Review_Key): Review @fdc_generated(from: "Review", purpose: QUERY_SINGLE) + """ + Look up a single User based on `id` or `key` and return selected fields (or `null` if not found). + """ + user(id: String, id_expr: String_Expr, key: User_Key): User @fdc_generated(from: "User", purpose: QUERY_SINGLE) + """ + List Actor entries in the table, optionally filtered by `where` conditions. + """ + actors(where: Actor_Filter, orderBy: [Actor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "Actor", purpose: QUERY_MULTIPLE) + """ + List FavoriteActor entries in the table, optionally filtered by `where` conditions. + """ + favorite_actors(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE) + """ + List FavoriteMovie entries in the table, optionally filtered by `where` conditions. + """ + favorite_movies(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE) + """ + List Movie entries in the table, optionally filtered by `where` conditions. + """ + movies(where: Movie_Filter, orderBy: [Movie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie", purpose: QUERY_MULTIPLE) + """ + List MovieActor entries in the table, optionally filtered by `where` conditions. + """ + movieActors(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE) + """ + List MovieMetadata entries in the table, optionally filtered by `where` conditions. + """ + movieMetadatas(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata", purpose: QUERY_MULTIPLE) + """ + List Review entries in the table, optionally filtered by `where` conditions. + """ + reviews(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE) + """ + List User entries in the table, optionally filtered by `where` conditions. + """ + users(where: User_Filter, orderBy: [User_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "User", purpose: QUERY_MULTIPLE) + """ + List Movie entries ordered by vector similarity between the `descriptionEmbedding` field and `compare_embed`. + (Alternatively, `compare` can be used if the input is a raw Vector.) + """ + movies_descriptionEmbedding_similarity(compare: Vector, compare_embed: Vector_Embed, method: VectorSimilarityMethod = INNER_PRODUCT, within: Float, where: Movie_Filter, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie.descriptionEmbedding", purpose: QUERY_MULTIPLE_BY_SIMILARITY) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql new file mode 100644 index 0000000..352236f --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql @@ -0,0 +1,74 @@ +extend type Actor { + """ + ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.actor` equals this object). + """ + favorite_actors_on_actor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.actor` equals this object). + """ + movieActors_on_actor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Movie entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `actor` == this and `movie` == that). + """ + movies_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `actor` == this and `user` == that). + """ + users_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} +extend type Movie { + """ + ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.movie` equals this object). + """ + favorite_movies_on_movie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.movie` equals this object). + """ + movieActors_on_movie(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieMetadata entries in a one-to-many relationship with this object (i.e. where `MovieMetadata.movie` equals this object). + """ + movieMetadatas_on_movie(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.movie` equals this object). + """ + reviews_on_movie(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Actor entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `movie` == this and `actor` == that). + """ + actors_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `movie` == this and `user` == that). + """ + users_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using Review as a join table (i.e. where an entry of Review exists whose `movie` == this and `user` == that). + """ + users_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} +extend type User { + """ + ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.user` equals this object). + """ + favorite_actors_on_user(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.user` equals this object). + """ + favorite_movies_on_user(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.user` equals this object). + """ + reviews_on_user(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Actor entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `user` == this and `actor` == that). + """ + actors_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related Movie entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `user` == this and `movie` == that). + """ + movies_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related Movie entries using Review as a join table (i.e. where an entry of Review exists whose `user` == this and `movie` == that). + """ + movies_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql new file mode 100644 index 0000000..c75ac52 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql @@ -0,0 +1,1170 @@ +"AccessLevel specifies coarse access policies for common situations." +enum AccessLevel { + """ + This operation can be executed by anyone with or without authentication. + Equivalent to @auth(expr: "true") + """ + PUBLIC + + """ + This operation can only be executed with a valid Firebase Auth ID token. + Note: it allows anonymous auth and unverified accounts, so may be subjected to abuses. + It’s equivalent to @auth(expr: "auth.uid != nil") + """ + USER_ANON + + """ + This operation can only be executed by a non-anonymous Firebase Auth account. + It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.firebase.sign_in_provider != 'anonymous'")" + """ + USER + + """ + This operation can only be executed by a verified Firebase Auth account. + It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.email_verified")" + """ + USER_EMAIL_VERIFIED + + """ + This operation can not be executed with no IAM credentials. + It’s equivalent to @auth(expr: "false") + """ + NO_ACCESS +} + +""" +Defines the auth policy for a query or mutation. This directive must be added to +any operation you wish to be accessible from a client application. If left +unspecified, defaults to `@auth(level: NO_ACCESS)`. +""" +directive @auth( + "The minimal level of access required to perform this operation." + level: AccessLevel @fdc_oneOf(required: true) + """ + A CEL expression that allows access to this operation if the expression + evaluates to `true`. + """ + expr: Boolean_Expr @fdc_oneOf(required: true) +) on QUERY | MUTATION +"Query filter criteria for `String` scalar fields." +input String_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: String @fdc_oneOf(group: "eq") + """ + Match if field is exactly equal to the result of the provided server value + expression. Currently only `auth.uid` is supported as an expression. + """ + eq_expr: String_Expr @fdc_oneOf(group: "eq") + "Match if field is not equal to provided value." + ne: String @fdc_oneOf(group: "ne") + """ + Match if field is not equal to the result of the provided server value + expression. Currently only `auth.uid` is supported as an expression. + """ + ne_expr: String_Expr @fdc_oneOf(group: "ne") + "Match if field value is among the provided list of values." + in: [String!] + "Match if field value is not among the provided list of values." + nin: [String!] + "Match if field value is greater than the provided value." + gt: String + "Match if field value is greater than or equal to the provided value." + ge: String + "Match if field value is less than the provided value." + lt: String + "Match if field value is less than or equal to the provided value." + le: String + """ + Match if field value contains the provided value as a substring. Equivalent + to `LIKE '%value%'` + """ + contains: String + """ + Match if field value starts with the provided value. Equivalent to + `LIKE 'value%'` + """ + startsWith: String + """ + Match if field value ends with the provided value. Equivalent to + `LIKE '%value'` + """ + endsWith: String + """ + Match if field value matches the provided pattern. See `String_Pattern` for + more details. + """ + pattern: String_Pattern +} + +""" +The pattern match condition on a string. Specify either like or regex. +https://www.postgresql.org/docs/current/functions-matching.html +""" +input String_Pattern { + "Match using the provided `LIKE` expression." + like: String + "Match using the provided POSIX regular expression." + regex: String + "When true, ignore case when matching." + ignoreCase: Boolean + "When true, invert the match result. Equivalent to `NOT LIKE` or `!~`." + invert: Boolean +} + +"Query filter criteris for `[String!]` scalar fields." +input String_ListFilter { + "Match if list field contains the provided value as a member." + includes: String + "Match if list field does not contain the provided value as a member." + excludes: String + "Match if list field contains all of the provided values as members." + includesAll: [String!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [String!] +} + +"Query filter criteria for `UUID` scalar fields." +input UUID_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: UUID + "Match if field is not equal to provided value." + ne: UUID + "Match if field value is among the provided list of values." + in: [UUID!] + "Match if field value is not among the provided list of values." + nin: [UUID!] +} + +"Query filter criteris for `[UUID!]` scalar fields." +input UUID_ListFilter { + "Match if list field contains the provided value as a member." + includes: UUID + "Match if list field does not contain the provided value as a member." + excludes: UUID + "Match if list field contains all of the provided values as members." + includesAll: [UUID!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [UUID!] +} + +"Query filter criteria for `Int` scalar fields." +input Int_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Int + "Match if field is not equal to provided value." + ne: Int + "Match if field value is among the provided list of values." + in: [Int!] + "Match if field value is not among the provided list of values." + nin: [Int!] + "Match if field value is greater than the provided value." + gt: Int + "Match if field value is greater than or equal to the provided value." + ge: Int + "Match if field value is less than the provided value." + lt: Int + "Match if field value is less than or equal to the provided value." + le: Int +} + +"Query filter criteris for `[Int!]` scalar fields." +input Int_ListFilter { + "Match if list field contains the provided value as a member." + includes: Int + "Match if list field does not contain the provided value as a member." + excludes: Int + "Match if list field contains all of the provided values as members." + includesAll: [Int!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Int!] +} + +"Query filter criteria for `Int64` scalar fields." +input Int64_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Int64 + "Match if field is not equal to provided value." + ne: Int64 + "Match if field value is among the provided list of values." + in: [Int64!] + "Match if field value is not among the provided list of values." + nin: [Int64!] + "Match if field value is greater than the provided value." + gt: Int64 + "Match if field value is greater than or equal to the provided value." + ge: Int64 + "Match if field value is less than the provided value." + lt: Int64 + "Match if field value is less than or equal to the provided value." + le: Int64 +} + +"Query filter criteria for `[Int64!]` scalar fields." +input Int64_ListFilter { + "Match if list field contains the provided value as a member." + includes: Int64 + "Match if list field does not contain the provided value as a member." + excludes: Int64 + "Match if list field contains all of the provided values as members." + includesAll: [Int64!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Int64!] +} + +"Query filter criteria for `Float` scalar fields." +input Float_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Float + "Match if field is not equal to provided value." + ne: Float + "Match if field value is among the provided list of values." + in: [Float!] + "Match if field value is not among the provided list of values." + nin: [Float!] + "Match if field value is greater than the provided value." + gt: Float + "Match if field value is greater than or equal to the provided value." + ge: Float + "Match if field value is less than the provided value." + lt: Float + "Match if field value is less than or equal to the provided value." + le: Float +} + +"Query filter criteria for `[Float!]` scalar fields." +input Float_ListFilter { + "Match if list field contains the provided value as a member." + includes: Float + "Match if list field does not contain the provided value as a member." + excludes: Float + "Match if list field contains all of the provided values as members." + includesAll: [Float!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Float!] +} + +"Query filter criteria for `Boolean` scalar fields." +input Boolean_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Boolean + "Match if field is not equal to provided value." + ne: Boolean + "Match if field value is among the provided list of values." + in: [Boolean!] + "Match if field value is not among the provided list of values." + nin: [Boolean!] +} + +"Query filter criteria for `[Boolean!]` scalar fields." +input Boolean_ListFilter { + "Match if list field contains the provided value as a member." + includes: Boolean + "Match if list field does not contain the provided value as a member." + excludes: Boolean + "Match if list field contains all of the provided values as members." + includesAll: [Boolean!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Boolean!] +} + +"Query filter criteria for `Any` scalar fields." +input Any_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Any + "Match if field is not equal to provided value." + ne: Any + "Match if field value is among the provided list of values." + in: [Any!] + "Match if field value is not among the provided list of values." + nin: [Any!] +} + +"Query filter criteria for `[Any!]` scalar fields." +input Any_ListFilter { + "Match if list field contains the provided value as a member." + includes: Any + "Match if list field does not contain the provided value as a member." + excludes: Any + "Match if list field contains all of the provided values as members." + includesAll: [Any!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Any!] +} +""" +(Internal) A string that uniquely identifies a type, field, and so on. + +The most common usage in FDC is `SomeType` or `SomeType.someField`. See the +linked page in the @specifiedBy directive for the GraphQL RFC with more details. +""" +scalar SchemaCoordinate + @specifiedBy(url: "https://github.com/graphql/graphql-wg/blob/6d02705dea034fb65ebc6799632adb7bd550d0aa/rfcs/SchemaCoordinates.md") + @fdc_forbiddenAsFieldType + @fdc_forbiddenAsVariableType + +"(Internal) The purpose of a generated type or field." +enum GeneratedPurpose { + # Implicit fields added to the table types as columns. + IMPLICIT_KEY_FIELD + IMPLICIT_REF_FIELD + + # Relational non-column fields extended to table types. + QUERY_MULTIPLE_ONE_TO_MANY + QUERY_MULTIPLE_MANY_TO_MANY + + # Top-level Query fields. + QUERY_SINGLE + QUERY_MULTIPLE + QUERY_MULTIPLE_BY_SIMILARITY + + # Top-level Mutation fields. + INSERT_SINGLE + INSERT_MULTIPLE + UPSERT_SINGLE + UPSERT_MULTIPLE + UPDATE_SINGLE + UPDATE_MULTIPLE + DELETE_SINGLE + DELETE_MULTIPLE +} + +"(Internal) Added to definitions generated by FDC." +directive @fdc_generated( + "The source type or field that causes this definition to be generated." + from: SchemaCoordinate! + "The reason why this definition is generated, such as the intended use case." + purpose: GeneratedPurpose! +) on + | SCALAR + | OBJECT + | FIELD_DEFINITION + | ARGUMENT_DEFINITION + | INTERFACE + | UNION + | ENUM + | ENUM_VALUE + | INPUT_OBJECT + | INPUT_FIELD_DEFINITION +""" +Defines a database index to optimize query performance. + +Given `type TableName @table @index(fields: [“fieldName”, “secondFieldName”])`, +`table_name_field_name_second_field_name_aa_idx` is the SQL index id. +`table_name_field_name_second_field_name_ad_idx` if `order: [ASC DESC]`. +`table_name_field_name_second_field_name_dd_idx` if `order: [DESC DESC]`. + +Given `type TableName @table { fieldName: Int @index } ` +`table_name_field_name_idx` is the SQL index id. +`order` matters less for single field indexes because they can be scanned in both ways. + +Override with `@index(name)` in case of index name conflicts. +""" +directive @index( + "The SQL database index id. Defaults to __idx." + name: String + """ + Only allowed and required when used on OBJECT. + The fields to create an index on. + """ + fields: [String!] + """ + Only allowed when used on OBJECT and BTREE index. + Index order of each column. Default to all ASC. + """ + order: [IndexFieldOrder!] + """ + For array field, default to `GIN`. + For Vector field, default to `HNSW`. + """ + type: IndexType + """ + Only allowed when used on vector field. + The vector similarity method. Default to `INNER_PRODUCT`. + """ + vector_method: VectorSimilarityMethod +) repeatable on FIELD_DEFINITION | OBJECT + +enum IndexFieldOrder { ASC DESC } + +enum IndexType { + BTREE + GIN + HNSW + IVFFLAT +} +type Query { + _service: _Service! +} + +type Mutation { + # This is just a dummy field so that Mutation is always non-empty. + _firebase: Void @fdc_deprecated(reason: "dummy field -- does nothing useful") +} + +type _Service { + sdl: String! +} + +"(Internal) Added to things that may be removed from FDC and will soon be no longer usable in schema or operations." +directive @fdc_deprecated(reason: String = "No longer supported") on + | SCHEMA + | SCALAR + | OBJECT + | FIELD_DEFINITION + | ARGUMENT_DEFINITION + | INTERFACE + | UNION + | ENUM + | ENUM_VALUE + | INPUT_OBJECT + | INPUT_FIELD_DEFINITION + +"(Internal) Added to scalars representing quoted CEL expressions." +directive @fdc_celExpression( + "The expected CEL type that the expression should evaluate to." + returnType: String +) on SCALAR + +"(Internal) Added to scalars representing quoted SQL expressions." +directive @fdc_sqlExpression( + "The expected SQL type that the expression should evaluate to." + dataType: String +) on SCALAR + +"(Internal) Added to types that may not be used as variables." +directive @fdc_forbiddenAsVariableType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT + +"(Internal) Added to types that may not be used as fields in schema." +directive @fdc_forbiddenAsFieldType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT + +"Provides a frequently used example for this type / field / argument." +directive @fdc_example( + "A GraphQL literal value (verbatim) whose type matches the target." + value: Any + "A human-readable text description of what `value` means in this context." + description: String +) repeatable on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | INPUT_OBJECT | INPUT_FIELD_DEFINITION + +"(Internal) Marks this field / argument as conflicting with others in the same group." +directive @fdc_oneOf( + "The group name where fields / arguments conflict with each other." + group: String! = "" + "If true, exactly one field / argument in the group must be specified." + required: Boolean! = false +) repeatable on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION +""" +UUID is a string with hex digits representing an RFC4122 value. + +Outputs will always be 32 lower-case hex digits with no delimiters or curly +braces. Inputs in the following formats are also accepted (case insensitive): + + xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} +""" +scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122") +scalar Int64 + +scalar Any +scalar Void +""" +The `True` scalar type only accepts the boolean `true`. + +An optional field / argument typed `True` may either be set to `true` or omitted +(not provided at all). `false` or `null` is not accepted. +""" +scalar True + @fdc_forbiddenAsFieldType + @fdc_forbiddenAsVariableType + @fdc_example(value: true, description: "The only allowed value.") +"Define the intervals used in timestamps and dates (subset)" +enum TimestampInterval @fdc_deprecated { + second + minute + hour + day + week + month + year +} +""" +A Common Expression Language (CEL) expression that returns a boolean at runtime. + +The expression can reference the `auth` variable, which is null if Firebase Auth +is not used. Otherwise, it contains the following fields: + + - `auth.uid`: The current user ID. + - `auth.token`: A map of all token fields (i.e. "claims"). +""" +scalar Boolean_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "bool") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth != null", description: "Allow only if a Firebase Auth user is present.") + +""" +A Common Expression Language (CEL) expression that returns a string at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar String_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "string") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)") + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) string, formatted as 32 lower-case hex digits without delimiters.") + +""" +A Common Expression Language (CEL) expression that returns a UUID string at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar UUID_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "string") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) every time.") + +""" +A Common Expression Language (CEL) expression whose return type is unspecified. + +Limitation: Only a limited set of expressions are supported for now for each +type. For type XXX, see the @fdc_example directives on XXX_Expr for a full list. +""" +scalar Any_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)") + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID version 4 (formatted as 32 lower-case hex digits without delimiters if result type is String).") + @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).") + +""" +A PostgreSQL value expression whose return type is unspecified. +""" +scalar Any_SQL + @specifiedBy(url: "https://www.postgresql.org/docs/current/sql-expressions.html") + @fdc_sqlExpression + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType +""" +Defines a relational database table. + +Given `type TableName @table`, + + - `TableName` is the GQL type name. + - `tableName` is the singular name. Override with `@table(singular)`. + - `tableNames` is the plural name. Override with `@table(plural)`. + - `table_name` is the SQL table id. Override with `@table(name)`. + +Only a table type can be configured further with: + + - Customized data types. See `@col`. + - Index. See `@index` + - Unique constraint. See `@unqiue` + - Relation. See `@ref` + - Embedded Json. See `@embed` + +A scalar field map to a SQL database column. +An object field (like `type TableName @table { field: AnotherType }`) are either + + - a relation reference field if `AnotherType` is annotated with `@table`. + - an embedded json field if `field` is annotated with `@embed`. + +""" +directive @table( + "Override the SQL database table name. Defaults to ." + name: String + "Override the singular name. Default is the camel case of the type name." + singular: String + "Override the plural name. Default is generated based on English patterns." + plural: String + "The primary key of the table. Defaults to a single field `id: UUID!`. Generate if missing." + key: [String!] +) on OBJECT + +""" +Defines a relational database view. + +Given `type ViewName @view`, + - `ViewName` is the GQL type name. + - `viewName` is the singular name. Override with `@view(singular)`. + - `viewNames` is the plural name. Override with `@view(plural)`. + - `view_name` is the SQL view id. Override with `@view(name)`. + When `@view(sql)` is defined, it uses the given raw SQL as the view instead. + +A view type can be used just as a table type with queries. +A view type may have a nullable `@ref` field to another table, but cannot be +referenced in a `@ref`. + +WARNING: Firebase Data Connect does not validate the SQL of the view or +evaluate whether it matches the defined fields. + +If the SQL view is invalid or undefined, related requests may fail. +If the SQL view return incompatible types. Firebase Data Connect will surface +an error in the response. +""" +directive @view( + """ + The SQL view name. If no `name` or `sql` are provided, defaults to + snake_case of the singular type name. + """ + name: String @fdc_oneOf + """ + SQL SELECT statement to use as the basis for this type. Note that all SQL + identifiers should be snake_case and all GraphQL identifiers should be + camelCase. + """ + sql: String @fdc_oneOf + "Override the singular name. Default is the camel case of the type name." + singular: String + "Override the plural name. Default is generated based on English patterns." + plural: String +) on OBJECT + +""" +Specify additional column options. + +Given `type TableName @table { fieldName: Int } ` + + - `field_name` is the SQL column name. Override with `@col(name)`. + +""" +directive @col( + "The SQL database column name. Defaults to ." + name: String + """ + Override SQL columns data type. + Each GraphQL type could map to many SQL data types. + Refer to Postgres supported data types and mappings to GQL. + """ + dataType: String + """ + Defines a fixed column size for certain scalar types. + + - For Vector, size is required. It establishes the length of the vector. + - For String, size converts `text` type to `varchar(size)`. + """ + size: Int +) on FIELD_DEFINITION + + +""" +Define a reference field to another table. + +Given `type TableName @table { refField: AnotherTableName }`, it defines a foreign-key constraint + + - with id `table_name_ref_field_fkey` (override with `@ref(constraintName)`) + - from `table_name.ref_field` (override with `@ref(fields)`) + - to `another_table_name.id` (override with `@ref(references)`) + +Does not support `[AnotherTableName]` because array fields cannot have foreign-key constraints. +Nullability determines whether the reference is required. + + - `refField: AnotherTableName`: optional reference, SET_NULL on delete. + - `refField: AnotherTableName!`: required reference, CASCADE on delete. + +Consider all types of SQL relations: + + - many-to-one relations involve a reference field on the many-side. + - many-to-maybe-one if `refField: AnotherTableName`. + - many-to-exactly-one if `refField: AnotherTableName!`. + - one-to-one relations involve a unique reference field on one side. + - maybe-one-to-maybe-one if `refField: AnotherTableName @unique`. + - maybe-one-to-exact-one if `refField: AnotherTableName! @unique`. + - exact-one-to-exact-one shall be represented as a single table instead. + - many-to-many relations involve a join table. + - Its primary keys must be two non-null reference fields to tables bridged together to guarantee at most one relation per pair. + +type TableNameToAnotherTableName @table(key: ["refField", "anotherRefField"]) { + refField: TableName! + anotherRefField: AnotherTableName! +} + +""" +directive @ref( + "The SQL database foreign key constraint name. Default to __fkey." + constraintName: String + """ + Foreign key fields. Default to . + """ + fields: [String!] + "The fields that the foreign key references in the other table. Default to the primary key." + references: [String!] +) on FIELD_DEFINITION + +"Define the direction of an orderby query" +enum OrderDirection { + ASC + DESC +} + +enum ColDefault @fdc_deprecated { + """ + Generates a random UUID (v4) as the default column value. + Compatible with String or UUID typed fields. + """ + UUID + """ + Generates an auto-incrementing sequence as the default column value. + Compatible with Int and Int64 typed fields. + """ + SEQUENCE + """ + Populates the default column value with the current date or timestamp. + Compatible with Date and Timestamp typed fields. + """ + NOW +} + +""" +Specify the default column value. + +The supported arguments vary based on the field type. +""" +directive @default( + "A constant value. Validated against the field GraphQL type at compile-time." + value: Any @fdc_oneOf(required: true) + "(Deprecated) Built-in common ways to generate initial value." + generate: ColDefault @fdc_oneOf(required: true) @deprecated + "A CEL expression, whose return value must match the field data type." + expr: Any_Expr @fdc_oneOf(required: true) + """ + A raw SQL expression, whose SQL data type must match the underlying column. + + The value is any variable-free expression (in particular, cross-references to + other columns in the current table are not allowed). Subqueries are not allowed either. + https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-DEFAULT + """ + sql: Any_SQL @fdc_oneOf(required: true) +) on FIELD_DEFINITION +""" +Date is a string in the YYYY-MM-DD format representing a local-only date. + +See the description for Timestamp for range and limitations. + +As a FDC-specific extension, inputs that includes time portions (as specified by +the Timestamp scalar) are accepted but only the date portion is used. In other +words, only the part before "T" is used and the rest discarded. This effectively +truncates it to the local date in the specified time-zone. + +Outputs will always be in the canonical YYYY-MM-DD format. +""" +scalar Date @specifiedBy(url: "https://scalars.graphql.org/andimarek/local-date.html") + +""" +Timestamp is a RFC 3339 string that represents an exact point in time. + +The serialization format follows https://scalars.graphql.org/andimarek/date-time +except the "Non-optional exact milliseconds" Section. As a FDC-specific +extension, inputs and outputs may contain 0, 3, 6, or 9 fractional digits. + +Specifically, output precision varies by server-side factors such as data source +support and clients must not rely on an exact number of digits. Clients may +truncate extra digits as fit, with the caveat that there may be information loss +if the truncated value is subsequently sent back to the server. + +FDC only supports year 1583 to 9999 (inclusive) and uses the ISO-8601 calendar +system for all date-time calculations. Notably, the expanded year representation +(+/-YYYYY) is rejected and Year 1582 and before may either be rejected or cause +undefined behavior. +""" +scalar Timestamp @specifiedBy(url: "https://scalars.graphql.org/andimarek/date-time") + +""" +A Common Expression Language (CEL) expression that returns a Timestamp at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar Timestamp_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "google.protobuf.Timestamp") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).") + +""" +A Common Expression Language (CEL) expression that returns a Timestamp at runtime, +which is then truncated to UTC date only. The time-of-day parts are discarded. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar Date_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "google.protobuf.Timestamp") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "request.time", description: "The UTC date on which the request is received.") + +"Conditions on a Date value" +input Date_Filter { + isNull: Boolean + eq: Date @fdc_oneOf(group: "eq") + eq_expr: Date_Expr @fdc_oneOf(group: "eq") + eq_date: Date_Relative @fdc_oneOf(group: "eq") + ne: Date @fdc_oneOf(group: "ne") + ne_expr: Date_Expr @fdc_oneOf(group: "ne") + ne_date: Date_Relative @fdc_oneOf(group: "ne") + in: [Date!] + nin: [Date!] + gt: Date @fdc_oneOf(group: "gt") + gt_expr: Date_Expr @fdc_oneOf(group: "gt") + gt_date: Date_Relative @fdc_oneOf(group: "gt") + ge: Date @fdc_oneOf(group: "ge") + ge_expr: Date_Expr @fdc_oneOf(group: "ge") + ge_date: Date_Relative @fdc_oneOf(group: "ge") + lt: Date @fdc_oneOf(group: "lt") + lt_expr: Date_Expr @fdc_oneOf(group: "lt") + lt_date: Date_Relative @fdc_oneOf(group: "lt") + le: Date @fdc_oneOf(group: "le") + le_expr: Date_Expr @fdc_oneOf(group: "le") + le_date: Date_Relative @fdc_oneOf(group: "le") +} + +"Conditions on a Date list" +input Date_ListFilter { + includes: Date @fdc_oneOf(group: "includes") + includes_expr: Date_Expr @fdc_oneOf(group: "includes") + includes_date: Date_Relative @fdc_oneOf(group: "includes") + excludes: Date @fdc_oneOf(group: "excludes") + excludes_expr: Date_Expr @fdc_oneOf(group: "excludes") + excludes_date: Date_Relative @fdc_oneOf(group: "excludes") + includesAll: [Date!] + excludesAll: [Date!] +} + +"Conditions on an Timestamp value" +input Timestamp_Filter { + isNull: Boolean + eq: Timestamp @fdc_oneOf(group: "eq") + eq_expr: Timestamp_Expr @fdc_oneOf(group: "eq") + eq_time: Timestamp_Relative @fdc_oneOf(group: "eq") + ne: Timestamp @fdc_oneOf(group: "ne") + ne_expr: Timestamp_Expr @fdc_oneOf(group: "ne") + ne_time: Timestamp_Relative @fdc_oneOf(group: "ne") + in: [Timestamp!] + nin: [Timestamp!] + gt: Timestamp @fdc_oneOf(group: "gt") + gt_expr: Timestamp_Expr @fdc_oneOf(group: "gt") + gt_time: Timestamp_Relative @fdc_oneOf(group: "gt") + ge: Timestamp @fdc_oneOf(group: "ge") + ge_expr: Timestamp_Expr @fdc_oneOf(group: "ge") + ge_time: Timestamp_Relative @fdc_oneOf(group: "ge") + lt: Timestamp @fdc_oneOf(group: "lt") + lt_expr: Timestamp_Expr @fdc_oneOf(group: "lt") + lt_time: Timestamp_Relative @fdc_oneOf(group: "lt") + le: Timestamp @fdc_oneOf(group: "le") + le_expr: Timestamp_Expr @fdc_oneOf(group: "le") + le_time: Timestamp_Relative @fdc_oneOf(group: "le") +} + +"Conditions on a Timestamp list" +input Timestamp_ListFilter { + includes: Timestamp @fdc_oneOf(group: "includes") + includes_expr: Timestamp_Expr @fdc_oneOf(group: "includes") + includes_time: Timestamp_Relative @fdc_oneOf(group: "includes") + excludes: Timestamp @fdc_oneOf(group: "excludes") + excludes_expr: Timestamp_Expr @fdc_oneOf(group: "excludes") + excludes_time: Timestamp_Relative @fdc_oneOf(group: "excludes") + includesAll: [Timestamp!] + excludesAll: [Timestamp!] +} + +"Update input of a Date value" +input Date_Update { + set: Date @fdc_oneOf(group: "set") + set_expr: Date_Expr @fdc_oneOf(group: "set") + set_date: Date_Relative @fdc_oneOf(group: "set") +} + +"Update input of a Date list value" +input Date_ListUpdate { + set: [Date!] + append: [Date!] + prepend: [Date!] + delete: Int + i: Int + update: Date +} + +"Update input of a Timestamp value" +input Timestamp_Update { + set: Timestamp @fdc_oneOf(group: "set") + set_expr: Timestamp_Expr @fdc_oneOf(group: "set") + set_time: Timestamp_Relative @fdc_oneOf(group: "set") +} + +"Update input of a Timestamp list value" +input Timestamp_ListUpdate { + set: [Timestamp!] + append: [Timestamp!] + prepend: [Timestamp!] + delete: Int + i: Int + update: Timestamp +} + +"A runtime-calculated Timestamp value relative to `now` or `at`." +input Timestamp_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + now: True @fdc_oneOf(group: "from", required: true) + at: Timestamp @fdc_oneOf(group: "from", required: true) + + add: Timestamp_Duration + sub: Timestamp_Duration + + truncateTo: Timestamp_Interval +} + +input Timestamp_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + milliseconds: Int! = 0 + seconds: Int! = 0 + minutes: Int! = 0 + hours: Int! = 0 + days: Int! = 0 + weeks: Int! = 0 + months: Int! = 0 + years: Int! = 0 +} + +enum Timestamp_Interval @fdc_forbiddenAsFieldType { + SECOND + MINUTE + HOUR + DAY + WEEK + MONTH + YEAR +} + +"A runtime-calculated Date value relative to `today` or `on`." +input Date_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + today: True @fdc_oneOf(group: "from", required: true) + on: Date @fdc_oneOf(group: "from", required: true) + + add: Date_Duration + sub: Date_Duration + + truncateTo: Date_Interval +} + +input Date_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + days: Int! = 0 + weeks: Int! = 0 + months: Int! = 0 + years: Int! = 0 +} + +enum Date_Interval @fdc_forbiddenAsFieldType { + WEEK + MONTH + YEAR +} +""" +Defines a unique constraint. + +Given `type TableName @table @unique(fields: [“fieldName”, “secondFieldName”])`, +`table_name_field_name_second_field_name_uidx` is the SQL unique index id. +Given `type TableName @table { fieldName: Int @unique } ` +`table_name_field_name_uidx` is the SQL unique index id. + +Override with `@unique(indexName)` in case of index name conflicts. +""" +directive @unique( + "The SQL database unique index name. Defaults to __uidx." + indexName: String + """ + Only allowed and required when used on OBJECT. + The fields to create a unique constraint on. + """ + fields: [String!] +) repeatable on FIELD_DEFINITION | OBJECT +"Update input of a String value" +input String_Update { + set: String @fdc_oneOf(group: "set") + set_expr: String_Expr @fdc_oneOf(group: "set") +} + +"Update input of a String list value" +input String_ListUpdate { + set: [String!] + append: [String!] + prepend: [String!] +} + +"Update input of a UUID value" +input UUID_Update { + set: UUID @fdc_oneOf(group: "set") + set_expr: UUID_Expr @fdc_oneOf(group: "set") +} + +"Update input of an ID list value" +input UUID_ListUpdate { + set: [UUID!] + append: [UUID!] + prepend: [UUID!] +} + +"Update input of an Int value" +input Int_Update { + set: Int + inc: Int + dec: Int +} + +"Update input of an Int list value" +input Int_ListUpdate { + set: [Int!] + append: [Int!] + prepend: [Int!] +} + +"Update input of an Int64 value" +input Int64_Update { + set: Int64 + inc: Int64 + dec: Int64 +} + +"Update input of an Int64 list value" +input Int64_ListUpdate { + set: [Int64!] + append: [Int64!] + prepend: [Int64!] +} + +"Update input of a Float value" +input Float_Update { + set: Float + inc: Float + dec: Float +} + +"Update input of a Float list value" +input Float_ListUpdate { + set: [Float!] + append: [Float!] + prepend: [Float!] +} + +"Update input of a Boolean value" +input Boolean_Update { + set: Boolean +} + +"Update input of a Boolean list value" +input Boolean_ListUpdate { + set: [Boolean!] + append: [Boolean!] + prepend: [Boolean!] +} + +"Update input of an Any value" +input Any_Update { + set: Any +} + +"Update input of an Any list value" +input Any_ListUpdate { + set: [Any!] + append: [Any!] + prepend: [Any!] +} +""" +Vector is an array of single-precision floating-point numbers, serialized +as a JSON array. All elements must be finite (no NaN, Infinity or -Infinity). + +Example: [1.1, 2, 3.3] +""" +scalar Vector + +""" +Defines what siliarlity function to use for fetching vectors. +Details here: https://github.com/pgvector/pgvector?tab=readme-ov-file#vector-functions +""" +enum VectorSimilarityMethod { + L2 + COSINE + INNER_PRODUCT +} + +"Conditions on an Vector value" +input Vector_Filter { + eq: Vector + ne: Vector + in: [Vector!] + nin: [Vector!] + isNull: Boolean +} + +input Vector_ListFilter { + "When true, will match if the list includes the supplied vector." + includes: Vector + excludes: Vector + includesAll: [Vector!] + excludesAll: [Vector!] +} + +"Update input of an Vector value" +input Vector_Update { + set: Vector @fdc_oneOf(group: "set") + set_embed: Vector_Embed @fdc_oneOf(group: "set") +} + +"Update input of a Vector list value" +input Vector_ListUpdate { + set: [Vector] + append: [Vector] + prepend: [Vector] + delete: Int + i: Int + update: Vector +} + +""" +Create a vector embedding of text using the given model on Vertex AI. + +Example: {text: "Hi there", model: "textembedding-gecko@003"} +See: https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings + +Limitation: In the emulator, if Vertex AI is not configured, a pseudorandom +vector is generated from text as a fake implementation for testing only. +""" +input Vector_Embed @fdc_forbiddenAsVariableType { + model: Vector_Embed_Model! + text: String! +} + +""" +A string that specifies a Vertex AI model and version. + +It is strongly recommended to specify a stable model version (for example, +textembedding-gecko@003). The latest version of a model is in Preview and is not +General Availability (GA). Because the latest version is in Preview, it isn't +guaranteed to be production ready. +""" +scalar Vector_Embed_Model + @specifiedBy(url: "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "textembedding-gecko@003", description: "A stable version of the textembedding-gecko model") diff --git a/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql b/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql new file mode 100644 index 0000000..b8a9f8c --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql @@ -0,0 +1,204 @@ +mutation { + movie_insertMany(data: [ + { + id: "550e8400-e29b-41d4-a716-446655440000", + title: "Inception", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168", + releaseYear: 2010, + genre: "sci-fi", + rating: 8.8, + description: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move.", + tags: ["thriller", "action"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440001", + title: "The Matrix", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059", + releaseYear: 1999, + genre: "action", + rating: 8.7, + description: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440002", + title: "John Wick 4", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjohn_wick_4.jpg?alt=media&token=463ed467-9daa-4281-965d-44e7cc4172d5", + releaseYear: 2023, + genre: "action", + rating: 8.1, + description: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances.", + tags: ["action", "thriller"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440003", + title: "The Dark Knight", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_dark_knight.jpg?alt=media&token=a9803c59-40d5-4758-a6f4-9a7c274a1218", + releaseYear: 2008, + genre: "action", + rating: 9.0, + description: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice.", + tags: ["action", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440004", + title: "Fight Club", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ffight_club.jpg?alt=media&token=a4bc1933-2607-42cd-a860-e44c4587fd9c", + releaseYear: 1999, + genre: "drama", + rating: 8.8, + description: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity.", + tags: ["drama", "thriller"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440005", + title: "Pulp Fiction", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fpulp_fiction.jpg?alt=media&token=0df86e18-5cb1-45b3-a6d9-3f41563c3465", + releaseYear: 1994, + genre: "crime", + rating: 8.9, + description: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references.", + tags: ["crime", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440006", + title: "The Lord of the Rings: The Fellowship of the Ring", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Flotr_fellowship.jpg?alt=media&token=92641d2d-6c52-4172-bd66-95fb86b4b96b", + releaseYear: 2001, + genre: "fantasy", + rating: 8.8, + description: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond.", + tags: ["fantasy", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440007", + title: "The Shawshank Redemption", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_shawshanks_redemption.jpg?alt=media&token=f67b5ab2-a435-48b2-8251-5bf866b183e9", + releaseYear: 1994, + genre: "drama", + rating: 9.3, + description: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman).", + tags: ["drama", "crime"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440008", + title: "Forrest Gump", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fforrest_gump.jpeg?alt=media&token=f21e88ce-6fab-4218-aa55-94738acc9b8f", + releaseYear: 1994, + genre: "drama", + rating: 8.8, + description: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright).", + tags: ["drama", "romance"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440009", + title: "The Godfather", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_godfather.jpg?alt=media&token=5297fd94-ae87-4995-9de5-3755232bad52", + releaseYear: 1972, + genre: "crime", + rating: 9.2, + description: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal.", + tags: ["crime", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440010", + title: "The Silence of the Lambs", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_silence_of_the_lambs.jpg?alt=media&token=7ca6abeb-b15c-4f5e-9280-5a590e89fe54", + releaseYear: 1991, + genre: "thriller", + rating: 8.6, + description: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer.", + tags: ["thriller", "crime"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440011", + title: "Saving Private Ryan", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fsaving_private_ryan.jpg?alt=media&token=58ed877e-7ae0-4e30-9aee-d45c2deb7a00", + releaseYear: 1998, + genre: "war", + rating: 8.6, + description: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war.", + tags: ["war", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440012", + title: "The Avengers", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_avengers.jpg?alt=media&token=3d68ccad-2fa1-48da-a83e-7941e246c9f9", + releaseYear: 2012, + genre: "action", + rating: 8.0, + description: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast.", + tags: ["action", "sci-fi"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440013", + title: "Gladiator", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fgladiator.jpg?alt=media&token=61d75825-b79f-4add-afdb-7da5eed53407", + releaseYear: 2000, + genre: "action", + rating: 8.5, + description: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance.", + tags: ["action", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440014", + title: "Titanic", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ftitanic.png?alt=media&token=dd03dc83-486e-4b03-9b03-2f9ed83fd9d0", + releaseYear: 1997, + genre: "romance", + rating: 7.8, + description: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals.", + tags: ["romance", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440015", + title: "Avatar", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Favatar.jpg?alt=media&token=1c75b09d-7c7a-44bf-b7ad-e7da4d0b7193", + releaseYear: 2009, + genre: "sci-fi", + rating: 7.8, + description: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440016", + title: "Jurassic Park", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjurassic_park.jpg?alt=media&token=1731ce71-3384-4435-8a5b-821d4fd286d3", + releaseYear: 1993, + genre: "adventure", + rating: 8.1, + description: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures.", + tags: ["adventure", "sci-fi"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440017", + title: "The Lion King", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_lion_king.jpg?alt=media&token=3e4e4265-6ae7-47d6-a5ba-584de126ef00", + releaseYear: 1994, + genre: "animation", + rating: 8.5, + description: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption.", + tags: ["animation", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440018", + title: "Star Wars: Episode IV - A New Hope", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fstar_wars_4.jpg?alt=media&token=b4ea7e0c-707f-43dd-8633-9d962e77b5a4", + releaseYear: 1977, + genre: "sci-fi", + rating: 8.6, + description: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440019", + title: "Blade Runner", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fblade_runner.jpg?alt=media&token=d8e94bdd-1477-49f3-b244-dd7a9c059fc1", + releaseYear: 1982, + genre: "sci-fi", + rating: 8.1, + description: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity.", + tags: ["sci-fi", "thriller"] + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql new file mode 100644 index 0000000..6922dcf --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql @@ -0,0 +1,104 @@ +mutation { + actor_insertMany(data: [ + { + id: "123e4567-e89b-12d3-a456-426614174000", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316", + name: "Leonardo DiCaprio" + }, + { + id: "123e4567-e89b-12d3-a456-426614174001", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115", + name: "Keanu Reeves" + }, + { + id: "123e4567-e89b-12d3-a456-426614174002", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmcconaoghey.jpg?alt=media&token=d340ca18-ef51-44ac-a160-08e45b242cd7", + name: "Matthew McConaughey" + }, + { + id: "123e4567-e89b-12d3-a456-426614174003", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fbale.jpg?alt=media&token=666f1690-a550-458f-a1cf-9505b7d1af7d", + name: "Christian Bale" + }, + { + id: "123e4567-e89b-12d3-a456-426614174004", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpitt.jpeg?alt=media&token=3a5283d4-f85c-4ba7-be72-51bc87ca4133", + name: "Brad Pitt" + }, + { + id: "123e4567-e89b-12d3-a456-426614174005", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjackson.jpg?alt=media&token=07be0601-19fe-4b5d-b111-84fa71f32139", + name: "Samuel L. Jackson" + }, + { + id: "123e4567-e89b-12d3-a456-426614174006", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmortensen.jpeg?alt=media&token=e3d1ec99-b8e7-42e9-9d1c-03f56f61ecf7", + name: "Viggo Mortensen" + }, + { + id: "123e4567-e89b-12d3-a456-426614174007", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffreeman.jpg?alt=media&token=94bc6227-119e-4ab0-b350-55fac7aeb062", + name: "Morgan Freeman" + }, + { + id: "123e4567-e89b-12d3-a456-426614174008", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fhanks.jpeg?alt=media&token=d92979ce-da62-4b28-afbe-b8740bbb9d32", + name: "Tom Hanks" + }, + { + id: "123e4567-e89b-12d3-a456-426614174009", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpacino.jpg?alt=media&token=9c0c54b1-6913-48b5-8e5e-d6551dd2f182", + name: "Al Pacino" + }, + { + id: "123e4567-e89b-12d3-a456-426614174010", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffoster.jpg?alt=media&token=b429734c-0f2d-4840-b75b-6857eac7bb4f", + name: "Jodie Foster" + }, + { + id: "123e4567-e89b-12d3-a456-426614174011", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcruise.jpg?alt=media&token=d34b0326-a8d1-4f01-86e5-f3f094594e5a", + name: "Tom Cruise" + }, + { + id: "123e4567-e89b-12d3-a456-426614174012", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdowney.jpg?alt=media&token=dd291c96-6ef0-42fc-841c-902c80748b37", + name: "Robert Downey Jr." + }, + { + id: "123e4567-e89b-12d3-a456-426614174013", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcrowe.jpg?alt=media&token=46d413d5-ace8-404e-b018-8d7e6fe0d362", + name: "Russell Crowe" + }, + { + id: "123e4567-e89b-12d3-a456-426614174014", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fwinslet.jpg?alt=media&token=b675585e-356e-4361-a041-5ac1a6ee5922", + name: "Kate Winslet" + }, + { + id: "123e4567-e89b-12d3-a456-426614174015", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fweaver.jpeg?alt=media&token=263b5c3d-e0ee-43c3-854d-9b236c6df391", + name: "Sigourney Weaver" + }, + { + id: "123e4567-e89b-12d3-a456-426614174016", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fgoldblume.jpeg?alt=media&token=18277dd1-166c-4934-a02e-19ef141c86e2", + name: "Jeff Goldblum" + }, + { + id: "123e4567-e89b-12d3-a456-426614174017", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjones.jpg?alt=media&token=f7ac9bc4-6e26-4b25-9a73-7a90f699424e", + name: "James Earl Jones" + }, + { + id: "123e4567-e89b-12d3-a456-426614174018", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fford.jpg?alt=media&token=928434c0-d492-4c8e-bdf0-0db585008d87", + name: "Harrison Ford" + }, + { + id: "123e4567-e89b-12d3-a456-426614174019", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fschwarzenegger.jpeg?alt=media&token=c46fb249-41ef-4084-b4ad-9517bee6ab46", + name: "Arnold Schwarzenegger" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql new file mode 100644 index 0000000..c2256ac --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql @@ -0,0 +1,238 @@ +mutation { + movieMetadata_insertMany(data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + director: "Christopher Nolan" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + director: "Lana Wachowski, Lilly Wachowski" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + director: "Chad Stahelski" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + director: "Christopher Nolan" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + director: "David Fincher" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + director: "Quentin Tarantino" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + director: "Peter Jackson" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + director: "Frank Darabont" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + director: "Robert Zemeckis" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + director: "Francis Ford Coppola" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440010", + director: "Jonathan Demme" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440011", + director: "Steven Spielberg" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440012", + director: "Joss Whedon" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440013", + director: "Ridley Scott" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440014", + director: "James Cameron" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440015", + director: "James Cameron" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440016", + director: "Steven Spielberg" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440017", + director: "Roger Allers, Rob Minkoff" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440018", + director: "George Lucas" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440019", + director: "Ridley Scott" + } + ]) + + movieActor_insertMany(data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + actorId: "123e4567-e89b-12d3-a456-426614174000", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + actorId: "123e4567-e89b-12d3-a456-426614174003", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + actorId: "123e4567-e89b-12d3-a456-426614174004", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + actorId: "123e4567-e89b-12d3-a456-426614174005", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + actorId: "123e4567-e89b-12d3-a456-426614174006", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + actorId: "123e4567-e89b-12d3-a456-426614174007", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + actorId: "123e4567-e89b-12d3-a456-426614174008", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + actorId: "123e4567-e89b-12d3-a456-426614174009", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440010", + actorId: "123e4567-e89b-12d3-a456-426614174010", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440011", + actorId: "123e4567-e89b-12d3-a456-426614174011", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440012", + actorId: "123e4567-e89b-12d3-a456-426614174012", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440013", + actorId: "123e4567-e89b-12d3-a456-426614174013", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440014", + actorId: "123e4567-e89b-12d3-a456-426614174014", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440015", + actorId: "123e4567-e89b-12d3-a456-426614174015", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440016", + actorId: "123e4567-e89b-12d3-a456-426614174016", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440017", + actorId: "123e4567-e89b-12d3-a456-426614174017", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440018", + actorId: "123e4567-e89b-12d3-a456-426614174018", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440019", + actorId: "123e4567-e89b-12d3-a456-426614174019", + role: "main" + }, + # Supporting actors + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + actorId: "123e4567-e89b-12d3-a456-426614174002", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + actorId: "123e4567-e89b-12d3-a456-426614174003", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + actorId: "123e4567-e89b-12d3-a456-426614174004", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + actorId: "123e4567-e89b-12d3-a456-426614174005", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + actorId: "123e4567-e89b-12d3-a456-426614174006", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + actorId: "123e4567-e89b-12d3-a456-426614174007", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + actorId: "123e4567-e89b-12d3-a456-426614174008", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + actorId: "123e4567-e89b-12d3-a456-426614174009", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + actorId: "123e4567-e89b-12d3-a456-426614174010", + role: "supporting" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql b/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql new file mode 100644 index 0000000..51167f3 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql @@ -0,0 +1,142 @@ +mutation { + user_insertMany(data: [ + { + id: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + username: "cynthia_w" + }, + { + id: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + username: "hercule_p" + }, + { + id: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + username: "jane_d" + }, + { + id: "TBedjwCX0Jf955Uuoxk6k74sY0l2", + username: "peter_f" + } + + ]) + + review_insertMany(data: [ + { + id: "345e4567-e89b-12d3-a456-426614174000", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440000", + rating: 5, + reviewText: "An incredible movie with a mind-blowing plot!", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174001", + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440001", + rating: 5, + reviewText: "A revolutionary film that changed cinema forever.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174002", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440002", + rating: 5, + reviewText: "A visually stunning and emotionally impactful movie.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174003", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440003", + rating: 4, + reviewText: "A fantastic superhero film with great performances.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174004", + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440004", + rating: 5, + reviewText: "An amazing film that keeps you on the edge of your seat.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174005", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "An absolute classic with unforgettable dialogue.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174006", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l2", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "I really loved this one.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174007", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "Me too!.", + reviewDate_date: { today: true } + } + ]) + + favorite_movie_insertMany(data: [ + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440000" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440001" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440002" + }, + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440003" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440004" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440005" + } + ]) + + favorite_actor_insertMany(data: [ + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + actorId: "123e4567-e89b-12d3-a456-426614174000" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + actorId: "123e4567-e89b-12d3-a456-426614174001" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + actorId: "123e4567-e89b-12d3-a456-426614174002" + }, + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + actorId: "123e4567-e89b-12d3-a456-426614174003" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + actorId: "123e4567-e89b-12d3-a456-426614174004" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + actorId: "123e4567-e89b-12d3-a456-426614174005" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql b/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql new file mode 100644 index 0000000..76b11da --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql @@ -0,0 +1,141 @@ +mutation updateMovieEmbeddings { + movie1: movie_update( + id: "550e8400-e29b-41d4-a716-446655440000" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move."} + } + ) + + movie2: movie_update( + id: "550e8400-e29b-41d4-a716-446655440001" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny."} + } + ) + + movie3: movie_update( + id: "550e8400-e29b-41d4-a716-446655440002" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances."} + } + ) + + movie4: movie_update( + id: "550e8400-e29b-41d4-a716-446655440003" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice."} + } + ) + + movie5: movie_update( + id: "550e8400-e29b-41d4-a716-446655440004" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity."} + } + ) + + movie6: movie_update( + id: "550e8400-e29b-41d4-a716-446655440005" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references."} + } + ) + + movie7: movie_update( + id: "550e8400-e29b-41d4-a716-446655440006" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond."} + } + ) + + movie8: movie_update( + id: "550e8400-e29b-41d4-a716-446655440007" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman)."} + } + ) + + movie9: movie_update( + id: "550e8400-e29b-41d4-a716-446655440008" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright)."} + } + ) + + movie10: movie_update( + id: "550e8400-e29b-41d4-a716-446655440009" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal."} + } + ) + + movie11: movie_update( + id: "550e8400-e29b-41d4-a716-446655440010" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer."} + } + ) + + movie12: movie_update( + id: "550e8400-e29b-41d4-a716-446655440011" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war."} + } + ) + + movie13: movie_update( + id: "550e8400-e29b-41d4-a716-446655440012" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast."} + } + ) + + movie14: movie_update( + id: "550e8400-e29b-41d4-a716-446655440013" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance."} + } + ) + + movie15: movie_update( + id: "550e8400-e29b-41d4-a716-446655440014" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals."} + } + ) + + movie16: movie_update( + id: "550e8400-e29b-41d4-a716-446655440015" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience."} + } + ) + + movie17: movie_update( + id: "550e8400-e29b-41d4-a716-446655440016" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures."} + } + ) + + movie18: movie_update( + id: "550e8400-e29b-41d4-a716-446655440017" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption."} + } + ) + + movie19: movie_update( + id: "550e8400-e29b-41d4-a716-446655440018" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters."} + } + ) + + movie20: movie_update( + id: "550e8400-e29b-41d4-a716-446655440019" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity."} + } + ) +} diff --git a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml new file mode 100644 index 0000000..7b27a6b --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml @@ -0,0 +1,11 @@ +specVersion: "v1alpha" +serviceId: "friendly-flix-service" +location: "us-central1" +schema: + source: "./schema" + datasource: + postgresql: + database: "friendly-flix-database" + cloudSql: + instanceId: "my-cloud-sql" +connectorDirs: ["./movie-connector"] diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml b/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml new file mode 100644 index 0000000..d8410a8 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml @@ -0,0 +1,7 @@ +connectorId: friendly-flix +authMode: PUBLIC +generate: + swiftSdk: + outputDir: "../../app" + package: "FriendlyFlixSDK" + observablePublisher: observableMacro \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql new file mode 100644 index 0000000..fdac88b --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql @@ -0,0 +1,114 @@ +# Create a movie based on user input +mutation CreateMovie( + $title: String! + $releaseYear: Int! + $genre: String! + $rating: Float + $description: String + $imageUrl: String! + $tags: [String!] = [] +) @auth(level: USER_EMAIL_VERIFIED) { + movie_insert( + data: { + title: $title + releaseYear: $releaseYear + genre: $genre + rating: $rating + description: $description + imageUrl: $imageUrl + tags: $tags + } + ) +} + +# Add a movie to the user's favorites list +mutation AddFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie_upsert(data: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Remove a movie from the user's favorites list +mutation DeleteFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Add an actor to the user's favorites list +mutation AddFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor_upsert(data: { userId_expr: "auth.uid", actorId: $actorId }) +} + +# Remove an actor from the user's favorites list +mutation DeleteFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor_delete(key: { userId_expr: "auth.uid", actorId: $actorId }) +} + +# Add a review for a movie +mutation AddReview( + $movieId: UUID! + $rating: Int! + $reviewText: String! +) @auth(level: USER) { + review_upsert( + data: { + userId_expr: "auth.uid" + movieId: $movieId + rating: $rating + reviewText: $reviewText + reviewDate_date: { today: true } + } + ) +} + +# Delete a user's review for a movie +mutation DeleteReview( + $movieId: UUID! +) @auth(level: USER) { + review_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Upsert (update or insert) a user based on their username +mutation UpsertUser($username: String!) @auth(level: USER) { + user_upsert( + data: { + id_expr: "auth.uid" + username: $username + } + ) +} + +# The mutations below are unused by the application, but are useful examples for more complex cases + +# Update movie information based on the provided ID +mutation UpdateMovie( + $id: UUID! + $title: String + $releaseYear: Int + $genre: String + $rating: Float + $description: String + $imageUrl: String + $tags: [String!] = [] +) @auth(level: USER_EMAIL_VERIFIED) { + movie_update( + id: $id + data: { + title: $title + releaseYear: $releaseYear + genre: $genre + rating: $rating + description: $description + imageUrl: $imageUrl + tags: $tags + } + ) +} + +# Delete a movie by its ID +mutation DeleteMovie($id: UUID!) @auth(level: USER_EMAIL_VERIFIED) { + movie_delete(id: $id) +} + +# Delete movies with a rating lower than the specified minimum rating +mutation DeleteUnpopularMovies($minRating: Float!) @auth(level: USER_EMAIL_VERIFIED) { + movie_deleteMany(where: { rating: { le: $minRating } }) +} +# End of example mutations \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql new file mode 100644 index 0000000..ca3257f --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -0,0 +1,379 @@ +# List subset of fields for movies +# query ListMovies($orderByRating: OrderDirection, $orderByReleaseYear: OrderDirection, $limit: Int) @auth(level: PUBLIC) { +# movies ( +# orderBy: [ +# { rating: $orderByRating }, +# { releaseYear: $orderByReleaseYear }] +# limit: $limit +# ) { +# id +# title +# imageUrl +# releaseYear +# genre +# rating +# tags +# description +# } +# } + +query ListMovies($limit: Int) @auth(level: PUBLIC) { + movies ( + limit: $limit + ) { + id + title + imageUrl + releaseYear + genre + rating + tags + description + } +} + +# List movies of a certain genre +query ListMoviesByGenre($genre: String!) @auth(level: PUBLIC) { + mostPopular: movies( + where: { genre: { eq: $genre } } + orderBy: { rating: DESC } + limit: 10 + ) { + id + title + imageUrl + rating + tags + } + mostRecent: movies( + where: { genre: { eq: $genre } } + orderBy: { releaseYear: DESC } + ) { + id + title + imageUrl + rating + tags + } +} + +# Get movie by id +query GetMovieById($id: UUID!) @auth(level: PUBLIC) { + movie(id: $id) { + id + title + imageUrl + releaseYear + genre + rating + description + tags + metadata: movieMetadatas_on_movie { + director + } + mainActors: actors_via_MovieActor(where: { role: { eq: "main" } }) { + id + name + imageUrl + } + supportingActors: actors_via_MovieActor( + where: { role: { eq: "supporting" } } + ) { + id + name + imageUrl + } + reviews: reviews_on_movie { + id + reviewText + reviewDate + rating + user { + id + username + } + } + } +} + +# Get actor by id +query GetActorById($id: UUID!) @auth(level: PUBLIC) { + actor(id: $id) { + id + name + imageUrl + mainActors: movies_via_MovieActor(where: { role: { eq: "main" } }) { + id + title + genre + tags + imageUrl + } + supportingActors: movies_via_MovieActor( + where: { role: { eq: "supporting" } } + ) { + id + title + genre + tags + imageUrl + } + } +} + +# Get user by ID +query GetCurrentUser @auth(level: USER) { + user(key: {id_expr: "auth.uid"}) { + id + username + reviews: reviews_on_user { + id + rating + reviewDate + reviewText + movie { + id + title + } + } + favoriteMovies: favorite_movies_on_user { + movie { + id + title + genre + imageUrl + releaseYear + rating + description + tags + metadata: movieMetadatas_on_movie { + director + } + } + } + favoriteActors: favorite_actors_on_user { + actor { + id + name + imageUrl + } + } + } +} + +# Check if a movie is favorited by user +query GetIfFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie(key: { userId_expr: "auth.uid", movieId: $movieId }) { + movieId + } +} + +# Check if an actor is favorited by user +query GetIfFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor(key: { userId_expr: "auth.uid", actorId: $actorId }) { + actorId + } +} + +# Search for movies, actors, and reviews +query SearchAll( + $input: String + $minYear: Int! + $maxYear: Int! + $minRating: Float! + $maxRating: Float! + $genre: String! +) @auth(level: PUBLIC) { + moviesMatchingTitle: movies( + where: { + _and: [ + { releaseYear: { ge: $minYear } } + { releaseYear: { le: $maxYear } } + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { contains: $genre } } + { title: { contains: $input } } + ] + } + ) { + id + title + genre + rating + imageUrl + } + moviesMatchingDescription: movies( + where: { + _and: [ + { releaseYear: { ge: $minYear } } + { releaseYear: { le: $maxYear } } + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { contains: $genre } } + { description: { contains: $input } } + ] + } + ) { + id + title + genre + rating + imageUrl + } + actorsMatchingName: actors(where: { name: { contains: $input } }) { + id + name + imageUrl + } + reviewsMatchingText: reviews(where: { reviewText: { contains: $input } }) { + id + rating + reviewText + reviewDate + movie { + id + title + } + user { + id + username + } + } +} + +# Search movie descriptions using L2 similarity with Vertex AI +query SearchMovieDescriptionUsingL2Similarity($query: String!) +@auth(level: PUBLIC) { + movies_descriptionEmbedding_similarity( + compare_embed: { model: "textembedding-gecko@003", text: $query } + method: L2 + within: 2 + limit: 5 + ) { + id + title + description + tags + rating + imageUrl + } +} +# The queries below are unused by the application, but are useful examples for more complex cases + +# List movies by partial title match +query ListMoviesByPartialTitle($input: String!) @auth(level: PUBLIC) { + movies(where: { title: { contains: $input } }) { + id + title + genre + rating + imageUrl + } +} + +# List movies by tag +query ListMoviesByTag($tag: String!) @auth(level: PUBLIC) { + movies(where: { tags: { includes: $tag } }) { + id + title + imageUrl + genre + rating + } +} + +# List movies by release year range +query MoviesByReleaseYear($min: Int, $max: Int) @auth(level: PUBLIC) { + movies( + where: { releaseYear: { le: $max, ge: $min } } + orderBy: { releaseYear: ASC } + ) { + id + rating + title + imageUrl + } +} + +# List movies by rating and genre with OR filters +query SearchMovieOr( + $minRating: Float + $maxRating: Float + $genre: String + $tag: String + $input: String +) @auth(level: PUBLIC) { + movies( + where: { + _or: [ + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { eq: $genre } } + { tags: { includes: $tag } } + { title: { contains: $input } } + ] + } + ) { + id + rating + title + imageUrl + } +} + +# List movies by rating and genre with AND filters +query SearchMovieAnd( + $minRating: Float + $maxRating: Float + $genre: String + $tag: String + $input: String +) @auth(level: PUBLIC) { + movies( + where: { + _and: [ + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { eq: $genre } } + { tags: { includes: $tag } } + { title: { contains: $input } } + ] + } + ) { + id + rating + title + imageUrl + } +} + +# Get favorite actors by user ID +query GetFavoriteActors @auth(level: USER) { + user(key: {id_expr: "auth.uid"}) { + favorite_actors_on_user { + actor { + id + name + imageUrl + } + } + } +} + +# Get favorite movies by user ID +query GetUserFavoriteMovies @auth(level: USER) { + user(id_expr: "auth.uid") { + favorite_movies_on_user { + movie { + id + title + genre + imageUrl + releaseYear + rating + description + } + } + } +} +# end of example queries diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql new file mode 100644 index 0000000..f25a8a1 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -0,0 +1,89 @@ +# Movies +type Movie + # The below parameter values are generated by default with @table, and can be edited manually. + @table { + # implicitly calls @col to generates a column name. ex: @col(name: "movie_id") + # for UUID fields, @default(expr: "uuidV4()") is implicitly called + id: UUID! + title: String! + imageUrl: String! + releaseYear: Int + genre: String + rating: Float + description: String + tags: [String] + # Vectors -- uncomment the line below to enable vector search + descriptionEmbedding: Vector @col(size:768) +} + +# Movie Metadata +# Movie - MovieMetadata is a one-to-one relationship +type MovieMetadata + @table { + # @ref creates a field in the current table (MovieMetadata) that holds the primary key of the referenced type + # In this case, @ref(fields: "movieId", references: "id") is implied + movie: Movie! @ref + # movieId: UUID <- this is created by the above @ref + director: String +} + +# Actors +# Suppose an actor can participate in multiple movies and movies can have multiple actors +# Movie - Actors (or vice versa) is a many to many relationship +type Actor @table { + id: UUID! + imageUrl: String! + name: String! @col(name: "name", dataType: "varchar(30)") +} + +# Users +# Suppose a user can leave reviews for movies +# user-reviews is a one to many relationship, movie-reviews is a one to many relationship, movie:user is a many to many relationship +type User + @table { + id: String! @col(name: "user_auth") + username: String! @col(name: "username", dataType: "varchar(50)") + # The following are generated from the @ref in the Review table + # reviews_on_user + # movies_via_Review +} + +# Reviews +type Review @table(name: "Reviews", key: ["movie", "user"]) { + id: UUID! @default(expr: "uuidV4()") + user: User! + movie: Movie! + rating: Int + reviewText: String + reviewDate: Date! @default(expr: "request.time") +} + +# Join table for many-to-many relationship for movies and actors +# The 'key' param signifies the primary key(s) of this table +# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor] +type MovieActor @table(key: ["movie", "actor"]) { + # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type + # In this case, @ref(fields: "id") is implied + movie: Movie! + # movieId: UUID! <- this is created by the implied @ref, see: implicit.gql + + actor: Actor! + # actorId: UUID! <- this is created by the implied @ref, see: implicit.gql + + role: String! # "main" or "supporting" +} + +# Join table for many-to-many relationship for users and favorite movies +type FavoriteMovie + @table(name: "FavoriteMovies", singular: "favorite_movie", plural: "favorite_movies", key: ["user", "movie"]) { + # @ref is implicit + user: User! + movie: Movie! +} + +# Join table for many-to-many relationship for users and favorite actors +type FavoriteActor + @table(name: "FavoriteActors", singular: "favorite_actor", plural: "favorite_actors", key: ["user", "actor"]) { + user: User! + actor: Actor! +} diff --git a/Examples/FriendlyFlix/firebase.json b/Examples/FriendlyFlix/firebase.json new file mode 100644 index 0000000..c46f2c5 --- /dev/null +++ b/Examples/FriendlyFlix/firebase.json @@ -0,0 +1,31 @@ +{ + "emulators": { + "auth": { + "port": 9099 + }, + "hosting": { + "port": 5000 + }, + "dataconnect": { + "port": 9399 + }, + "ui": { + "enabled": true + }, + "singleProjectMode": true + }, + "dataconnect": { + "source": "./dataconnect" + }, + "hosting": { + "source": "app", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "frameworksBackend": { + "region": "us-central1" + } + } +} From 027a8262ddaf840616b2dd6075f763256ea3797b Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 24 Sep 2024 15:50:18 +0100 Subject: [PATCH 02/50] Initial code drop for movie tracker sample app Signed-off-by: Peter Friese --- Examples/FriendlyFlix/.editorconfig | 8 + Examples/FriendlyFlix/.firebase/.graphqlrc | 1 + Examples/FriendlyFlix/.swift-format | 70 + Examples/FriendlyFlix/LICENSE | 202 + Examples/FriendlyFlix/README.md | 3 + .../FriendlyFlix.xcodeproj/project.pbxproj | 619 ++ .../xcschemes/FriendlyFlix.xcscheme | 102 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../Features/Details/DetailsSection.swift | 94 + .../Features/Details/MovieDetailsView.swift | 160 + .../Features/Details/MovieReviewCard.swift | 67 + .../Features/Details/StarRatingView.swift | 43 + .../FriendlyFlix/Features/Hero/CardView.swift | 243 + .../Features/Hero/GradientView.swift | 152 + .../Features/List/MovieCardView.swift | 76 + .../Features/List/MoviesList.swift | 67 + .../FriendlyFlix/FriendlyFlixApp.swift | 36 + .../Preview Assets.xcassets/Contents.json | 6 + .../FriendlyFlix/Utilities/Color+Hex.swift | 47 + .../Utilities/String+Placeholder.swift | 26 + .../String+StringInterpolation.swift | 31 + .../Utilities/View+Extensions.swift | 28 + .../FriendlyFlixTests/FriendlyFlixTests.swift | 30 + .../FriendlyFlixUITests.swift | 55 + .../FriendlyFlixUITestsLaunchTests.swift | 45 + .../app/FriendlyFlixSDK/Package.swift | 32 + .../Sources/FriendlyFlixClient.swift | 93 + .../Sources/FriendlyFlixKeys.swift | 501 ++ .../Sources/FriendlyFlixOperations.swift | 6319 +++++++++++++++++ .../app/_FriendlyFlixSDK/Package.swift | 34 + .../Sources/FriendlyFlixClient.swift | 33 + .../Sources/FriendlyFlixKeys.swift | 501 ++ .../Sources/FriendlyFlixOperations.swift | 5813 +++++++++++++++ .../.dataconnect/schema/main/implicit.gql | 20 + .../.dataconnect/schema/main/input.gql | 272 + .../.dataconnect/schema/main/mutation.gql | 258 + .../.dataconnect/schema/main/query.gql | 71 + .../.dataconnect/schema/main/relation.gql | 74 + .../.dataconnect/schema/prelude.gql | 1170 +++ .../dataconnect/1_movie_insert.gql | 204 + .../dataconnect/2_actor_insert.gql | 104 + .../dataconnect/3_movie_actor_insert.gql | 238 + .../4_user_favorites_review_insert.gql | 142 + .../dataconnect/5_optional_vector_embed.gql | 141 + .../FriendlyFlix/dataconnect/dataconnect.yaml | 11 + .../movie-connector/connector.yaml | 7 + .../dataconnect/movie-connector/mutations.gql | 114 + .../dataconnect/movie-connector/queries.gql | 379 + .../dataconnect/schema/schema.gql | 89 + Examples/FriendlyFlix/firebase.json | 31 + 52 files changed, 18914 insertions(+) create mode 100644 Examples/FriendlyFlix/.editorconfig create mode 100644 Examples/FriendlyFlix/.firebase/.graphqlrc create mode 100644 Examples/FriendlyFlix/.swift-format create mode 100644 Examples/FriendlyFlix/LICENSE create mode 100644 Examples/FriendlyFlix/README.md create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift create mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql create mode 100644 Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql create mode 100644 Examples/FriendlyFlix/dataconnect/1_movie_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/2_actor_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql create mode 100644 Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql create mode 100644 Examples/FriendlyFlix/dataconnect/dataconnect.yaml create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql create mode 100644 Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql create mode 100644 Examples/FriendlyFlix/dataconnect/schema/schema.gql create mode 100644 Examples/FriendlyFlix/firebase.json diff --git a/Examples/FriendlyFlix/.editorconfig b/Examples/FriendlyFlix/.editorconfig new file mode 100644 index 0000000..4d5d604 --- /dev/null +++ b/Examples/FriendlyFlix/.editorconfig @@ -0,0 +1,8 @@ +[*.swift] +indent_style = space +indent_size = 2 +tab_width = 2 +end_of_line = crlf +insert_final_newline = true +max_line_length = 100 +trim_trailing_whitespace = true \ No newline at end of file diff --git a/Examples/FriendlyFlix/.firebase/.graphqlrc b/Examples/FriendlyFlix/.firebase/.graphqlrc new file mode 100644 index 0000000..4028adf --- /dev/null +++ b/Examples/FriendlyFlix/.firebase/.graphqlrc @@ -0,0 +1 @@ +{"schema":["../dataconnect/schema/**/*.gql","../dataconnect/.dataconnect/**/*.gql"],"document":["../dataconnect/movie-connector/**/*.gql"]} \ No newline at end of file diff --git a/Examples/FriendlyFlix/.swift-format b/Examples/FriendlyFlix/.swift-format new file mode 100644 index 0000000..23f51c8 --- /dev/null +++ b/Examples/FriendlyFlix/.swift-format @@ -0,0 +1,70 @@ +{ + "fileScopedDeclarationPrivacy" : { + "accessLevel" : "private" + }, + "indentation" : { + "spaces" : 2 + }, + "indentConditionalCompilationBlocks" : true, + "indentSwitchCaseLabels" : false, + "lineBreakAroundMultilineExpressionChainComponents" : false, + "lineBreakBeforeControlFlowKeywords" : false, + "lineBreakBeforeEachArgument" : false, + "lineBreakBeforeEachGenericRequirement" : false, + "lineLength" : 100, + "maximumBlankLines" : 1, + "multiElementCollectionTrailingCommas" : true, + "noAssignmentInExpressions" : { + "allowedFunctions" : [ + "XCTAssertNoThrow" + ] + }, + "prioritizeKeepingFunctionOutputTogether" : false, + "respectsExistingLineBreaks" : true, + "rules" : { + "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : false, + "AlwaysUseLowerCamelCase" : true, + "AmbiguousTrailingClosureOverload" : true, + "BeginDocumentationCommentWithOneLineSummary" : false, + "DoNotUseSemicolons" : true, + "DontRepeatTypeInStaticProperties" : true, + "FileScopedDeclarationPrivacy" : true, + "FullyIndirectEnum" : true, + "GroupNumericLiterals" : true, + "IdentifiersMustBeASCII" : true, + "NeverForceUnwrap" : false, + "NeverUseForceTry" : false, + "NeverUseImplicitlyUnwrappedOptionals" : false, + "NoAccessLevelOnExtensionDeclaration" : true, + "NoAssignmentInExpressions" : true, + "NoBlockComments" : true, + "NoCasesWithOnlyFallthrough" : true, + "NoEmptyTrailingClosureParentheses" : true, + "NoLabelsInCasePatterns" : true, + "NoLeadingUnderscores" : false, + "NoParensAroundConditions" : true, + "NoPlaygroundLiterals" : true, + "NoVoidReturnOnFunctionSignature" : true, + "OmitExplicitReturns" : false, + "OneCasePerLine" : true, + "OneVariableDeclarationPerLine" : true, + "OnlyOneTrailingClosureArgument" : true, + "OrderedImports" : true, + "ReplaceForEachWithForLoop" : true, + "ReturnVoidInsteadOfEmptyTuple" : true, + "TypeNamesShouldBeCapitalized" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : true, + "UseLetInEveryBoundCaseVariable" : true, + "UseShorthandTypeNames" : true, + "UseSingleLinePropertyGetter" : true, + "UseSynthesizedInitializer" : true, + "UseTripleSlashForDocumentationComments" : true, + "UseWhereClausesInForLoops" : false, + "ValidateDocumentationComments" : false + }, + "spacesAroundRangeFormationOperators" : false, + "tabWidth" : 8, + "version" : 1 +} diff --git a/Examples/FriendlyFlix/LICENSE b/Examples/FriendlyFlix/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/Examples/FriendlyFlix/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md new file mode 100644 index 0000000..7eee8e2 --- /dev/null +++ b/Examples/FriendlyFlix/README.md @@ -0,0 +1,3 @@ +# FriendlyFlix + +A sample app for Firebase DataConnect \ No newline at end of file diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c5db3f0 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj @@ -0,0 +1,619 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */; }; + 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */; }; + 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; + remoteInfo = FriendlyFlix; + }; + 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; + remoteInfo = FriendlyFlix; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FriendlyFlix.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlix; + sourceTree = ""; + }; + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlixTests; + sourceTree = ""; + }; + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FriendlyFlixUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 884EA4C92C7E0CC7009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */, + 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */, + 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4D92C7E0CC8009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E32C7E0CC8009866B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 884EA4C32C7E0CC7009866B5 = { + isa = PBXGroup; + children = ( + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, + 884EA4CD2C7E0CC7009866B5 /* Products */, + ); + sourceTree = ""; + }; + 884EA4CD2C7E0CC7009866B5 /* Products */ = { + isa = PBXGroup; + children = ( + 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */, + 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */, + 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */; + buildPhases = ( + 884EA4C82C7E0CC7009866B5 /* Sources */, + 884EA4C92C7E0CC7009866B5 /* Frameworks */, + 884EA4CA2C7E0CC7009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, + ); + name = FriendlyFlix; + packageProductDependencies = ( + 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */, + 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */, + 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */, + ); + productName = FriendlyFlix; + productReference = 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */; + productType = "com.apple.product-type.application"; + }; + 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */; + buildPhases = ( + 884EA4D82C7E0CC8009866B5 /* Sources */, + 884EA4D92C7E0CC8009866B5 /* Frameworks */, + 884EA4DA2C7E0CC8009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, + ); + name = FriendlyFlixTests; + packageProductDependencies = ( + ); + productName = FriendlyFlixTests; + productReference = 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */; + buildPhases = ( + 884EA4E22C7E0CC8009866B5 /* Sources */, + 884EA4E32C7E0CC8009866B5 /* Frameworks */, + 884EA4E42C7E0CC8009866B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, + ); + name = FriendlyFlixUITests; + packageProductDependencies = ( + ); + productName = FriendlyFlixUITests; + productReference = 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 884EA4C42C7E0CC7009866B5 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + 884EA4CB2C7E0CC7009866B5 = { + CreatedOnToolsVersion = 16.0; + }; + 884EA4DB2C7E0CC8009866B5 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 884EA4CB2C7E0CC7009866B5; + }; + 884EA4E52C7E0CC8009866B5 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 884EA4CB2C7E0CC7009866B5; + }; + }; + }; + buildConfigurationList = 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 884EA4C32C7E0CC7009866B5; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */, + 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 884EA4CD2C7E0CC7009866B5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */, + 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */, + 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 884EA4CA2C7E0CC7009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4DA2C7E0CC8009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E42C7E0CC8009866B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 884EA4C82C7E0CC7009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4D82C7E0CC8009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 884EA4E22C7E0CC8009866B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; + targetProxy = 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */; + }; + 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; + targetProxy = 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 884EA4EE2C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 884EA4EF2C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 884EA4F12C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"FriendlyFlix/Preview Content\""; + DEVELOPMENT_TEAM = YGAZHQXHH4; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "-Xlinker", + "-interposable", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlix; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 884EA4F22C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"FriendlyFlix/Preview Content\""; + DEVELOPMENT_TEAM = YGAZHQXHH4; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlix; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 884EA4F42C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; + }; + name = Debug; + }; + 884EA4F52C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; + }; + name = Release; + }; + 884EA4F72C7E0CC8009866B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FriendlyFlix; + }; + name = Debug; + }; + 884EA4F82C7E0CC8009866B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YGAZHQXHH4; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FriendlyFlix; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4EE2C7E0CC8009866B5 /* Debug */, + 884EA4EF2C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F12C7E0CC8009866B5 /* Debug */, + 884EA4F22C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F42C7E0CC8009866B5 /* Debug */, + 884EA4F52C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 884EA4F72C7E0CC8009866B5 /* Debug */, + 884EA4F82C7E0CC8009866B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../FriendlyFlixSDK; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + branch = main; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = FriendlyFlixSDK; + }; + 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = FriendlyFlixSDK; + }; + 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */ = { + isa = XCSwiftPackageProductDependency; + package = 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAuth; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 884EA4C42C7E0CC7009866B5 /* Project object */; +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme new file mode 100644 index 0000000..7bc5f51 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift new file mode 100644 index 0000000..0a94936 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift @@ -0,0 +1,94 @@ +// +// DetailsSection.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +import SwiftUI + +struct DetailsSection: View { + var title: String + var content: () -> Details + + init(title: String, @ViewBuilder content: @escaping () -> Details) { + self.title = title + self.content = content + } + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .center) { + Text(title) + .font(.title2) + .bold() + Image(systemName: "chevron.right") + .font(.title2) + .bold() + } + .padding(.bottom, 8) + + content() + } + .padding(.bottom, 20) + } +} + +#Preview { + ScrollView { + DetailsSection(title: "Details Section") { + Text("Content goes here") + } + .padding() + } +} + +#Preview { + ScrollView { + DetailsSection(title: "Ratings & Reviews") { + HStack(alignment: .center) { + Text("4.7") + .font(.system(size: 64, weight: .bold)) + Spacer() + VStack(alignment: .trailing) { + StarRatingView(rating: 4.7) + Text("23 Ratings") + .font(.title) + .bold() + } + } + Text("Most Helpful Reviews") + .font(.title3) + .bold() + ScrollView(.horizontal) { + LazyHStack { + ForEach(0..<10) { i in + MovieReviewCard( + title: "Great stuff", + rating: 4.5, + reviewerName: "John Doe", + review: + "Incididunt reprehenderit ad elit et commodo. Sint magna Lorem eiusmod. Ea ut culpa cupidatat Lorem culpa ad cupidatat excepteur voluptate consectetur nostrud eu laborum." + ) + .frame(width: 350) + } + } + .scrollTargetLayout() + } + .scrollTargetBehavior(.viewAligned) + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift new file mode 100644 index 0000000..2aca1c1 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -0,0 +1,160 @@ +// +// for.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +// introduce a common protocol for movie actors, so we can use the same view for ActorMainActors and ActorSupportingActors +protocol MovieActor { + var id: UUID { get set } + var name: String { get set } + var imageUrl: String { get set } +} + +extension GetMovieByIdQuery.Data.Movie.ActorMainActors: MovieActor {} +extension GetMovieByIdQuery.Data.Movie.ActorSupportingActors: MovieActor {} + +struct MovieDetailsView: View { + var movie: ListMoviesQuery.Data.Movie + let movieDetailsRef: GetMovieByIdQuery.Ref + + init(movie: ListMoviesQuery.Data.Movie) { + self.movie = movie + movieDetailsRef = DataConnect.friendlyFlixConnector.getMovieByIdQuery.ref(id: movie.id) + } + +// var movieRef: GetMovieByIdQuery + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + // description + VStack(alignment: .leading, spacing: 10) { + Text("About") + .font(.title2) + .bold() + .unredacted() + + Text(movieDetailsRef.data?.movie?.description ?? .placeholder(length: 150)) + .font(.body) + .redacted(reason: movieDetailsRef.data?.movie == nil ? .placeholder : []) + HStack { + Spacer() + } + } + .redacted(if: movieDetailsRef.data == nil) + + // Actors + if let mainActors = movieDetailsRef.data?.movie?.mainActors, mainActors.count > 0 { + actorsSection(title: "Main actors", actors: mainActors) + } + if let supportingActors = movieDetailsRef.data?.movie?.supportingActors, supportingActors.count > 0 { + actorsSection(title: "Supporting actors", actors: supportingActors) + } + + // Reviews + DetailsSection(title: "Ratings & Reviews") { + HStack(alignment: .center) { + Text("4.7") + .font(.system(size: 64, weight: .bold)) + Spacer() + VStack(alignment: .trailing) { + StarRatingView(rating: 4.7) + Text("23 Ratings") + .font(.title) + .bold() + } + } + Text("Most Helpful Reviews") + .font(.title3) + .bold() + ScrollView(.horizontal) { + LazyHStack { + if let reviews = movieDetailsRef.data?.movie?.reviews { + ForEach(reviews, id: \.id) { review in + if let rating = review.rating, let feedback = review.reviewText { + MovieReviewCard( + title: "Feedback", + rating: Double(rating), + reviewerName: review.user.username, + review: feedback + ) + .frame(width: 350) + } + } + } + } + .scrollTargetLayout() + } + .scrollTargetBehavior(.viewAligned) + .scrollIndicators(.hidden) + } + + // Similar Movies + // if let movie = movieRef.data?.movie { + // let metadata = "\(movie.description) \nGenres: \(movie.genres.joined(separator: " "))" + // RelatedSection(similarMoviesRef: DataConnect.moviesClient.listSimilarMoviesQueryRef(to: movie.id, metadata: metadata)) + // } + } + .padding(8) + } +} + +extension MovieDetailsView { + func actorsSection(title: String, actors: [any MovieActor]) -> some View { + DetailsSection(title: title) { + ScrollView(.horizontal) { + LazyHStack { + ForEach(actors, id: \.id) { actor in + VStack(alignment: .center) { + if let imageUrl = URL(string: actor.imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .scaledToFill() + .frame(width: 96, height: 96, alignment: .center) + .clipShape(Circle()) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "person.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 96, height: 96, alignment: .center) + .redacted(reason: .placeholder) + .clipShape(Circle()) + } + } + } + Text(actor.name) + .font(.headline) + } + .padding(.horizontal, 8) + } + } + } + } + } +} + +//#Preview { +// MovieDetailsView(for: UUID()) +//} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift new file mode 100644 index 0000000..f9f7c02 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift @@ -0,0 +1,67 @@ +// +// MovieReviewCard.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieReviewCard: View { + var title: String + var rating: Double + var reviewerName: String + var review: String + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text(title) + .font(.headline) + HStack { + StarRatingView(rating: rating) + Text("·") + Text(reviewerName) + Spacer() + } + .font(.subheadline) + Text(review) + Spacer() + } + .padding(16) + .frame(height: 200) + .background(Color(UIColor.secondarySystemBackground)) + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: 16, + bottomLeading: 16, + bottomTrailing: 16, + topTrailing: 16), + style: .continuous)) + } +} + +#Preview { + ScrollView { + MovieReviewCard( + title: "Really great", + rating: 4.5, + reviewerName: "John Doe", + review: + "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." + ) + .padding() + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift new file mode 100644 index 0000000..c1d3a1e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift @@ -0,0 +1,43 @@ +// +// StarRatingView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct StarRatingView: View { + var rating: Double + + var body: some View { + HStack(spacing: 4) { + ForEach(0..<5) { index in + Image(systemName: self.starType(for: index)) + .foregroundColor(.yellow) + } + } + } + + func starType(for index: Int) -> String { + if rating > Double(index) + 0.75 { + return "star.fill" + } else if rating > Double(index) + 0.25 { + return "star.lefthalf.fill" + } else { + return "star" + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift new file mode 100644 index 0000000..c1ccc83 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift @@ -0,0 +1,243 @@ +// +// CardView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +// Try for blendmode https://saeedrz.medium.com/unleashing-creativity-a-deep-dive-into-blendmode-in-swiftui-2edc3f204fa8 + +struct CardView: View { + @Environment(\.dismiss) var dismiss + + var showDetails = true + + var hero: some View { + heroView() + } + + var heroView: () -> Hero + var heroTitle: () -> Title + var details: () -> Details + + public init( + showDetails: Bool = false, @ViewBuilder heroView: @escaping () -> Hero, + @ViewBuilder heroTitle: @escaping () -> Title, @ViewBuilder details: @escaping () -> Details + ) { + self.showDetails = showDetails + self.heroView = heroView + self.heroTitle = heroTitle + self.details = details + } + + @ViewBuilder + var dismissButton: some View { + if showDetails { + HStack { + Spacer() + Button { + dismiss() + } label: { + Image(systemName: "xmark") + .font(.headline) + .foregroundColor(.white) + .frame(width: 30, height: 30) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + } + .padding([.top, .trailing], 30) + } + } else { + EmptyView() + } + } + + var cardView: some View { + VStack(spacing: 0) { + ZStack(alignment: .topLeading) { + hero + dismissButton + heroTitle() + } + .frame(height: 450) + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: cornerRadius, + bottomLeading: showDetails ? 0 : 16, + bottomTrailing: showDetails ? 0 : 16, + topTrailing: cornerRadius), + style: .continuous) + ) + .padding(showDetails ? 0 : 16) + .shadow(radius: showDetails ? 0 : 8) + + if showDetails { + details() + .background(Color(UIColor.systemBackground)) + } + } + } + + @State var scaleFactor: CGFloat = 1 + @State var cornerRadius: CGFloat = 16 + + var body: some View { + if showDetails { + ScrollView { + cardView + .scaleEffect(scaleFactor) + .navigationBarBackButtonHidden(true) + .statusBar(hidden: true) + } + .ignoresSafeArea() + // Start: drag down to pop back + .background(Color(UIColor.secondarySystemBackground)) + .scrollIndicators(scaleFactor < 1 ? .hidden : .automatic, axes: .vertical) + .onScrollGeometryChange(for: CGFloat.self) { geometry in + geometry.contentOffset.y + } action: { oldValue, newValue in + if newValue >= 0 { + scaleFactor = 1 + cornerRadius = 16 + } else { + scaleFactor = 1 - (0.1 * (newValue / -50)) + cornerRadius = 55 - (35 / 50 * -newValue) + } + } + .onScrollGeometryChange(for: Bool.self) { geometry in + geometry.contentOffset.y < -50 + } action: { oldValue, newValue in + if newValue { + dismiss() + } + } + // End: drag down to pop back + } else { + cardView + .foregroundColor(.primary) + } + } +} + +#Preview { + CardView(showDetails: true) { + GradientView(configuration: GradienConfiguration.sample) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } +} + +#Preview { + ScrollView { + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.sample) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.samples[1]) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + CardView(showDetails: false) { + GradientView(configuration: GradienConfiguration.samples[2]) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ + ) + .font(.body) + .padding() + } + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift new file mode 100644 index 0000000..cc8c8e9 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift @@ -0,0 +1,152 @@ +// +// GradienConfiguration.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +let neonSunsetBlurb = + """ + Immerse yourself in the captivating allure of Neon Sunset, a mesmerizing gradient that seamlessly blends the warmth of daylight with the electric energy of the night. This vibrant spectrum captures the fleeting magic of twilight, where the sun dips below the horizon, painting the sky with a kaleidoscope of fiery oranges, deep pinks, and electrifying purples. + + Neon Sunset is not merely a color scheme; it's an experience. It evokes a sense of wonder, igniting the imagination and transporting you to a world where boundaries blur and possibilities abound. Whether you're designing a website, creating artwork, or simply seeking a visual feast for the eyes, Neon Sunset will infuse your projects with an undeniable vibrancy and modern flair. + + Embrace the dynamism of this gradient, as it effortlessly transitions from warm to cool tones. Let the radiant oranges and yellows awaken your creativity, while the deep purples and pinks add a touch of mystery and intrigue. Neon Sunset is a versatile tool that can be adapted to suit a wide range of styles and moods, making it an essential addition to any designer's toolkit. + + Unleash the power of Neon Sunset and watch your creations come alive with a captivating energy that is both bold and sophisticated. This gradient is more than just a visual element; it's a statement. It embodies a spirit of innovation, a celebration of individuality, and a passion for pushing boundaries. + + So, step into the world of Neon Sunset and let your imagination soar. Embrace the vibrant hues, the seamless transitions, and the electrifying energy. Discover a gradient that will elevate your designs, captivate your audience, and leave a lasting impression. + """ + +let prismaticDawnBlurb = + """ + Prismatic Dawn is an enchanting gradient that captures the ephemeral beauty of sunrise, where the first rays of light kiss the horizon and transform the world into a canvas of vibrant hues. This captivating spectrum evokes a sense of wonder, joy, and limitless possibilities. + + Immerse yourself in the mesmerizing blend of soft pastels and bold primary colors. Let the gentle pinks, blues, and purples soothe your senses, while the fiery oranges and yellows ignite your creativity. Prismatic Dawn is a celebration of diversity and harmony, where each color plays a vital role in creating a symphony of light and energy. + + Embrace the fluidity of this gradient, as it seamlessly transitions from delicate shades to vivid bursts of brilliance. Whether you're designing a website, crafting artwork, or simply seeking visual inspiration, Prismatic Dawn will infuse your projects with an undeniable charm and optimism. + + Unleash the power of Prismatic Dawn and watch your creations radiate with a captivating energy that is both playful and sophisticated. This gradient is more than just a visual element; it's an invitation to embrace the magic of color and the boundless potential of creativity. + + Step into the world of Prismatic Dawn and let your imagination dance with light. Explore the harmonious blend of hues, the gentle transitions, and the vibrant energy. Discover a gradient that will elevate your designs, inspire your audience, and leave a lasting impression. + """ + +let serenityDuskBlurb = + """ + Serenity Dusk is a captivating gradient that captures the peaceful transition between day and night. This mesmerizing blend of soft blues and warm pinks evokes a sense of tranquility, introspection, and gentle beauty. + + Immerse yourself in the calming embrace of this gradient, as it seamlessly blends cool and warm tones. Let the soothing blues wash over you, while the delicate pinks awaken a sense of hope and optimism. Serenity Dusk is a celebration of balance and harmony, where opposing forces come together to create a breathtaking visual experience. + + Embrace the subtlety of this gradient, as it gently shifts from one hue to another. Whether you're designing a website, crafting artwork, or simply seeking a moment of visual respite, Serenity Dusk will infuse your projects with a sense of peace and tranquility. + + Unleash the power of Serenity Dusk and watch your creations radiate with a captivating energy that is both calming and uplifting. This gradient is more than just a visual element; it's an invitation to embrace the beauty of stillness and the transformative power of color. + + Step into the world of Serenity Dusk and let your senses be enveloped by its gentle embrace. Explore the harmonious blend of hues, the soft transitions, and the subtle vibrancy. Discover a gradient that will elevate your designs, inspire your audience, and leave a lasting impression of serenity and beauty. + """ + +struct GradienConfiguration: Identifiable, Hashable { + let id = UUID().uuidString + let name: String + let tagLine: String + let subLine: String + let description: String + let points: [SIMD2] + let colors: [Color] +} + +extension GradienConfiguration { + var dimension: Int { + Int(Double(points.count).squareRoot()) + } + + static let samples: [Self] = [ + .init( + name: "Prismatic Dawn", + tagLine: "Where Light Dances with Color", + subLine: "Vivid, eye-catching, modern design.", + description: neonSunsetBlurb, + points: [ + [0.0, 0.0], [0.5, 0.0], [1.0, 0.0], + [0.0, 0.5], [0.6, 0.5], [1.0, 0.5], + [0.0, 1.0], [0.5, 1.0], [1.0, 1.0], + ], + colors: [ + .red, .purple, .indigo, + .orange, .white, .blue, + .yellow, .green, .mint, + ]), + .init( + name: "Neon Sunset", + tagLine: "Where the Day Meets the Night", + subLine: "Playful, vibrant, and energetic.", + description: prismaticDawnBlurb, + points: [ + [0.0, 0.0], [1.0, 0.0], + [0.0, 1.0], [1.0, 1.0], + ], + colors: [ + .red, .indigo, + .yellow, .blue, + ]), + .init( + name: "Serenity Dusk", + tagLine: "Where tranquility meets vibrancy", + subLine: "Embrace the calming hues of twilight.", + description: serenityDuskBlurb, + points: [ + [0.0, 0.0], [1.0, 0.0], + [0.0, 1.0], [1.0, 1.0], + ], + colors: [ + Color(hex: "#5a82e5"), Color(hex: "#ce6a7e"), + Color(hex: "#5084e9"), Color(hex: "#d66871"), + ]), + ] + + static let sample = Self.samples[0] +} + +struct GradientView: View { + var configuration: GradienConfiguration + @State private var isAnimating = false + var body: some View { + VStack { + if #available(iOS 18, macOS 15, tvOS 18, watchOS 11, *) { + MeshGradient( + width: configuration.dimension, + height: configuration.dimension, + points: configuration.points, + colors: configuration.colors, + smoothsColors: true, + colorSpace: .perceptual + ) + } else { + EllipticalGradient(colors: configuration.colors) + } + } + .ignoresSafeArea() + .onAppear { + withAnimation(.easeInOut(duration: 1).repeatForever(autoreverses: true)) { + isAnimating.toggle() + } + } + } +} + +#Preview { + GradientView(configuration: GradienConfiguration.sample) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift new file mode 100644 index 0000000..dc5c186 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift @@ -0,0 +1,76 @@ +// +// MovieCardView.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +struct MovieCardView: View { + var showDetails: Bool = false + + var movie: ListMoviesQuery.Data.Movie + + var body: some View { + CardView(showDetails: showDetails) { + if let imageUrl = URL(string: movie.imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .aspectRatio(contentMode: .fill) + .frame(height: 450) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(height: 450) + .redacted(reason: .placeholder) + } + } + } + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + HStack { + VStack(alignment: .leading) { + Text(movie.title) + .multilineTextAlignment(.leading) + .font(.title) + .bold() + if let releaseYear = movie.releaseYear { + Text("Released: \(format: releaseYear, using: .none)") + } + } + Spacer() + } + .padding() + .background(.thinMaterial) + } + } details: { + MovieDetailsView(movie: movie) + } + } +} + +//#Preview { +// MovieCardView(showDetails: true, gradientConfiguration: GradienConfiguration.sample) +//} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift new file mode 100644 index 0000000..6c00a83 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift @@ -0,0 +1,67 @@ +// +// MoviesList.swift +// FriendlyFlix +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +struct MoviesList: View { + @Namespace var namespace + var listMovies = DataConnect.friendlyFlixConnector.listMoviesQuery.ref() + + var body: some View { + NavigationStack { + ScrollView { + if let movies = listMovies.data?.movies { + ForEach(movies) { movie in + NavigationLink(value: movie) { + MovieCardView(showDetails: false, movie: movie) + .matchedTransitionSource(id: "card\(movie.id)", in: namespace) + } + } + } + } + .navigationTitle("Friendly Flix") + .navigationDestination(for: ListMoviesQuery.Data.Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: "card\(movie.id)", in: namespace)) + } + .refreshable { + do { + let _ = try await listMovies.execute() + } catch { + } + } + } + .overlay { + if listMovies.data?.movies == nil { + ContentUnavailableView { + Label("No Movies", systemImage: "video.slash") + } description: { + Text("Movies will appear here.") + } + } + } + + } +} + +#Preview { + MoviesList() +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift new file mode 100644 index 0000000..2a69bd3 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift @@ -0,0 +1,36 @@ +// +// FriendlyFlixApp.swift +// FriendlyFlix +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Firebase +import FirebaseAuth +import SwiftUI + +@main +struct FriendlyFlixApp: App { + init() { + FirebaseApp.configure() + Auth.auth().signInAnonymously() + } + + var body: some Scene { + WindowGroup { + MoviesList() + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift new file mode 100644 index 0000000..4f3917d --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -0,0 +1,47 @@ +// +// Color+Hex.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +extension Color { + init(hex: String, opacity: Double = 1.0) { + var hexFormatted: String = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + .uppercased() + + if hexFormatted.hasPrefix("#") { + hexFormatted = String(hexFormatted.dropFirst()) + } + + assert(hexFormatted.count == 6 || hexFormatted.count == 8, "Invalid hex code") + + var rgbValue: UInt64 = 0 + Scanner(string: hexFormatted).scanHexInt64(&rgbValue) + + var alpha: Double = opacity + if hexFormatted.count == 8 { + alpha = Double((rgbValue & 0xFF00_0000) >> 24) / 255.0 + } + + let red = Double((rgbValue & 0x00FF_0000) >> 16) / 255.0 + let green = Double((rgbValue & 0x0000_FF00) >> 8) / 255.0 + let blue = Double(rgbValue & 0x0000_00FF) / 255.0 + + self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha) // Use alpha instead of opacity + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift new file mode 100644 index 0000000..547c0c3 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift @@ -0,0 +1,26 @@ +// +// String+Placeholder.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String { + static func placeholder(length: Int) -> String { + String(Array(repeating: "X", count: length)) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift new file mode 100644 index 0000000..a744357 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -0,0 +1,31 @@ +// +// String+StringInterpolation.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String.StringInterpolation { + mutating func appendInterpolation(format value: Int, using style: NumberFormatter.Style) { + let formatter = NumberFormatter() + formatter.numberStyle = style + + if let result = formatter.string(from: value as NSNumber) { + appendLiteral(result) + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift new file mode 100644 index 0000000..475f4c0 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift @@ -0,0 +1,28 @@ +// +// View+Extensions.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import SwiftUI + +extension View { + @ViewBuilder + func redacted(if condition: @autoclosure () -> Bool) -> some View { + redacted(reason: condition() ? .placeholder : []) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift new file mode 100644 index 0000000..921120a --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift @@ -0,0 +1,30 @@ +// +// FriendlyFlixTests.swift +// FriendlyFlixTests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Testing + +@testable import FriendlyFlix + +struct FriendlyFlixTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift new file mode 100644 index 0000000..6a6fea6 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift @@ -0,0 +1,55 @@ +// +// FriendlyFlixUITests.swift +// FriendlyFlixUITests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import XCTest + +final class FriendlyFlixUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift new file mode 100644 index 0000000..d0b7ca7 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift @@ -0,0 +1,45 @@ +// +// FriendlyFlixUITestsLaunchTests.swift +// FriendlyFlixUITests +// +// Created by Peter Friese on 27.08.24. +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import XCTest + +final class FriendlyFlixUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift new file mode 100644 index 0000000..465913e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]) + ], + dependencies: [ + .package(name: "FirebaseDataConnect", path: "../../../../") + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "FirebaseDataConnect") + ], + path: "Sources" + ) + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift new file mode 100644 index 0000000..efa1322 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -0,0 +1,93 @@ +import Foundation +import FirebaseDataConnect + + + + + + + +public extension DataConnect { + + static var friendlyFlixConnector: FriendlyFlixConnector = { + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig) + return FriendlyFlixConnector(dataConnect: dc) + }() + +} + +public class FriendlyFlixConnector { + + var dataConnect: DataConnect + + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + + // init operations + self.createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) + self.deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) + self.deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) + self.deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.searchMovieDescriptionUsingL2similarityQuery = SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) + self.moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) + self.searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) + self.searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) + self.getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + + } + + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) + } + + // MARK: Operations +public let createMovieMutation: CreateMovieMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addFavoritedActorMutation: AddFavoritedActorMutation +public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation +public let addReviewMutation: AddReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let upsertUserMutation: UpsertUserMutation +public let updateMovieMutation: UpdateMovieMutation +public let deleteMovieMutation: DeleteMovieMutation +public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation +public let listMoviesQuery: ListMoviesQuery +public let listMoviesByGenreQuery: ListMoviesByGenreQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery +public let searchAllQuery: SearchAllQuery +public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let listMoviesByTagQuery: ListMoviesByTagQuery +public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery +public let searchMovieOrQuery: SearchMovieOrQuery +public let searchMovieAndQuery: SearchMovieAndQuery +public let getFavoriteActorsQuery: GetFavoriteActorsQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery + + +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift new file mode 100644 index 0000000..59be0f9 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -0,0 +1,501 @@ +import Foundation + +import FirebaseDataConnect + + + +public struct ActorKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension ActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension ActorKey : Equatable { + public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension ActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct FavoriteActorKey { + + public private(set) var userId: String + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case actorId + + } +} + +extension FavoriteActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension FavoriteActorKey : Equatable { + public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension FavoriteActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.actorId) + + } +} + + + +public struct FavoriteMovieKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension FavoriteMovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension FavoriteMovieKey : Equatable { + public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension FavoriteMovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct MovieActorKey { + + public private(set) var movieId: UUID + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case movieId + + case actorId + + } +} + +extension MovieActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension MovieActorKey : Equatable { + public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + + if lhs.movieId != rhs.movieId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension MovieActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + + } +} + + + +public struct MovieMetadataKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieMetadataKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieMetadataKey : Equatable { + public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieMetadataKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct MovieKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieKey : Equatable { + public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct ReviewKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension ReviewKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension ReviewKey : Equatable { + public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension ReviewKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct UserKey { + + public private(set) var id: String + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension UserKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension UserKey : Equatable { + public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension UserKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift new file mode 100644 index 0000000..dde7e2e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -0,0 +1,6319 @@ +import FirebaseDataConnect +import Foundation + + + + + + + + + + + + + + + + + + + + +// MARK: Common Enums + +public enum OrderDirection: String, Codable { + case ASC = "ASC" + case DESC = "DESC" + } + +// End enum definitions + + + + + + + + + +public class CreateMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "CreateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +title: String + + + + public var +releaseYear: Int + + + + public var +genre: String + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + + public var +imageUrl: String + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +title: String +, + +releaseYear: Int +, + +genre: String +, + +imageUrl: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(title, forKey: .title, container: &container) + + + + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_insert: MovieKey + + } + + public func ref( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddFavoritedMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_upsert: FavoriteMovieKey + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteFavoritedMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_delete: FavoriteMovieKey? + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddFavoritedActorMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_upsert: FavoriteActorKey + + } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteFavoritedActorMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_delete: FavoriteActorKey? + + } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class AddReviewMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "AddReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String + + + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String + + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + case rating + + case reviewText + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_upsert: ReviewKey + + } + + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteReviewMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_delete: ReviewKey? + + } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class UpsertUserMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "UpsertUser" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +username: String + + + + + + public init ( + +username: String + + + ) { + self.username = username + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.username == rhs.username + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} + + enum CodingKeys: String, CodingKey { + + case username + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(username, forKey: .username, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +user_upsert: UserKey + + } + + public func ref( + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class UpdateMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "UpdateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + @OptionalVariable + public var +title: String? + + + @OptionalVariable + public var +releaseYear: Int? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + @OptionalVariable + public var +imageUrl: String? + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +id: UUID + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.id = id + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) + } + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + } + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_update: MovieKey? + + } + + public func ref( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +movie_delete: MovieKey? + + } + + public func ref( + +id: UUID + + ) -> MutationRef { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class DeleteUnpopularMoviesMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "DeleteUnpopularMovies" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +minRating: Double + + + + + + public init ( + +minRating: Double + + + ) { + self.minRating = minRating + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + } + + } + + public struct Data: Decodable { + + +public var +movie_deleteMany: Int + + } + + public func ref( + +minRating: Double + + ) -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +minRating: Double + + ) async throws -> OperationResult { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + + return try await ref.execute() + + } +} + + + + + + +public class ListMoviesQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(limit) + +} + + enum CodingKeys: String, CodingKey { + + case limit + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByGenreQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByGenre" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +genre: String + + + + + + public init ( + +genre: String + + + ) { + self.genre = genre + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostPopularKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostPopular: [MovieMostPopular] + + + + + +public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostRecentKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostRecent: [MovieMostRecent] + + } + + public func ref( + +genre: String + + ) -> QueryRefObservation { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +genre: String + + ) async throws -> OperationResult { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetMovieByIdQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetMovieById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + + +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] + + + + + +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + +public var +rating: Int? + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetActorByIdQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetActorById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + + +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] + + + + + +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetCurrentUserQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetCurrentUser" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewDate: LocalDate + + + +public var +reviewText: String? + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + + +public struct FavoriteMovieFavoriteMovies: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + +public struct FavoriteActorFavoriteActors: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favoriteActors: [FavoriteActorFavoriteActors] + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + case favoriteActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetIfFavoritedMovieQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetIfFavoritedMovie" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteMovie: Decodable { + + + +public var +movieId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + + } +} +public var +favorite_movie: FavoriteMovie? + + } + + public func ref( + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetIfFavoritedActorQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetIfFavoritedActor" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteActor: Decodable { + + + +public var +actorId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + + } +} +public var +favorite_actor: FavoriteActor? + + } + + public func ref( + +actorId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchAllQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchAll" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? + + + + public var +minYear: Int + + + + public var +maxYear: Int + + + + public var +minRating: Double + + + + public var +maxRating: Double + + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case input + + case minYear + + case maxYear + + case minRating + + case maxRating + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) + + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) + + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] + + + + + +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] + + + + + +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] + + + + + +public struct ReviewReviewsMatchingText: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } + + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieDescriptionUsingL2similarityQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +query: String + + + + + + public init ( + +query: String + + + ) { + self.query = query + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.query == rhs.query + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(query) + +} + + enum CodingKeys: String, CodingKey { + + case query + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(query, forKey: .query, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +description: String? + + + +public var +tags: [String]? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case description + + case tags + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies_descriptionEmbedding_similarity: [Movie] + + } + + public func ref( + +query: String + + ) -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +query: String + + ) async throws -> OperationResult { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByPartialTitleQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByPartialTitle" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +input: String + + + + + + public init ( + +input: String + + + ) { + self.input = input + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(input, forKey: .input, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + +input: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +input: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class ListMoviesByTagQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByTag" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +tag: String + + + + + + public init ( + +tag: String + + + ) { + self.tag = tag + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.tag == rhs.tag + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(tag) + +} + + enum CodingKeys: String, CodingKey { + + case tag + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(tag, forKey: .tag, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case genre + + case rating + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + +tag: String + + ) -> QueryRefObservation { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +tag: String + + ) async throws -> OperationResult { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class MoviesByReleaseYearQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "MoviesByReleaseYear" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +min: Int? + + + @OptionalVariable + public var +max: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.min == rhs.min && + lhs.max == rhs.max + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(min) + + hasher.combine(max) + +} + + enum CodingKeys: String, CodingKey { + + case min + + case max + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) + } + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieOrQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieOr" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieAndQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "SearchMovieAnd" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } + + public func ref( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetFavoriteActorsQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetFavoriteActors" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteActor: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favorite_actors_on_user: [FavoriteActor] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_actors_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetUserFavoriteMoviesQuery{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetUserFavoriteMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteMovie: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favorite_movies_on_user: [FavoriteMovie] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_movies_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift new file mode 100644 index 0000000..77520f6 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift @@ -0,0 +1,34 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v15), + .macOS(.v10_15), + .watchOS(.v6), + .tvOS(.v13) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/firebase-ios-sdk", branch: "dataconnect"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"firebase-ios-sdk") + ], + path: "Sources" + ) + ] +) + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift new file mode 100644 index 0000000..a04f999 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -0,0 +1,33 @@ +import Foundation +import FirebaseDataConnect + + + + + + + +public extension DataConnect { + + static var friendlyFlixClient: FriendlyFlixClient = { + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixClient.connectorConfig) + return FriendlyFlixClient(dataConnect: dc) + }() + +} + +public class FriendlyFlixClient { + + var dataConnect: DataConnect + + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) + } + +} diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift new file mode 100644 index 0000000..59be0f9 --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -0,0 +1,501 @@ +import Foundation + +import FirebaseDataConnect + + + +public struct ActorKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension ActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension ActorKey : Equatable { + public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension ActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct FavoriteActorKey { + + public private(set) var userId: String + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case actorId + + } +} + +extension FavoriteActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension FavoriteActorKey : Equatable { + public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension FavoriteActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.actorId) + + } +} + + + +public struct FavoriteMovieKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension FavoriteMovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension FavoriteMovieKey : Equatable { + public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension FavoriteMovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct MovieActorKey { + + public private(set) var movieId: UUID + + public private(set) var actorId: UUID + + + enum CodingKeys: String, CodingKey { + + case movieId + + case actorId + + } +} + +extension MovieActorKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } +} + +extension MovieActorKey : Equatable { + public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + + if lhs.movieId != rhs.movieId { + return false + } + + if lhs.actorId != rhs.actorId { + return false + } + + return true + } +} + +extension MovieActorKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + + } +} + + + +public struct MovieMetadataKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieMetadataKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieMetadataKey : Equatable { + public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieMetadataKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct MovieKey { + + public private(set) var id: UUID + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension MovieKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension MovieKey : Equatable { + public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension MovieKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + + +public struct ReviewKey { + + public private(set) var userId: String + + public private(set) var movieId: UUID + + + enum CodingKeys: String, CodingKey { + + case userId + + case movieId + + } +} + +extension ReviewKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } +} + +extension ReviewKey : Equatable { + public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + + if lhs.userId != rhs.userId { + return false + } + + if lhs.movieId != rhs.movieId { + return false + } + + return true + } +} + +extension ReviewKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + + } +} + + + +public struct UserKey { + + public private(set) var id: String + + + enum CodingKeys: String, CodingKey { + + case id + + } +} + +extension UserKey : Codable { + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } +} + +extension UserKey : Equatable { + public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + + if lhs.id != rhs.id { + return false + } + + return true + } +} + +extension UserKey : Hashable { + public func hash(into hasher: inout Hasher) { + + hasher.combine(self.id) + + } +} + + diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift new file mode 100644 index 0000000..9bfd1ca --- /dev/null +++ b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -0,0 +1,5813 @@ +import FirebaseDataConnect +import Foundation + + + + + + + + + + + + + + + + + + + + + + +// MARK: Connector Client Extension +public extension FriendlyFlixClient { + + + + + func createMovieMutationRef( + + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + let request = MutationRequest(operationName: "CreateMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:CreateMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func addFavoritedMovieMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "AddFavoritedMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteFavoritedMovieMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "DeleteFavoritedMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func addFavoritedActorMutationRef( + + +actorId: UUID + + ) -> MutationRef { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + let request = MutationRequest(operationName: "AddFavoritedActor", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedActorMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteFavoritedActorMutationRef( + + +actorId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + let request = MutationRequest(operationName: "DeleteFavoritedActor", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedActorMutation.Data.self) + return ref as! MutationRef + } + + + + + func addReviewMutationRef( + + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + let request = MutationRequest(operationName: "AddReview", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:AddReviewMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteReviewMutationRef( + + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + let request = MutationRequest(operationName: "DeleteReview", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteReviewMutation.Data.self) + return ref as! MutationRef + } + + + + + func upsertUserMutationRef( + + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + let request = MutationRequest(operationName: "UpsertUser", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:UpsertUserMutation.Data.self) + return ref as! MutationRef + } + + + + + func updateMovieMutationRef( + + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + let request = MutationRequest(operationName: "UpdateMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:UpdateMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteMovieMutationRef( + + +id: UUID + + ) -> MutationRef { + var variables = DeleteMovieMutation.Variables(id:id) + + let request = MutationRequest(operationName: "DeleteMovie", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteMovieMutation.Data.self) + return ref as! MutationRef + } + + + + + func deleteUnpopularMoviesMutationRef( + + +minRating: Double + + ) -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + let request = MutationRequest(operationName: "DeleteUnpopularMovies", variables: variables) + let ref = dataConnect.mutation(request: request, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + return ref as! MutationRef + } + + + + + func listMoviesQueryRef( + + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "ListMovies", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByGenreQueryRef( + + +genre: String + + ) -> QueryRefObservation { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + let request = QueryRequest(operationName: "ListMoviesByGenre", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getMovieByIdQueryRef( + + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + let request = QueryRequest(operationName: "GetMovieById", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getActorByIdQueryRef( + + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + let request = QueryRequest(operationName: "GetActorById", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getCurrentUserQueryRef( + + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let request = QueryRequest(operationName: "GetCurrentUser", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getIfFavoritedMovieQueryRef( + + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + let request = QueryRequest(operationName: "GetIfFavoritedMovie", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getIfFavoritedActorQueryRef( + + +actorId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + let request = QueryRequest(operationName: "GetIfFavoritedActor", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchAllQueryRef( + + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchAll", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieDescriptionUsingL2similarityQueryRef( + + +query: String + + ) -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + let request = QueryRequest(operationName: "SearchMovieDescriptionUsingL2Similarity", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByPartialTitleQueryRef( + + +input: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + let request = QueryRequest(operationName: "ListMoviesByPartialTitle", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func listMoviesByTagQueryRef( + + +tag: String + + ) -> QueryRefObservation { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + let request = QueryRequest(operationName: "ListMoviesByTag", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func moviesByReleaseYearQueryRef( + + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "MoviesByReleaseYear", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieOrQueryRef( + + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchMovieOr", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func searchMovieAndQueryRef( + + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + let request = QueryRequest(operationName: "SearchMovieAnd", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getFavoriteActorsQueryRef( + + + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + let request = QueryRequest(operationName: "GetFavoriteActors", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + + + + func getUserFavoriteMoviesQueryRef( + + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let request = QueryRequest(operationName: "GetUserFavoriteMovies", variables: variables) + let ref = dataConnect.query(request: request, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + +} + + + + + + +public enum CreateMovieMutation{ + + public static let OperationName = "CreateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +title: String + + + + public var +releaseYear: Int + + + + public var +genre: String + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + + public var +imageUrl: String + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +title: String +, + +releaseYear: Int +, + +genre: String +, + +imageUrl: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(title, forKey: .title, container: &container) + + + + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_insert: MovieKey + + } +} + + + + + + +public enum AddFavoritedMovieMutation{ + + public static let OperationName = "AddFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_upsert: FavoriteMovieKey + + } +} + + + + + + +public enum DeleteFavoritedMovieMutation{ + + public static let OperationName = "DeleteFavoritedMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_movie_delete: FavoriteMovieKey? + + } +} + + + + + + +public enum AddFavoritedActorMutation{ + + public static let OperationName = "AddFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_upsert: FavoriteActorKey + + } +} + + + + + + +public enum DeleteFavoritedActorMutation{ + + public static let OperationName = "DeleteFavoritedActor" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +favorite_actor_delete: FavoriteActorKey? + + } +} + + + + + + +public enum AddReviewMutation{ + + public static let OperationName = "AddReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String + + + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String + + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + case rating + + case reviewText + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_upsert: ReviewKey + + } +} + + + + + + +public enum DeleteReviewMutation{ + + public static let OperationName = "DeleteReview" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +review_delete: ReviewKey? + + } +} + + + + + + +public enum UpsertUserMutation{ + + public static let OperationName = "UpsertUser" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +username: String + + + + + + public init ( + +username: String + + + ) { + self.username = username + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.username == rhs.username + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} + + enum CodingKeys: String, CodingKey { + + case username + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(username, forKey: .username, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +user_upsert: UserKey + + } +} + + + + + + +public enum UpdateMovieMutation{ + + public static let OperationName = "UpdateMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + @OptionalVariable + public var +title: String? + + + @OptionalVariable + public var +releaseYear: Int? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +rating: Double? + + + @OptionalVariable + public var +description: String? + + + @OptionalVariable + public var +imageUrl: String? + + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +id: UUID + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.id = id + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case releaseYear + + case genre + + case rating + + case description + + case imageUrl + + case tags + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) + } + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) + } + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) + } + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + } + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + +public var +movie_update: MovieKey? + + } +} + + + + + + +public enum DeleteMovieMutation{ + + public static let OperationName = "DeleteMovie" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + +public var +movie_delete: MovieKey? + + } +} + + + + + + +public enum DeleteUnpopularMoviesMutation{ + + public static let OperationName = "DeleteUnpopularMovies" + + public typealias Ref = MutationRef + + public struct Variables: OperationVariable { + + + public var +minRating: Double + + + + + + public init ( + +minRating: Double + + + ) { + self.minRating = minRating + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + } + + } + + public struct Data: Decodable { + + +public var +movie_deleteMany: Int + + } +} + + + + + + +public enum ListMoviesQuery{ + + public static let OperationName = "ListMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(limit) + +} + + enum CodingKeys: String, CodingKey { + + case limit + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum ListMoviesByGenreQuery{ + + public static let OperationName = "ListMoviesByGenre" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +genre: String + + + + + + public init ( + +genre: String + + + ) { + self.genre = genre + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostPopularKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostPopular: [MovieMostPopular] + + + + + +public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +rating: Double? + + + +public var +tags: [String]? + + + + public var movieMostRecentKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostRecent: [MovieMostRecent] + + } +} + + + + + + +public enum GetMovieByIdQuery{ + + public static let OperationName = "GetMovieById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + + +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] + + + + + +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + +public var +rating: Int? + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? + + } +} + + + + + + +public enum GetActorByIdQuery{ + + public static let OperationName = "GetActorById" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.id == rhs.id + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} + + enum CodingKeys: String, CodingKey { + + case id + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + + +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] + + + + + +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? + + + +public var +imageUrl: String + + + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? + + } +} + + + + + + +public enum GetCurrentUserQuery{ + + public static let OperationName = "GetCurrentUser" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + + +public struct ReviewReviews: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewDate: LocalDate + + + +public var +reviewText: String? + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + + +public struct FavoriteMovieFavoriteMovies: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + +public struct FavoriteActorFavoriteActors: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favoriteActors: [FavoriteActorFavoriteActors] + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + case favoriteActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) + + + } +} +public var +user: User? + + } +} + + + + + + +public enum GetIfFavoritedMovieQuery{ + + public static let OperationName = "GetIfFavoritedMovie" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteMovie: Decodable { + + + +public var +movieId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case movieId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + + } +} +public var +favorite_movie: FavoriteMovie? + + } +} + + + + + + +public enum GetIfFavoritedActorQuery{ + + public static let OperationName = "GetIfFavoritedActor" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.actorId == rhs.actorId + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct FavoriteActor: Decodable { + + + +public var +actorId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case actorId + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + + } +} +public var +favorite_actor: FavoriteActor? + + } +} + + + + + + +public enum SearchAllQuery{ + + public static let OperationName = "SearchAll" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? + + + + public var +minYear: Int + + + + public var +maxYear: Int + + + + public var +minRating: Double + + + + public var +maxRating: Double + + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + + enum CodingKeys: String, CodingKey { + + case input + + case minYear + + case maxYear + + case minRating + + case maxRating + + case genre + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) + + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) + + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] + + + + + +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] + + + + + +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] + + + + + +public struct ReviewReviewsMatchingText: Decodable { + + + +public var +id: UUID + + + +public var +rating: Int? + + + +public var +reviewText: String? + + + +public var +reviewDate: LocalDate + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } +} + + + + + + +public enum SearchMovieDescriptionUsingL2similarityQuery{ + + public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +query: String + + + + + + public init ( + +query: String + + + ) { + self.query = query + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.query == rhs.query + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(query) + +} + + enum CodingKeys: String, CodingKey { + + case query + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(query, forKey: .query, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +description: String? + + + +public var +tags: [String]? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case description + + case tags + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies_descriptionEmbedding_similarity: [Movie] + + } +} + + + + + + +public enum ListMoviesByPartialTitleQuery{ + + public static let OperationName = "ListMoviesByPartialTitle" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +input: String + + + + + + public init ( + +input: String + + + ) { + self.input = input + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(input, forKey: .input, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum ListMoviesByTagQuery{ + + public static let OperationName = "ListMoviesByTag" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +tag: String + + + + + + public init ( + +tag: String + + + ) { + self.tag = tag + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.tag == rhs.tag + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(tag) + +} + + enum CodingKeys: String, CodingKey { + + case tag + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(tag, forKey: .tag, container: &container) + + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +genre: String? + + + +public var +rating: Double? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case genre + + case rating + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum MoviesByReleaseYearQuery{ + + public static let OperationName = "MoviesByReleaseYear" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +min: Int? + + + @OptionalVariable + public var +max: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.min == rhs.min && + lhs.max == rhs.max + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(min) + + hasher.combine(max) + +} + + enum CodingKeys: String, CodingKey { + + case min + + case max + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) + } + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum SearchMovieOrQuery{ + + public static let OperationName = "SearchMovieOr" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum SearchMovieAndQuery{ + + public static let OperationName = "SearchMovieAnd" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + @OptionalVariable + public var +minRating: Double? + + + @OptionalVariable + public var +maxRating: Double? + + + @OptionalVariable + public var +genre: String? + + + @OptionalVariable + public var +tag: String? + + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} + + enum CodingKeys: String, CodingKey { + + case minRating + + case maxRating + + case genre + + case tag + + case input + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + } + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + } + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) + } + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) + } + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) + } + + } + + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +rating: Double? + + + +public var +title: String + + + +public var +imageUrl: String + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] + + } +} + + + + + + +public enum GetFavoriteActorsQuery{ + + public static let OperationName = "GetFavoriteActors" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteActor: Decodable { + + + + + +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favorite_actors_on_user: [FavoriteActor] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_actors_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + + } +} +public var +user: User? + + } +} + + + + + + +public enum GetUserFavoriteMoviesQuery{ + + public static let OperationName = "GetUserFavoriteMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteMovie: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favorite_movies_on_user: [FavoriteMovie] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_movies_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + + } +} +public var +user: User? + + } +} + + diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql new file mode 100644 index 0000000..8b418e9 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql @@ -0,0 +1,20 @@ +extend type FavoriteActor { + userId: String! @fdc_generated(from: "FavoriteActor.user", purpose: IMPLICIT_REF_FIELD) + actorId: UUID! @fdc_generated(from: "FavoriteActor.actor", purpose: IMPLICIT_REF_FIELD) +} +extend type FavoriteMovie { + userId: String! @fdc_generated(from: "FavoriteMovie.user", purpose: IMPLICIT_REF_FIELD) + movieId: UUID! @fdc_generated(from: "FavoriteMovie.movie", purpose: IMPLICIT_REF_FIELD) +} +extend type MovieActor { + movieId: UUID! @fdc_generated(from: "MovieActor.movie", purpose: IMPLICIT_REF_FIELD) + actorId: UUID! @fdc_generated(from: "MovieActor.actor", purpose: IMPLICIT_REF_FIELD) +} +extend type MovieMetadata { + id: UUID! @default(expr: "uuidV4()") @fdc_generated(from: "MovieMetadata", purpose: IMPLICIT_KEY_FIELD) + movieId: UUID! @fdc_generated(from: "MovieMetadata.movie", purpose: IMPLICIT_REF_FIELD) +} +extend type Review { + movieId: UUID! @fdc_generated(from: "Review.movie", purpose: IMPLICIT_REF_FIELD) + userId: String! @fdc_generated(from: "Review.user", purpose: IMPLICIT_REF_FIELD) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql new file mode 100644 index 0000000..d0e06fe --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql @@ -0,0 +1,272 @@ +scalar Actor_Key +scalar FavoriteActor_Key +scalar FavoriteMovie_Key +scalar Movie_Key +scalar MovieActor_Key +scalar MovieMetadata_Key +scalar Review_Key +scalar User_Key +input Actor_Data { + id: UUID + id_expr: UUID_Expr + imageUrl: String + imageUrl_expr: String_Expr + name: String + name_expr: String_Expr +} +input Actor_Filter { + _and: [Actor_Filter!] + _not: Actor_Filter + _or: [Actor_Filter!] + id: UUID_Filter + imageUrl: String_Filter + name: String_Filter + favorite_actors_on_actor: FavoriteActor_ListFilter + movieActors_on_actor: MovieActor_ListFilter + movies_via_MovieActor: Movie_ListFilter + users_via_FavoriteActor: User_ListFilter +} +input Actor_ListFilter { + count: Int_Filter = {gt:0} + exist: Actor_Filter +} +input Actor_Order { + id: OrderDirection + imageUrl: OrderDirection + name: OrderDirection +} +input FavoriteActor_Data { + userId: String + userId_expr: String_Expr + actorId: UUID + actorId_expr: UUID_Expr + actor: Actor_Key + user: User_Key +} +input FavoriteActor_Filter { + _and: [FavoriteActor_Filter!] + _not: FavoriteActor_Filter + _or: [FavoriteActor_Filter!] + userId: String_Filter + actorId: UUID_Filter + actor: Actor_Filter + user: User_Filter +} +input FavoriteActor_ListFilter { + count: Int_Filter = {gt:0} + exist: FavoriteActor_Filter +} +input FavoriteActor_Order { + userId: OrderDirection + actorId: OrderDirection + actor: Actor_Order + user: User_Order +} +input FavoriteMovie_Data { + userId: String + userId_expr: String_Expr + movieId: UUID + movieId_expr: UUID_Expr + movie: Movie_Key + user: User_Key +} +input FavoriteMovie_Filter { + _and: [FavoriteMovie_Filter!] + _not: FavoriteMovie_Filter + _or: [FavoriteMovie_Filter!] + userId: String_Filter + movieId: UUID_Filter + movie: Movie_Filter + user: User_Filter +} +input FavoriteMovie_ListFilter { + count: Int_Filter = {gt:0} + exist: FavoriteMovie_Filter +} +input FavoriteMovie_Order { + userId: OrderDirection + movieId: OrderDirection + movie: Movie_Order + user: User_Order +} +input Movie_Data { + id: UUID + id_expr: UUID_Expr + description: String + description_expr: String_Expr + descriptionEmbedding: Vector + descriptionEmbedding_embed: Vector_Embed + genre: String + genre_expr: String_Expr + imageUrl: String + imageUrl_expr: String_Expr + rating: Float + releaseYear: Int + tags: [String!] + title: String + title_expr: String_Expr +} +input Movie_Filter { + _and: [Movie_Filter!] + _not: Movie_Filter + _or: [Movie_Filter!] + id: UUID_Filter + description: String_Filter + descriptionEmbedding: Vector_Filter + genre: String_Filter + imageUrl: String_Filter + rating: Float_Filter + releaseYear: Int_Filter + tags: String_ListFilter + title: String_Filter + favorite_movies_on_movie: FavoriteMovie_ListFilter + movieActors_on_movie: MovieActor_ListFilter + movieMetadatas_on_movie: MovieMetadata_ListFilter + reviews_on_movie: Review_ListFilter + actors_via_MovieActor: Actor_ListFilter + users_via_FavoriteMovie: User_ListFilter + users_via_Review: User_ListFilter +} +input Movie_ListFilter { + count: Int_Filter = {gt:0} + exist: Movie_Filter +} +input Movie_Order { + id: OrderDirection + description: OrderDirection + descriptionEmbedding: OrderDirection + genre: OrderDirection + imageUrl: OrderDirection + rating: OrderDirection + releaseYear: OrderDirection + title: OrderDirection +} +input MovieActor_Data { + movieId: UUID + movieId_expr: UUID_Expr + actorId: UUID + actorId_expr: UUID_Expr + actor: Actor_Key + movie: Movie_Key + role: String + role_expr: String_Expr +} +input MovieActor_Filter { + _and: [MovieActor_Filter!] + _not: MovieActor_Filter + _or: [MovieActor_Filter!] + movieId: UUID_Filter + actorId: UUID_Filter + actor: Actor_Filter + movie: Movie_Filter + role: String_Filter +} +input MovieActor_ListFilter { + count: Int_Filter = {gt:0} + exist: MovieActor_Filter +} +input MovieActor_Order { + movieId: OrderDirection + actorId: OrderDirection + actor: Actor_Order + movie: Movie_Order + role: OrderDirection +} +input MovieMetadata_Data { + id: UUID + id_expr: UUID_Expr + movieId: UUID + movieId_expr: UUID_Expr + movie: Movie_Key + director: String + director_expr: String_Expr +} +input MovieMetadata_Filter { + _and: [MovieMetadata_Filter!] + _not: MovieMetadata_Filter + _or: [MovieMetadata_Filter!] + id: UUID_Filter + movieId: UUID_Filter + movie: Movie_Filter + director: String_Filter +} +input MovieMetadata_ListFilter { + count: Int_Filter = {gt:0} + exist: MovieMetadata_Filter +} +input MovieMetadata_Order { + id: OrderDirection + movieId: OrderDirection + movie: Movie_Order + director: OrderDirection +} +input Review_Data { + movieId: UUID + movieId_expr: UUID_Expr + userId: String + userId_expr: String_Expr + movie: Movie_Key + user: User_Key + id: UUID + id_expr: UUID_Expr + rating: Int + reviewDate: Date + reviewDate_date: Date_Relative + reviewDate_expr: Date_Expr + reviewText: String + reviewText_expr: String_Expr +} +input Review_Filter { + _and: [Review_Filter!] + _not: Review_Filter + _or: [Review_Filter!] + movieId: UUID_Filter + userId: String_Filter + movie: Movie_Filter + user: User_Filter + id: UUID_Filter + rating: Int_Filter + reviewDate: Date_Filter + reviewText: String_Filter +} +input Review_ListFilter { + count: Int_Filter = {gt:0} + exist: Review_Filter +} +input Review_Order { + movieId: OrderDirection + userId: OrderDirection + movie: Movie_Order + user: User_Order + id: OrderDirection + rating: OrderDirection + reviewDate: OrderDirection + reviewText: OrderDirection +} +input User_Data { + id: String + id_expr: String_Expr + username: String + username_expr: String_Expr +} +input User_Filter { + _and: [User_Filter!] + _not: User_Filter + _or: [User_Filter!] + id: String_Filter + username: String_Filter + favorite_actors_on_user: FavoriteActor_ListFilter + favorite_movies_on_user: FavoriteMovie_ListFilter + reviews_on_user: Review_ListFilter + actors_via_FavoriteActor: Actor_ListFilter + movies_via_FavoriteMovie: Movie_ListFilter + movies_via_Review: Movie_ListFilter +} +input User_ListFilter { + count: Int_Filter = {gt:0} + exist: User_Filter +} +input User_Order { + id: OrderDirection + username: OrderDirection +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql new file mode 100644 index 0000000..335961a --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql @@ -0,0 +1,258 @@ +extend type Mutation { + """ + Insert a single Actor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: INSERT_SINGLE) + """ + Insert a single FavoriteActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_actor_insert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: INSERT_SINGLE) + """ + Insert a single FavoriteMovie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_SINGLE) + """ + Insert a single Movie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: INSERT_SINGLE) + """ + Insert a single MovieActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: INSERT_SINGLE) + """ + Insert a single MovieMetadata into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: INSERT_SINGLE) + """ + Insert a single Review into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: INSERT_SINGLE) + """ + Insert a single User into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: INSERT_SINGLE) + """ + Insert Actor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insertMany(data: [Actor_Data!]!): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: INSERT_MULTIPLE) + """ + Insert FavoriteActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_actor_insertMany(data: [FavoriteActor_Data!]!): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: INSERT_MULTIPLE) + """ + Insert FavoriteMovie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insertMany(data: [FavoriteMovie_Data!]!): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_MULTIPLE) + """ + Insert Movie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insertMany(data: [Movie_Data!]!): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: INSERT_MULTIPLE) + """ + Insert MovieActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insertMany(data: [MovieActor_Data!]!): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: INSERT_MULTIPLE) + """ + Insert MovieMetadata entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insertMany(data: [MovieMetadata_Data!]!): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: INSERT_MULTIPLE) + """ + Insert Review entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insertMany(data: [Review_Data!]!): [Review_Key!]! @fdc_generated(from: "Review", purpose: INSERT_MULTIPLE) + """ + Insert User entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insertMany(data: [User_Data!]!): [User_Key!]! @fdc_generated(from: "User", purpose: INSERT_MULTIPLE) + """ + Insert or update a single Actor into the table, based on the primary key. Returns the key of the newly inserted Actor. + """ + actor_upsert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: UPSERT_SINGLE) + """ + Insert or update a single FavoriteActor into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. + """ + favorite_actor_upsert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_SINGLE) + """ + Insert or update a single FavoriteMovie into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. + """ + favorite_movie_upsert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_SINGLE) + """ + Insert or update a single Movie into the table, based on the primary key. Returns the key of the newly inserted Movie. + """ + movie_upsert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: UPSERT_SINGLE) + """ + Insert or update a single MovieActor into the table, based on the primary key. Returns the key of the newly inserted MovieActor. + """ + movieActor_upsert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: UPSERT_SINGLE) + """ + Insert or update a single MovieMetadata into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. + """ + movieMetadata_upsert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_SINGLE) + """ + Insert or update a single Review into the table, based on the primary key. Returns the key of the newly inserted Review. + """ + review_upsert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: UPSERT_SINGLE) + """ + Insert or update a single User into the table, based on the primary key. Returns the key of the newly inserted User. + """ + user_upsert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: UPSERT_SINGLE) + """ + Insert or update Actor entries into the table, based on the primary key. Returns the key of the newly inserted Actor. + """ + actor_upsertMany(data: [Actor_Data!]): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: UPSERT_MULTIPLE) + """ + Insert or update FavoriteActor entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. + """ + favorite_actor_upsertMany(data: [FavoriteActor_Data!]): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_MULTIPLE) + """ + Insert or update FavoriteMovie entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. + """ + favorite_movie_upsertMany(data: [FavoriteMovie_Data!]): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_MULTIPLE) + """ + Insert or update Movie entries into the table, based on the primary key. Returns the key of the newly inserted Movie. + """ + movie_upsertMany(data: [Movie_Data!]): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: UPSERT_MULTIPLE) + """ + Insert or update MovieActor entries into the table, based on the primary key. Returns the key of the newly inserted MovieActor. + """ + movieActor_upsertMany(data: [MovieActor_Data!]): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: UPSERT_MULTIPLE) + """ + Insert or update MovieMetadata entries into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. + """ + movieMetadata_upsertMany(data: [MovieMetadata_Data!]): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_MULTIPLE) + """ + Insert or update Review entries into the table, based on the primary key. Returns the key of the newly inserted Review. + """ + review_upsertMany(data: [Review_Data!]): [Review_Key!]! @fdc_generated(from: "Review", purpose: UPSERT_MULTIPLE) + """ + Insert or update User entries into the table, based on the primary key. Returns the key of the newly inserted User. + """ + user_upsertMany(data: [User_Data!]): [User_Key!]! @fdc_generated(from: "User", purpose: UPSERT_MULTIPLE) + """ + Update a single Actor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + actor_update(id: UUID, key: Actor_Key, data: Actor_Data!): Actor_Key @fdc_generated(from: "Actor", purpose: UPDATE_SINGLE) + """ + Update a single FavoriteActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + favorite_actor_update(key: FavoriteActor_Key, data: FavoriteActor_Data!): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: UPDATE_SINGLE) + """ + Update a single FavoriteMovie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + favorite_movie_update(key: FavoriteMovie_Key, data: FavoriteMovie_Data!): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_SINGLE) + """ + Update a single Movie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movie_update(id: UUID, key: Movie_Key, data: Movie_Data!): Movie_Key @fdc_generated(from: "Movie", purpose: UPDATE_SINGLE) + """ + Update a single MovieActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movieActor_update(key: MovieActor_Key, data: MovieActor_Data!): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: UPDATE_SINGLE) + """ + Update a single MovieMetadata based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + movieMetadata_update(id: UUID, key: MovieMetadata_Key, data: MovieMetadata_Data!): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: UPDATE_SINGLE) + """ + Update a single Review based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + review_update(key: Review_Key, data: Review_Data!): Review_Key @fdc_generated(from: "Review", purpose: UPDATE_SINGLE) + """ + Update a single User based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. + """ + user_update(id: String, id_expr: String_Expr, key: User_Key, data: User_Data!): User_Key @fdc_generated(from: "User", purpose: UPDATE_SINGLE) + """ + Update Actor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + actor_updateMany(where: Actor_Filter, all: Boolean = false, data: Actor_Data!): Int! @fdc_generated(from: "Actor", purpose: UPDATE_MULTIPLE) + """ + Update FavoriteActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + favorite_actor_updateMany(where: FavoriteActor_Filter, all: Boolean = false, data: FavoriteActor_Data!): Int! @fdc_generated(from: "FavoriteActor", purpose: UPDATE_MULTIPLE) + """ + Update FavoriteMovie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + favorite_movie_updateMany(where: FavoriteMovie_Filter, all: Boolean = false, data: FavoriteMovie_Data!): Int! @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_MULTIPLE) + """ + Update Movie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movie_updateMany(where: Movie_Filter, all: Boolean = false, data: Movie_Data!): Int! @fdc_generated(from: "Movie", purpose: UPDATE_MULTIPLE) + """ + Update MovieActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieActor_updateMany(where: MovieActor_Filter, all: Boolean = false, data: MovieActor_Data!): Int! @fdc_generated(from: "MovieActor", purpose: UPDATE_MULTIPLE) + """ + Update MovieMetadata entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieMetadata_updateMany(where: MovieMetadata_Filter, all: Boolean = false, data: MovieMetadata_Data!): Int! @fdc_generated(from: "MovieMetadata", purpose: UPDATE_MULTIPLE) + """ + Update Review entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + review_updateMany(where: Review_Filter, all: Boolean = false, data: Review_Data!): Int! @fdc_generated(from: "Review", purpose: UPDATE_MULTIPLE) + """ + Update User entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + user_updateMany(where: User_Filter, all: Boolean = false, data: User_Data!): Int! @fdc_generated(from: "User", purpose: UPDATE_MULTIPLE) + """ + Delete a single Actor based on `id` or `key` and return its key (or `null` if not found). + """ + actor_delete(id: UUID, key: Actor_Key): Actor_Key @fdc_generated(from: "Actor", purpose: DELETE_SINGLE) + """ + Delete a single FavoriteActor based on `id` or `key` and return its key (or `null` if not found). + """ + favorite_actor_delete(key: FavoriteActor_Key): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: DELETE_SINGLE) + """ + Delete a single FavoriteMovie based on `id` or `key` and return its key (or `null` if not found). + """ + favorite_movie_delete(key: FavoriteMovie_Key): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: DELETE_SINGLE) + """ + Delete a single Movie based on `id` or `key` and return its key (or `null` if not found). + """ + movie_delete(id: UUID, key: Movie_Key): Movie_Key @fdc_generated(from: "Movie", purpose: DELETE_SINGLE) + """ + Delete a single MovieActor based on `id` or `key` and return its key (or `null` if not found). + """ + movieActor_delete(key: MovieActor_Key): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: DELETE_SINGLE) + """ + Delete a single MovieMetadata based on `id` or `key` and return its key (or `null` if not found). + """ + movieMetadata_delete(id: UUID, key: MovieMetadata_Key): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: DELETE_SINGLE) + """ + Delete a single Review based on `id` or `key` and return its key (or `null` if not found). + """ + review_delete(key: Review_Key): Review_Key @fdc_generated(from: "Review", purpose: DELETE_SINGLE) + """ + Delete a single User based on `id` or `key` and return its key (or `null` if not found). + """ + user_delete(id: String, id_expr: String_Expr, key: User_Key): User_Key @fdc_generated(from: "User", purpose: DELETE_SINGLE) + """ + Delete Actor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + actor_deleteMany(where: Actor_Filter, all: Boolean = false): Int! @fdc_generated(from: "Actor", purpose: DELETE_MULTIPLE) + """ + Delete FavoriteActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + favorite_actor_deleteMany(where: FavoriteActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteActor", purpose: DELETE_MULTIPLE) + """ + Delete FavoriteMovie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + favorite_movie_deleteMany(where: FavoriteMovie_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteMovie", purpose: DELETE_MULTIPLE) + """ + Delete Movie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movie_deleteMany(where: Movie_Filter, all: Boolean = false): Int! @fdc_generated(from: "Movie", purpose: DELETE_MULTIPLE) + """ + Delete MovieActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieActor_deleteMany(where: MovieActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieActor", purpose: DELETE_MULTIPLE) + """ + Delete MovieMetadata entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieMetadata_deleteMany(where: MovieMetadata_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieMetadata", purpose: DELETE_MULTIPLE) + """ + Delete Review entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + review_deleteMany(where: Review_Filter, all: Boolean = false): Int! @fdc_generated(from: "Review", purpose: DELETE_MULTIPLE) + """ + Delete User entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + user_deleteMany(where: User_Filter, all: Boolean = false): Int! @fdc_generated(from: "User", purpose: DELETE_MULTIPLE) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql new file mode 100644 index 0000000..3b373f9 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql @@ -0,0 +1,71 @@ +extend type Query { + """ + Look up a single Actor based on `id` or `key` and return selected fields (or `null` if not found). + """ + actor(id: UUID, key: Actor_Key): Actor @fdc_generated(from: "Actor", purpose: QUERY_SINGLE) + """ + Look up a single FavoriteActor based on `id` or `key` and return selected fields (or `null` if not found). + """ + favorite_actor(key: FavoriteActor_Key): FavoriteActor @fdc_generated(from: "FavoriteActor", purpose: QUERY_SINGLE) + """ + Look up a single FavoriteMovie based on `id` or `key` and return selected fields (or `null` if not found). + """ + favorite_movie(key: FavoriteMovie_Key): FavoriteMovie @fdc_generated(from: "FavoriteMovie", purpose: QUERY_SINGLE) + """ + Look up a single Movie based on `id` or `key` and return selected fields (or `null` if not found). + """ + movie(id: UUID, key: Movie_Key): Movie @fdc_generated(from: "Movie", purpose: QUERY_SINGLE) + """ + Look up a single MovieActor based on `id` or `key` and return selected fields (or `null` if not found). + """ + movieActor(key: MovieActor_Key): MovieActor @fdc_generated(from: "MovieActor", purpose: QUERY_SINGLE) + """ + Look up a single MovieMetadata based on `id` or `key` and return selected fields (or `null` if not found). + """ + movieMetadata(id: UUID, key: MovieMetadata_Key): MovieMetadata @fdc_generated(from: "MovieMetadata", purpose: QUERY_SINGLE) + """ + Look up a single Review based on `id` or `key` and return selected fields (or `null` if not found). + """ + review(key: Review_Key): Review @fdc_generated(from: "Review", purpose: QUERY_SINGLE) + """ + Look up a single User based on `id` or `key` and return selected fields (or `null` if not found). + """ + user(id: String, id_expr: String_Expr, key: User_Key): User @fdc_generated(from: "User", purpose: QUERY_SINGLE) + """ + List Actor entries in the table, optionally filtered by `where` conditions. + """ + actors(where: Actor_Filter, orderBy: [Actor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "Actor", purpose: QUERY_MULTIPLE) + """ + List FavoriteActor entries in the table, optionally filtered by `where` conditions. + """ + favorite_actors(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE) + """ + List FavoriteMovie entries in the table, optionally filtered by `where` conditions. + """ + favorite_movies(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE) + """ + List Movie entries in the table, optionally filtered by `where` conditions. + """ + movies(where: Movie_Filter, orderBy: [Movie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie", purpose: QUERY_MULTIPLE) + """ + List MovieActor entries in the table, optionally filtered by `where` conditions. + """ + movieActors(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE) + """ + List MovieMetadata entries in the table, optionally filtered by `where` conditions. + """ + movieMetadatas(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata", purpose: QUERY_MULTIPLE) + """ + List Review entries in the table, optionally filtered by `where` conditions. + """ + reviews(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE) + """ + List User entries in the table, optionally filtered by `where` conditions. + """ + users(where: User_Filter, orderBy: [User_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "User", purpose: QUERY_MULTIPLE) + """ + List Movie entries ordered by vector similarity between the `descriptionEmbedding` field and `compare_embed`. + (Alternatively, `compare` can be used if the input is a raw Vector.) + """ + movies_descriptionEmbedding_similarity(compare: Vector, compare_embed: Vector_Embed, method: VectorSimilarityMethod = INNER_PRODUCT, within: Float, where: Movie_Filter, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie.descriptionEmbedding", purpose: QUERY_MULTIPLE_BY_SIMILARITY) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql new file mode 100644 index 0000000..352236f --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql @@ -0,0 +1,74 @@ +extend type Actor { + """ + ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.actor` equals this object). + """ + favorite_actors_on_actor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.actor` equals this object). + """ + movieActors_on_actor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Movie entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `actor` == this and `movie` == that). + """ + movies_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `actor` == this and `user` == that). + """ + users_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} +extend type Movie { + """ + ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.movie` equals this object). + """ + favorite_movies_on_movie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.movie` equals this object). + """ + movieActors_on_movie(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List MovieMetadata entries in a one-to-many relationship with this object (i.e. where `MovieMetadata.movie` equals this object). + """ + movieMetadatas_on_movie(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.movie` equals this object). + """ + reviews_on_movie(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Actor entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `movie` == this and `actor` == that). + """ + actors_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `movie` == this and `user` == that). + """ + users_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related User entries using Review as a join table (i.e. where an entry of Review exists whose `movie` == this and `user` == that). + """ + users_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} +extend type User { + """ + ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.user` equals this object). + """ + favorite_actors_on_user(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.user` equals this object). + """ + favorite_movies_on_user(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.user` equals this object). + """ + reviews_on_user(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + """ + ✨ List related Actor entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `user` == this and `actor` == that). + """ + actors_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related Movie entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `user` == this and `movie` == that). + """ + movies_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + """ + ✨ List related Movie entries using Review as a join table (i.e. where an entry of Review exists whose `user` == this and `movie` == that). + """ + movies_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) +} diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql new file mode 100644 index 0000000..c75ac52 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql @@ -0,0 +1,1170 @@ +"AccessLevel specifies coarse access policies for common situations." +enum AccessLevel { + """ + This operation can be executed by anyone with or without authentication. + Equivalent to @auth(expr: "true") + """ + PUBLIC + + """ + This operation can only be executed with a valid Firebase Auth ID token. + Note: it allows anonymous auth and unverified accounts, so may be subjected to abuses. + It’s equivalent to @auth(expr: "auth.uid != nil") + """ + USER_ANON + + """ + This operation can only be executed by a non-anonymous Firebase Auth account. + It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.firebase.sign_in_provider != 'anonymous'")" + """ + USER + + """ + This operation can only be executed by a verified Firebase Auth account. + It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.email_verified")" + """ + USER_EMAIL_VERIFIED + + """ + This operation can not be executed with no IAM credentials. + It’s equivalent to @auth(expr: "false") + """ + NO_ACCESS +} + +""" +Defines the auth policy for a query or mutation. This directive must be added to +any operation you wish to be accessible from a client application. If left +unspecified, defaults to `@auth(level: NO_ACCESS)`. +""" +directive @auth( + "The minimal level of access required to perform this operation." + level: AccessLevel @fdc_oneOf(required: true) + """ + A CEL expression that allows access to this operation if the expression + evaluates to `true`. + """ + expr: Boolean_Expr @fdc_oneOf(required: true) +) on QUERY | MUTATION +"Query filter criteria for `String` scalar fields." +input String_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: String @fdc_oneOf(group: "eq") + """ + Match if field is exactly equal to the result of the provided server value + expression. Currently only `auth.uid` is supported as an expression. + """ + eq_expr: String_Expr @fdc_oneOf(group: "eq") + "Match if field is not equal to provided value." + ne: String @fdc_oneOf(group: "ne") + """ + Match if field is not equal to the result of the provided server value + expression. Currently only `auth.uid` is supported as an expression. + """ + ne_expr: String_Expr @fdc_oneOf(group: "ne") + "Match if field value is among the provided list of values." + in: [String!] + "Match if field value is not among the provided list of values." + nin: [String!] + "Match if field value is greater than the provided value." + gt: String + "Match if field value is greater than or equal to the provided value." + ge: String + "Match if field value is less than the provided value." + lt: String + "Match if field value is less than or equal to the provided value." + le: String + """ + Match if field value contains the provided value as a substring. Equivalent + to `LIKE '%value%'` + """ + contains: String + """ + Match if field value starts with the provided value. Equivalent to + `LIKE 'value%'` + """ + startsWith: String + """ + Match if field value ends with the provided value. Equivalent to + `LIKE '%value'` + """ + endsWith: String + """ + Match if field value matches the provided pattern. See `String_Pattern` for + more details. + """ + pattern: String_Pattern +} + +""" +The pattern match condition on a string. Specify either like or regex. +https://www.postgresql.org/docs/current/functions-matching.html +""" +input String_Pattern { + "Match using the provided `LIKE` expression." + like: String + "Match using the provided POSIX regular expression." + regex: String + "When true, ignore case when matching." + ignoreCase: Boolean + "When true, invert the match result. Equivalent to `NOT LIKE` or `!~`." + invert: Boolean +} + +"Query filter criteris for `[String!]` scalar fields." +input String_ListFilter { + "Match if list field contains the provided value as a member." + includes: String + "Match if list field does not contain the provided value as a member." + excludes: String + "Match if list field contains all of the provided values as members." + includesAll: [String!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [String!] +} + +"Query filter criteria for `UUID` scalar fields." +input UUID_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: UUID + "Match if field is not equal to provided value." + ne: UUID + "Match if field value is among the provided list of values." + in: [UUID!] + "Match if field value is not among the provided list of values." + nin: [UUID!] +} + +"Query filter criteris for `[UUID!]` scalar fields." +input UUID_ListFilter { + "Match if list field contains the provided value as a member." + includes: UUID + "Match if list field does not contain the provided value as a member." + excludes: UUID + "Match if list field contains all of the provided values as members." + includesAll: [UUID!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [UUID!] +} + +"Query filter criteria for `Int` scalar fields." +input Int_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Int + "Match if field is not equal to provided value." + ne: Int + "Match if field value is among the provided list of values." + in: [Int!] + "Match if field value is not among the provided list of values." + nin: [Int!] + "Match if field value is greater than the provided value." + gt: Int + "Match if field value is greater than or equal to the provided value." + ge: Int + "Match if field value is less than the provided value." + lt: Int + "Match if field value is less than or equal to the provided value." + le: Int +} + +"Query filter criteris for `[Int!]` scalar fields." +input Int_ListFilter { + "Match if list field contains the provided value as a member." + includes: Int + "Match if list field does not contain the provided value as a member." + excludes: Int + "Match if list field contains all of the provided values as members." + includesAll: [Int!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Int!] +} + +"Query filter criteria for `Int64` scalar fields." +input Int64_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Int64 + "Match if field is not equal to provided value." + ne: Int64 + "Match if field value is among the provided list of values." + in: [Int64!] + "Match if field value is not among the provided list of values." + nin: [Int64!] + "Match if field value is greater than the provided value." + gt: Int64 + "Match if field value is greater than or equal to the provided value." + ge: Int64 + "Match if field value is less than the provided value." + lt: Int64 + "Match if field value is less than or equal to the provided value." + le: Int64 +} + +"Query filter criteria for `[Int64!]` scalar fields." +input Int64_ListFilter { + "Match if list field contains the provided value as a member." + includes: Int64 + "Match if list field does not contain the provided value as a member." + excludes: Int64 + "Match if list field contains all of the provided values as members." + includesAll: [Int64!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Int64!] +} + +"Query filter criteria for `Float` scalar fields." +input Float_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Float + "Match if field is not equal to provided value." + ne: Float + "Match if field value is among the provided list of values." + in: [Float!] + "Match if field value is not among the provided list of values." + nin: [Float!] + "Match if field value is greater than the provided value." + gt: Float + "Match if field value is greater than or equal to the provided value." + ge: Float + "Match if field value is less than the provided value." + lt: Float + "Match if field value is less than or equal to the provided value." + le: Float +} + +"Query filter criteria for `[Float!]` scalar fields." +input Float_ListFilter { + "Match if list field contains the provided value as a member." + includes: Float + "Match if list field does not contain the provided value as a member." + excludes: Float + "Match if list field contains all of the provided values as members." + includesAll: [Float!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Float!] +} + +"Query filter criteria for `Boolean` scalar fields." +input Boolean_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Boolean + "Match if field is not equal to provided value." + ne: Boolean + "Match if field value is among the provided list of values." + in: [Boolean!] + "Match if field value is not among the provided list of values." + nin: [Boolean!] +} + +"Query filter criteria for `[Boolean!]` scalar fields." +input Boolean_ListFilter { + "Match if list field contains the provided value as a member." + includes: Boolean + "Match if list field does not contain the provided value as a member." + excludes: Boolean + "Match if list field contains all of the provided values as members." + includesAll: [Boolean!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Boolean!] +} + +"Query filter criteria for `Any` scalar fields." +input Any_Filter { + "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." + isNull: Boolean + "Match if field is exactly equal to provided value." + eq: Any + "Match if field is not equal to provided value." + ne: Any + "Match if field value is among the provided list of values." + in: [Any!] + "Match if field value is not among the provided list of values." + nin: [Any!] +} + +"Query filter criteria for `[Any!]` scalar fields." +input Any_ListFilter { + "Match if list field contains the provided value as a member." + includes: Any + "Match if list field does not contain the provided value as a member." + excludes: Any + "Match if list field contains all of the provided values as members." + includesAll: [Any!] + "Match if list field does not contain any of the provided values as members." + excludesAll: [Any!] +} +""" +(Internal) A string that uniquely identifies a type, field, and so on. + +The most common usage in FDC is `SomeType` or `SomeType.someField`. See the +linked page in the @specifiedBy directive for the GraphQL RFC with more details. +""" +scalar SchemaCoordinate + @specifiedBy(url: "https://github.com/graphql/graphql-wg/blob/6d02705dea034fb65ebc6799632adb7bd550d0aa/rfcs/SchemaCoordinates.md") + @fdc_forbiddenAsFieldType + @fdc_forbiddenAsVariableType + +"(Internal) The purpose of a generated type or field." +enum GeneratedPurpose { + # Implicit fields added to the table types as columns. + IMPLICIT_KEY_FIELD + IMPLICIT_REF_FIELD + + # Relational non-column fields extended to table types. + QUERY_MULTIPLE_ONE_TO_MANY + QUERY_MULTIPLE_MANY_TO_MANY + + # Top-level Query fields. + QUERY_SINGLE + QUERY_MULTIPLE + QUERY_MULTIPLE_BY_SIMILARITY + + # Top-level Mutation fields. + INSERT_SINGLE + INSERT_MULTIPLE + UPSERT_SINGLE + UPSERT_MULTIPLE + UPDATE_SINGLE + UPDATE_MULTIPLE + DELETE_SINGLE + DELETE_MULTIPLE +} + +"(Internal) Added to definitions generated by FDC." +directive @fdc_generated( + "The source type or field that causes this definition to be generated." + from: SchemaCoordinate! + "The reason why this definition is generated, such as the intended use case." + purpose: GeneratedPurpose! +) on + | SCALAR + | OBJECT + | FIELD_DEFINITION + | ARGUMENT_DEFINITION + | INTERFACE + | UNION + | ENUM + | ENUM_VALUE + | INPUT_OBJECT + | INPUT_FIELD_DEFINITION +""" +Defines a database index to optimize query performance. + +Given `type TableName @table @index(fields: [“fieldName”, “secondFieldName”])`, +`table_name_field_name_second_field_name_aa_idx` is the SQL index id. +`table_name_field_name_second_field_name_ad_idx` if `order: [ASC DESC]`. +`table_name_field_name_second_field_name_dd_idx` if `order: [DESC DESC]`. + +Given `type TableName @table { fieldName: Int @index } ` +`table_name_field_name_idx` is the SQL index id. +`order` matters less for single field indexes because they can be scanned in both ways. + +Override with `@index(name)` in case of index name conflicts. +""" +directive @index( + "The SQL database index id. Defaults to __idx." + name: String + """ + Only allowed and required when used on OBJECT. + The fields to create an index on. + """ + fields: [String!] + """ + Only allowed when used on OBJECT and BTREE index. + Index order of each column. Default to all ASC. + """ + order: [IndexFieldOrder!] + """ + For array field, default to `GIN`. + For Vector field, default to `HNSW`. + """ + type: IndexType + """ + Only allowed when used on vector field. + The vector similarity method. Default to `INNER_PRODUCT`. + """ + vector_method: VectorSimilarityMethod +) repeatable on FIELD_DEFINITION | OBJECT + +enum IndexFieldOrder { ASC DESC } + +enum IndexType { + BTREE + GIN + HNSW + IVFFLAT +} +type Query { + _service: _Service! +} + +type Mutation { + # This is just a dummy field so that Mutation is always non-empty. + _firebase: Void @fdc_deprecated(reason: "dummy field -- does nothing useful") +} + +type _Service { + sdl: String! +} + +"(Internal) Added to things that may be removed from FDC and will soon be no longer usable in schema or operations." +directive @fdc_deprecated(reason: String = "No longer supported") on + | SCHEMA + | SCALAR + | OBJECT + | FIELD_DEFINITION + | ARGUMENT_DEFINITION + | INTERFACE + | UNION + | ENUM + | ENUM_VALUE + | INPUT_OBJECT + | INPUT_FIELD_DEFINITION + +"(Internal) Added to scalars representing quoted CEL expressions." +directive @fdc_celExpression( + "The expected CEL type that the expression should evaluate to." + returnType: String +) on SCALAR + +"(Internal) Added to scalars representing quoted SQL expressions." +directive @fdc_sqlExpression( + "The expected SQL type that the expression should evaluate to." + dataType: String +) on SCALAR + +"(Internal) Added to types that may not be used as variables." +directive @fdc_forbiddenAsVariableType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT + +"(Internal) Added to types that may not be used as fields in schema." +directive @fdc_forbiddenAsFieldType on SCALAR | OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT + +"Provides a frequently used example for this type / field / argument." +directive @fdc_example( + "A GraphQL literal value (verbatim) whose type matches the target." + value: Any + "A human-readable text description of what `value` means in this context." + description: String +) repeatable on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | INPUT_OBJECT | INPUT_FIELD_DEFINITION + +"(Internal) Marks this field / argument as conflicting with others in the same group." +directive @fdc_oneOf( + "The group name where fields / arguments conflict with each other." + group: String! = "" + "If true, exactly one field / argument in the group must be specified." + required: Boolean! = false +) repeatable on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION +""" +UUID is a string with hex digits representing an RFC4122 value. + +Outputs will always be 32 lower-case hex digits with no delimiters or curly +braces. Inputs in the following formats are also accepted (case insensitive): + + xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} +""" +scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122") +scalar Int64 + +scalar Any +scalar Void +""" +The `True` scalar type only accepts the boolean `true`. + +An optional field / argument typed `True` may either be set to `true` or omitted +(not provided at all). `false` or `null` is not accepted. +""" +scalar True + @fdc_forbiddenAsFieldType + @fdc_forbiddenAsVariableType + @fdc_example(value: true, description: "The only allowed value.") +"Define the intervals used in timestamps and dates (subset)" +enum TimestampInterval @fdc_deprecated { + second + minute + hour + day + week + month + year +} +""" +A Common Expression Language (CEL) expression that returns a boolean at runtime. + +The expression can reference the `auth` variable, which is null if Firebase Auth +is not used. Otherwise, it contains the following fields: + + - `auth.uid`: The current user ID. + - `auth.token`: A map of all token fields (i.e. "claims"). +""" +scalar Boolean_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "bool") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth != null", description: "Allow only if a Firebase Auth user is present.") + +""" +A Common Expression Language (CEL) expression that returns a string at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar String_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "string") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)") + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) string, formatted as 32 lower-case hex digits without delimiters.") + +""" +A Common Expression Language (CEL) expression that returns a UUID string at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar UUID_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "string") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID (version 4) every time.") + +""" +A Common Expression Language (CEL) expression whose return type is unspecified. + +Limitation: Only a limited set of expressions are supported for now for each +type. For type XXX, see the @fdc_example directives on XXX_Expr for a full list. +""" +scalar Any_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "auth.uid", description: "The ID of the currently logged in user in Firebase Auth. (Errors if not logged in.)") + @fdc_example(value: "uuidV4()", description: "Generates a new random UUID version 4 (formatted as 32 lower-case hex digits without delimiters if result type is String).") + @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).") + +""" +A PostgreSQL value expression whose return type is unspecified. +""" +scalar Any_SQL + @specifiedBy(url: "https://www.postgresql.org/docs/current/sql-expressions.html") + @fdc_sqlExpression + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType +""" +Defines a relational database table. + +Given `type TableName @table`, + + - `TableName` is the GQL type name. + - `tableName` is the singular name. Override with `@table(singular)`. + - `tableNames` is the plural name. Override with `@table(plural)`. + - `table_name` is the SQL table id. Override with `@table(name)`. + +Only a table type can be configured further with: + + - Customized data types. See `@col`. + - Index. See `@index` + - Unique constraint. See `@unqiue` + - Relation. See `@ref` + - Embedded Json. See `@embed` + +A scalar field map to a SQL database column. +An object field (like `type TableName @table { field: AnotherType }`) are either + + - a relation reference field if `AnotherType` is annotated with `@table`. + - an embedded json field if `field` is annotated with `@embed`. + +""" +directive @table( + "Override the SQL database table name. Defaults to ." + name: String + "Override the singular name. Default is the camel case of the type name." + singular: String + "Override the plural name. Default is generated based on English patterns." + plural: String + "The primary key of the table. Defaults to a single field `id: UUID!`. Generate if missing." + key: [String!] +) on OBJECT + +""" +Defines a relational database view. + +Given `type ViewName @view`, + - `ViewName` is the GQL type name. + - `viewName` is the singular name. Override with `@view(singular)`. + - `viewNames` is the plural name. Override with `@view(plural)`. + - `view_name` is the SQL view id. Override with `@view(name)`. + When `@view(sql)` is defined, it uses the given raw SQL as the view instead. + +A view type can be used just as a table type with queries. +A view type may have a nullable `@ref` field to another table, but cannot be +referenced in a `@ref`. + +WARNING: Firebase Data Connect does not validate the SQL of the view or +evaluate whether it matches the defined fields. + +If the SQL view is invalid or undefined, related requests may fail. +If the SQL view return incompatible types. Firebase Data Connect will surface +an error in the response. +""" +directive @view( + """ + The SQL view name. If no `name` or `sql` are provided, defaults to + snake_case of the singular type name. + """ + name: String @fdc_oneOf + """ + SQL SELECT statement to use as the basis for this type. Note that all SQL + identifiers should be snake_case and all GraphQL identifiers should be + camelCase. + """ + sql: String @fdc_oneOf + "Override the singular name. Default is the camel case of the type name." + singular: String + "Override the plural name. Default is generated based on English patterns." + plural: String +) on OBJECT + +""" +Specify additional column options. + +Given `type TableName @table { fieldName: Int } ` + + - `field_name` is the SQL column name. Override with `@col(name)`. + +""" +directive @col( + "The SQL database column name. Defaults to ." + name: String + """ + Override SQL columns data type. + Each GraphQL type could map to many SQL data types. + Refer to Postgres supported data types and mappings to GQL. + """ + dataType: String + """ + Defines a fixed column size for certain scalar types. + + - For Vector, size is required. It establishes the length of the vector. + - For String, size converts `text` type to `varchar(size)`. + """ + size: Int +) on FIELD_DEFINITION + + +""" +Define a reference field to another table. + +Given `type TableName @table { refField: AnotherTableName }`, it defines a foreign-key constraint + + - with id `table_name_ref_field_fkey` (override with `@ref(constraintName)`) + - from `table_name.ref_field` (override with `@ref(fields)`) + - to `another_table_name.id` (override with `@ref(references)`) + +Does not support `[AnotherTableName]` because array fields cannot have foreign-key constraints. +Nullability determines whether the reference is required. + + - `refField: AnotherTableName`: optional reference, SET_NULL on delete. + - `refField: AnotherTableName!`: required reference, CASCADE on delete. + +Consider all types of SQL relations: + + - many-to-one relations involve a reference field on the many-side. + - many-to-maybe-one if `refField: AnotherTableName`. + - many-to-exactly-one if `refField: AnotherTableName!`. + - one-to-one relations involve a unique reference field on one side. + - maybe-one-to-maybe-one if `refField: AnotherTableName @unique`. + - maybe-one-to-exact-one if `refField: AnotherTableName! @unique`. + - exact-one-to-exact-one shall be represented as a single table instead. + - many-to-many relations involve a join table. + - Its primary keys must be two non-null reference fields to tables bridged together to guarantee at most one relation per pair. + +type TableNameToAnotherTableName @table(key: ["refField", "anotherRefField"]) { + refField: TableName! + anotherRefField: AnotherTableName! +} + +""" +directive @ref( + "The SQL database foreign key constraint name. Default to __fkey." + constraintName: String + """ + Foreign key fields. Default to . + """ + fields: [String!] + "The fields that the foreign key references in the other table. Default to the primary key." + references: [String!] +) on FIELD_DEFINITION + +"Define the direction of an orderby query" +enum OrderDirection { + ASC + DESC +} + +enum ColDefault @fdc_deprecated { + """ + Generates a random UUID (v4) as the default column value. + Compatible with String or UUID typed fields. + """ + UUID + """ + Generates an auto-incrementing sequence as the default column value. + Compatible with Int and Int64 typed fields. + """ + SEQUENCE + """ + Populates the default column value with the current date or timestamp. + Compatible with Date and Timestamp typed fields. + """ + NOW +} + +""" +Specify the default column value. + +The supported arguments vary based on the field type. +""" +directive @default( + "A constant value. Validated against the field GraphQL type at compile-time." + value: Any @fdc_oneOf(required: true) + "(Deprecated) Built-in common ways to generate initial value." + generate: ColDefault @fdc_oneOf(required: true) @deprecated + "A CEL expression, whose return value must match the field data type." + expr: Any_Expr @fdc_oneOf(required: true) + """ + A raw SQL expression, whose SQL data type must match the underlying column. + + The value is any variable-free expression (in particular, cross-references to + other columns in the current table are not allowed). Subqueries are not allowed either. + https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-DEFAULT + """ + sql: Any_SQL @fdc_oneOf(required: true) +) on FIELD_DEFINITION +""" +Date is a string in the YYYY-MM-DD format representing a local-only date. + +See the description for Timestamp for range and limitations. + +As a FDC-specific extension, inputs that includes time portions (as specified by +the Timestamp scalar) are accepted but only the date portion is used. In other +words, only the part before "T" is used and the rest discarded. This effectively +truncates it to the local date in the specified time-zone. + +Outputs will always be in the canonical YYYY-MM-DD format. +""" +scalar Date @specifiedBy(url: "https://scalars.graphql.org/andimarek/local-date.html") + +""" +Timestamp is a RFC 3339 string that represents an exact point in time. + +The serialization format follows https://scalars.graphql.org/andimarek/date-time +except the "Non-optional exact milliseconds" Section. As a FDC-specific +extension, inputs and outputs may contain 0, 3, 6, or 9 fractional digits. + +Specifically, output precision varies by server-side factors such as data source +support and clients must not rely on an exact number of digits. Clients may +truncate extra digits as fit, with the caveat that there may be information loss +if the truncated value is subsequently sent back to the server. + +FDC only supports year 1583 to 9999 (inclusive) and uses the ISO-8601 calendar +system for all date-time calculations. Notably, the expanded year representation +(+/-YYYYY) is rejected and Year 1582 and before may either be rejected or cause +undefined behavior. +""" +scalar Timestamp @specifiedBy(url: "https://scalars.graphql.org/andimarek/date-time") + +""" +A Common Expression Language (CEL) expression that returns a Timestamp at runtime. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar Timestamp_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "google.protobuf.Timestamp") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "request.time", description: "The timestamp when the request is received (with microseconds precision).") + +""" +A Common Expression Language (CEL) expression that returns a Timestamp at runtime, +which is then truncated to UTC date only. The time-of-day parts are discarded. + +Limitation: Right now, only a few expressions are supported. Those are listed +using the @fdc_example directive on this scalar. +""" +scalar Date_Expr + @specifiedBy(url: "https://github.com/google/cel-spec") + @fdc_celExpression(returnType: "google.protobuf.Timestamp") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "request.time", description: "The UTC date on which the request is received.") + +"Conditions on a Date value" +input Date_Filter { + isNull: Boolean + eq: Date @fdc_oneOf(group: "eq") + eq_expr: Date_Expr @fdc_oneOf(group: "eq") + eq_date: Date_Relative @fdc_oneOf(group: "eq") + ne: Date @fdc_oneOf(group: "ne") + ne_expr: Date_Expr @fdc_oneOf(group: "ne") + ne_date: Date_Relative @fdc_oneOf(group: "ne") + in: [Date!] + nin: [Date!] + gt: Date @fdc_oneOf(group: "gt") + gt_expr: Date_Expr @fdc_oneOf(group: "gt") + gt_date: Date_Relative @fdc_oneOf(group: "gt") + ge: Date @fdc_oneOf(group: "ge") + ge_expr: Date_Expr @fdc_oneOf(group: "ge") + ge_date: Date_Relative @fdc_oneOf(group: "ge") + lt: Date @fdc_oneOf(group: "lt") + lt_expr: Date_Expr @fdc_oneOf(group: "lt") + lt_date: Date_Relative @fdc_oneOf(group: "lt") + le: Date @fdc_oneOf(group: "le") + le_expr: Date_Expr @fdc_oneOf(group: "le") + le_date: Date_Relative @fdc_oneOf(group: "le") +} + +"Conditions on a Date list" +input Date_ListFilter { + includes: Date @fdc_oneOf(group: "includes") + includes_expr: Date_Expr @fdc_oneOf(group: "includes") + includes_date: Date_Relative @fdc_oneOf(group: "includes") + excludes: Date @fdc_oneOf(group: "excludes") + excludes_expr: Date_Expr @fdc_oneOf(group: "excludes") + excludes_date: Date_Relative @fdc_oneOf(group: "excludes") + includesAll: [Date!] + excludesAll: [Date!] +} + +"Conditions on an Timestamp value" +input Timestamp_Filter { + isNull: Boolean + eq: Timestamp @fdc_oneOf(group: "eq") + eq_expr: Timestamp_Expr @fdc_oneOf(group: "eq") + eq_time: Timestamp_Relative @fdc_oneOf(group: "eq") + ne: Timestamp @fdc_oneOf(group: "ne") + ne_expr: Timestamp_Expr @fdc_oneOf(group: "ne") + ne_time: Timestamp_Relative @fdc_oneOf(group: "ne") + in: [Timestamp!] + nin: [Timestamp!] + gt: Timestamp @fdc_oneOf(group: "gt") + gt_expr: Timestamp_Expr @fdc_oneOf(group: "gt") + gt_time: Timestamp_Relative @fdc_oneOf(group: "gt") + ge: Timestamp @fdc_oneOf(group: "ge") + ge_expr: Timestamp_Expr @fdc_oneOf(group: "ge") + ge_time: Timestamp_Relative @fdc_oneOf(group: "ge") + lt: Timestamp @fdc_oneOf(group: "lt") + lt_expr: Timestamp_Expr @fdc_oneOf(group: "lt") + lt_time: Timestamp_Relative @fdc_oneOf(group: "lt") + le: Timestamp @fdc_oneOf(group: "le") + le_expr: Timestamp_Expr @fdc_oneOf(group: "le") + le_time: Timestamp_Relative @fdc_oneOf(group: "le") +} + +"Conditions on a Timestamp list" +input Timestamp_ListFilter { + includes: Timestamp @fdc_oneOf(group: "includes") + includes_expr: Timestamp_Expr @fdc_oneOf(group: "includes") + includes_time: Timestamp_Relative @fdc_oneOf(group: "includes") + excludes: Timestamp @fdc_oneOf(group: "excludes") + excludes_expr: Timestamp_Expr @fdc_oneOf(group: "excludes") + excludes_time: Timestamp_Relative @fdc_oneOf(group: "excludes") + includesAll: [Timestamp!] + excludesAll: [Timestamp!] +} + +"Update input of a Date value" +input Date_Update { + set: Date @fdc_oneOf(group: "set") + set_expr: Date_Expr @fdc_oneOf(group: "set") + set_date: Date_Relative @fdc_oneOf(group: "set") +} + +"Update input of a Date list value" +input Date_ListUpdate { + set: [Date!] + append: [Date!] + prepend: [Date!] + delete: Int + i: Int + update: Date +} + +"Update input of a Timestamp value" +input Timestamp_Update { + set: Timestamp @fdc_oneOf(group: "set") + set_expr: Timestamp_Expr @fdc_oneOf(group: "set") + set_time: Timestamp_Relative @fdc_oneOf(group: "set") +} + +"Update input of a Timestamp list value" +input Timestamp_ListUpdate { + set: [Timestamp!] + append: [Timestamp!] + prepend: [Timestamp!] + delete: Int + i: Int + update: Timestamp +} + +"A runtime-calculated Timestamp value relative to `now` or `at`." +input Timestamp_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + now: True @fdc_oneOf(group: "from", required: true) + at: Timestamp @fdc_oneOf(group: "from", required: true) + + add: Timestamp_Duration + sub: Timestamp_Duration + + truncateTo: Timestamp_Interval +} + +input Timestamp_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + milliseconds: Int! = 0 + seconds: Int! = 0 + minutes: Int! = 0 + hours: Int! = 0 + days: Int! = 0 + weeks: Int! = 0 + months: Int! = 0 + years: Int! = 0 +} + +enum Timestamp_Interval @fdc_forbiddenAsFieldType { + SECOND + MINUTE + HOUR + DAY + WEEK + MONTH + YEAR +} + +"A runtime-calculated Date value relative to `today` or `on`." +input Date_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + today: True @fdc_oneOf(group: "from", required: true) + on: Date @fdc_oneOf(group: "from", required: true) + + add: Date_Duration + sub: Date_Duration + + truncateTo: Date_Interval +} + +input Date_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + days: Int! = 0 + weeks: Int! = 0 + months: Int! = 0 + years: Int! = 0 +} + +enum Date_Interval @fdc_forbiddenAsFieldType { + WEEK + MONTH + YEAR +} +""" +Defines a unique constraint. + +Given `type TableName @table @unique(fields: [“fieldName”, “secondFieldName”])`, +`table_name_field_name_second_field_name_uidx` is the SQL unique index id. +Given `type TableName @table { fieldName: Int @unique } ` +`table_name_field_name_uidx` is the SQL unique index id. + +Override with `@unique(indexName)` in case of index name conflicts. +""" +directive @unique( + "The SQL database unique index name. Defaults to __uidx." + indexName: String + """ + Only allowed and required when used on OBJECT. + The fields to create a unique constraint on. + """ + fields: [String!] +) repeatable on FIELD_DEFINITION | OBJECT +"Update input of a String value" +input String_Update { + set: String @fdc_oneOf(group: "set") + set_expr: String_Expr @fdc_oneOf(group: "set") +} + +"Update input of a String list value" +input String_ListUpdate { + set: [String!] + append: [String!] + prepend: [String!] +} + +"Update input of a UUID value" +input UUID_Update { + set: UUID @fdc_oneOf(group: "set") + set_expr: UUID_Expr @fdc_oneOf(group: "set") +} + +"Update input of an ID list value" +input UUID_ListUpdate { + set: [UUID!] + append: [UUID!] + prepend: [UUID!] +} + +"Update input of an Int value" +input Int_Update { + set: Int + inc: Int + dec: Int +} + +"Update input of an Int list value" +input Int_ListUpdate { + set: [Int!] + append: [Int!] + prepend: [Int!] +} + +"Update input of an Int64 value" +input Int64_Update { + set: Int64 + inc: Int64 + dec: Int64 +} + +"Update input of an Int64 list value" +input Int64_ListUpdate { + set: [Int64!] + append: [Int64!] + prepend: [Int64!] +} + +"Update input of a Float value" +input Float_Update { + set: Float + inc: Float + dec: Float +} + +"Update input of a Float list value" +input Float_ListUpdate { + set: [Float!] + append: [Float!] + prepend: [Float!] +} + +"Update input of a Boolean value" +input Boolean_Update { + set: Boolean +} + +"Update input of a Boolean list value" +input Boolean_ListUpdate { + set: [Boolean!] + append: [Boolean!] + prepend: [Boolean!] +} + +"Update input of an Any value" +input Any_Update { + set: Any +} + +"Update input of an Any list value" +input Any_ListUpdate { + set: [Any!] + append: [Any!] + prepend: [Any!] +} +""" +Vector is an array of single-precision floating-point numbers, serialized +as a JSON array. All elements must be finite (no NaN, Infinity or -Infinity). + +Example: [1.1, 2, 3.3] +""" +scalar Vector + +""" +Defines what siliarlity function to use for fetching vectors. +Details here: https://github.com/pgvector/pgvector?tab=readme-ov-file#vector-functions +""" +enum VectorSimilarityMethod { + L2 + COSINE + INNER_PRODUCT +} + +"Conditions on an Vector value" +input Vector_Filter { + eq: Vector + ne: Vector + in: [Vector!] + nin: [Vector!] + isNull: Boolean +} + +input Vector_ListFilter { + "When true, will match if the list includes the supplied vector." + includes: Vector + excludes: Vector + includesAll: [Vector!] + excludesAll: [Vector!] +} + +"Update input of an Vector value" +input Vector_Update { + set: Vector @fdc_oneOf(group: "set") + set_embed: Vector_Embed @fdc_oneOf(group: "set") +} + +"Update input of a Vector list value" +input Vector_ListUpdate { + set: [Vector] + append: [Vector] + prepend: [Vector] + delete: Int + i: Int + update: Vector +} + +""" +Create a vector embedding of text using the given model on Vertex AI. + +Example: {text: "Hi there", model: "textembedding-gecko@003"} +See: https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings + +Limitation: In the emulator, if Vertex AI is not configured, a pseudorandom +vector is generated from text as a fake implementation for testing only. +""" +input Vector_Embed @fdc_forbiddenAsVariableType { + model: Vector_Embed_Model! + text: String! +} + +""" +A string that specifies a Vertex AI model and version. + +It is strongly recommended to specify a stable model version (for example, +textembedding-gecko@003). The latest version of a model is in Preview and is not +General Availability (GA). Because the latest version is in Preview, it isn't +guaranteed to be production ready. +""" +scalar Vector_Embed_Model + @specifiedBy(url: "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning") + @fdc_forbiddenAsVariableType + @fdc_forbiddenAsFieldType + @fdc_example(value: "textembedding-gecko@003", description: "A stable version of the textembedding-gecko model") diff --git a/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql b/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql new file mode 100644 index 0000000..b8a9f8c --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql @@ -0,0 +1,204 @@ +mutation { + movie_insertMany(data: [ + { + id: "550e8400-e29b-41d4-a716-446655440000", + title: "Inception", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168", + releaseYear: 2010, + genre: "sci-fi", + rating: 8.8, + description: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move.", + tags: ["thriller", "action"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440001", + title: "The Matrix", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059", + releaseYear: 1999, + genre: "action", + rating: 8.7, + description: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440002", + title: "John Wick 4", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjohn_wick_4.jpg?alt=media&token=463ed467-9daa-4281-965d-44e7cc4172d5", + releaseYear: 2023, + genre: "action", + rating: 8.1, + description: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances.", + tags: ["action", "thriller"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440003", + title: "The Dark Knight", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_dark_knight.jpg?alt=media&token=a9803c59-40d5-4758-a6f4-9a7c274a1218", + releaseYear: 2008, + genre: "action", + rating: 9.0, + description: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice.", + tags: ["action", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440004", + title: "Fight Club", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ffight_club.jpg?alt=media&token=a4bc1933-2607-42cd-a860-e44c4587fd9c", + releaseYear: 1999, + genre: "drama", + rating: 8.8, + description: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity.", + tags: ["drama", "thriller"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440005", + title: "Pulp Fiction", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fpulp_fiction.jpg?alt=media&token=0df86e18-5cb1-45b3-a6d9-3f41563c3465", + releaseYear: 1994, + genre: "crime", + rating: 8.9, + description: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references.", + tags: ["crime", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440006", + title: "The Lord of the Rings: The Fellowship of the Ring", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Flotr_fellowship.jpg?alt=media&token=92641d2d-6c52-4172-bd66-95fb86b4b96b", + releaseYear: 2001, + genre: "fantasy", + rating: 8.8, + description: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond.", + tags: ["fantasy", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440007", + title: "The Shawshank Redemption", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_shawshanks_redemption.jpg?alt=media&token=f67b5ab2-a435-48b2-8251-5bf866b183e9", + releaseYear: 1994, + genre: "drama", + rating: 9.3, + description: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman).", + tags: ["drama", "crime"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440008", + title: "Forrest Gump", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fforrest_gump.jpeg?alt=media&token=f21e88ce-6fab-4218-aa55-94738acc9b8f", + releaseYear: 1994, + genre: "drama", + rating: 8.8, + description: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright).", + tags: ["drama", "romance"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440009", + title: "The Godfather", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_godfather.jpg?alt=media&token=5297fd94-ae87-4995-9de5-3755232bad52", + releaseYear: 1972, + genre: "crime", + rating: 9.2, + description: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal.", + tags: ["crime", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440010", + title: "The Silence of the Lambs", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_silence_of_the_lambs.jpg?alt=media&token=7ca6abeb-b15c-4f5e-9280-5a590e89fe54", + releaseYear: 1991, + genre: "thriller", + rating: 8.6, + description: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer.", + tags: ["thriller", "crime"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440011", + title: "Saving Private Ryan", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fsaving_private_ryan.jpg?alt=media&token=58ed877e-7ae0-4e30-9aee-d45c2deb7a00", + releaseYear: 1998, + genre: "war", + rating: 8.6, + description: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war.", + tags: ["war", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440012", + title: "The Avengers", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_avengers.jpg?alt=media&token=3d68ccad-2fa1-48da-a83e-7941e246c9f9", + releaseYear: 2012, + genre: "action", + rating: 8.0, + description: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast.", + tags: ["action", "sci-fi"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440013", + title: "Gladiator", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fgladiator.jpg?alt=media&token=61d75825-b79f-4add-afdb-7da5eed53407", + releaseYear: 2000, + genre: "action", + rating: 8.5, + description: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance.", + tags: ["action", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440014", + title: "Titanic", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ftitanic.png?alt=media&token=dd03dc83-486e-4b03-9b03-2f9ed83fd9d0", + releaseYear: 1997, + genre: "romance", + rating: 7.8, + description: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals.", + tags: ["romance", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440015", + title: "Avatar", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Favatar.jpg?alt=media&token=1c75b09d-7c7a-44bf-b7ad-e7da4d0b7193", + releaseYear: 2009, + genre: "sci-fi", + rating: 7.8, + description: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440016", + title: "Jurassic Park", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjurassic_park.jpg?alt=media&token=1731ce71-3384-4435-8a5b-821d4fd286d3", + releaseYear: 1993, + genre: "adventure", + rating: 8.1, + description: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures.", + tags: ["adventure", "sci-fi"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440017", + title: "The Lion King", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_lion_king.jpg?alt=media&token=3e4e4265-6ae7-47d6-a5ba-584de126ef00", + releaseYear: 1994, + genre: "animation", + rating: 8.5, + description: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption.", + tags: ["animation", "drama"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440018", + title: "Star Wars: Episode IV - A New Hope", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fstar_wars_4.jpg?alt=media&token=b4ea7e0c-707f-43dd-8633-9d962e77b5a4", + releaseYear: 1977, + genre: "sci-fi", + rating: 8.6, + description: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters.", + tags: ["sci-fi", "adventure"] + }, + { + id: "550e8400-e29b-41d4-a716-446655440019", + title: "Blade Runner", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fblade_runner.jpg?alt=media&token=d8e94bdd-1477-49f3-b244-dd7a9c059fc1", + releaseYear: 1982, + genre: "sci-fi", + rating: 8.1, + description: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity.", + tags: ["sci-fi", "thriller"] + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql new file mode 100644 index 0000000..6922dcf --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql @@ -0,0 +1,104 @@ +mutation { + actor_insertMany(data: [ + { + id: "123e4567-e89b-12d3-a456-426614174000", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316", + name: "Leonardo DiCaprio" + }, + { + id: "123e4567-e89b-12d3-a456-426614174001", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115", + name: "Keanu Reeves" + }, + { + id: "123e4567-e89b-12d3-a456-426614174002", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmcconaoghey.jpg?alt=media&token=d340ca18-ef51-44ac-a160-08e45b242cd7", + name: "Matthew McConaughey" + }, + { + id: "123e4567-e89b-12d3-a456-426614174003", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fbale.jpg?alt=media&token=666f1690-a550-458f-a1cf-9505b7d1af7d", + name: "Christian Bale" + }, + { + id: "123e4567-e89b-12d3-a456-426614174004", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpitt.jpeg?alt=media&token=3a5283d4-f85c-4ba7-be72-51bc87ca4133", + name: "Brad Pitt" + }, + { + id: "123e4567-e89b-12d3-a456-426614174005", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjackson.jpg?alt=media&token=07be0601-19fe-4b5d-b111-84fa71f32139", + name: "Samuel L. Jackson" + }, + { + id: "123e4567-e89b-12d3-a456-426614174006", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmortensen.jpeg?alt=media&token=e3d1ec99-b8e7-42e9-9d1c-03f56f61ecf7", + name: "Viggo Mortensen" + }, + { + id: "123e4567-e89b-12d3-a456-426614174007", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffreeman.jpg?alt=media&token=94bc6227-119e-4ab0-b350-55fac7aeb062", + name: "Morgan Freeman" + }, + { + id: "123e4567-e89b-12d3-a456-426614174008", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fhanks.jpeg?alt=media&token=d92979ce-da62-4b28-afbe-b8740bbb9d32", + name: "Tom Hanks" + }, + { + id: "123e4567-e89b-12d3-a456-426614174009", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpacino.jpg?alt=media&token=9c0c54b1-6913-48b5-8e5e-d6551dd2f182", + name: "Al Pacino" + }, + { + id: "123e4567-e89b-12d3-a456-426614174010", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffoster.jpg?alt=media&token=b429734c-0f2d-4840-b75b-6857eac7bb4f", + name: "Jodie Foster" + }, + { + id: "123e4567-e89b-12d3-a456-426614174011", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcruise.jpg?alt=media&token=d34b0326-a8d1-4f01-86e5-f3f094594e5a", + name: "Tom Cruise" + }, + { + id: "123e4567-e89b-12d3-a456-426614174012", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdowney.jpg?alt=media&token=dd291c96-6ef0-42fc-841c-902c80748b37", + name: "Robert Downey Jr." + }, + { + id: "123e4567-e89b-12d3-a456-426614174013", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcrowe.jpg?alt=media&token=46d413d5-ace8-404e-b018-8d7e6fe0d362", + name: "Russell Crowe" + }, + { + id: "123e4567-e89b-12d3-a456-426614174014", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fwinslet.jpg?alt=media&token=b675585e-356e-4361-a041-5ac1a6ee5922", + name: "Kate Winslet" + }, + { + id: "123e4567-e89b-12d3-a456-426614174015", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fweaver.jpeg?alt=media&token=263b5c3d-e0ee-43c3-854d-9b236c6df391", + name: "Sigourney Weaver" + }, + { + id: "123e4567-e89b-12d3-a456-426614174016", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fgoldblume.jpeg?alt=media&token=18277dd1-166c-4934-a02e-19ef141c86e2", + name: "Jeff Goldblum" + }, + { + id: "123e4567-e89b-12d3-a456-426614174017", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjones.jpg?alt=media&token=f7ac9bc4-6e26-4b25-9a73-7a90f699424e", + name: "James Earl Jones" + }, + { + id: "123e4567-e89b-12d3-a456-426614174018", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fford.jpg?alt=media&token=928434c0-d492-4c8e-bdf0-0db585008d87", + name: "Harrison Ford" + }, + { + id: "123e4567-e89b-12d3-a456-426614174019", + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fschwarzenegger.jpeg?alt=media&token=c46fb249-41ef-4084-b4ad-9517bee6ab46", + name: "Arnold Schwarzenegger" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql new file mode 100644 index 0000000..c2256ac --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql @@ -0,0 +1,238 @@ +mutation { + movieMetadata_insertMany(data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + director: "Christopher Nolan" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + director: "Lana Wachowski, Lilly Wachowski" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + director: "Chad Stahelski" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + director: "Christopher Nolan" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + director: "David Fincher" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + director: "Quentin Tarantino" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + director: "Peter Jackson" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + director: "Frank Darabont" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + director: "Robert Zemeckis" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + director: "Francis Ford Coppola" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440010", + director: "Jonathan Demme" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440011", + director: "Steven Spielberg" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440012", + director: "Joss Whedon" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440013", + director: "Ridley Scott" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440014", + director: "James Cameron" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440015", + director: "James Cameron" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440016", + director: "Steven Spielberg" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440017", + director: "Roger Allers, Rob Minkoff" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440018", + director: "George Lucas" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440019", + director: "Ridley Scott" + } + ]) + + movieActor_insertMany(data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + actorId: "123e4567-e89b-12d3-a456-426614174000", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + actorId: "123e4567-e89b-12d3-a456-426614174003", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + actorId: "123e4567-e89b-12d3-a456-426614174004", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + actorId: "123e4567-e89b-12d3-a456-426614174005", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + actorId: "123e4567-e89b-12d3-a456-426614174006", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + actorId: "123e4567-e89b-12d3-a456-426614174007", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + actorId: "123e4567-e89b-12d3-a456-426614174008", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + actorId: "123e4567-e89b-12d3-a456-426614174009", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440010", + actorId: "123e4567-e89b-12d3-a456-426614174010", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440011", + actorId: "123e4567-e89b-12d3-a456-426614174011", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440012", + actorId: "123e4567-e89b-12d3-a456-426614174012", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440013", + actorId: "123e4567-e89b-12d3-a456-426614174013", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440014", + actorId: "123e4567-e89b-12d3-a456-426614174014", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440015", + actorId: "123e4567-e89b-12d3-a456-426614174015", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440016", + actorId: "123e4567-e89b-12d3-a456-426614174016", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440017", + actorId: "123e4567-e89b-12d3-a456-426614174017", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440018", + actorId: "123e4567-e89b-12d3-a456-426614174018", + role: "main" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440019", + actorId: "123e4567-e89b-12d3-a456-426614174019", + role: "main" + }, + # Supporting actors + { + movieId: "550e8400-e29b-41d4-a716-446655440000", + actorId: "123e4567-e89b-12d3-a456-426614174001", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440001", + actorId: "123e4567-e89b-12d3-a456-426614174002", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440002", + actorId: "123e4567-e89b-12d3-a456-426614174003", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440003", + actorId: "123e4567-e89b-12d3-a456-426614174004", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440004", + actorId: "123e4567-e89b-12d3-a456-426614174005", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440005", + actorId: "123e4567-e89b-12d3-a456-426614174006", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440006", + actorId: "123e4567-e89b-12d3-a456-426614174007", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440007", + actorId: "123e4567-e89b-12d3-a456-426614174008", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440008", + actorId: "123e4567-e89b-12d3-a456-426614174009", + role: "supporting" + }, + { + movieId: "550e8400-e29b-41d4-a716-446655440009", + actorId: "123e4567-e89b-12d3-a456-426614174010", + role: "supporting" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql b/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql new file mode 100644 index 0000000..51167f3 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql @@ -0,0 +1,142 @@ +mutation { + user_insertMany(data: [ + { + id: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + username: "cynthia_w" + }, + { + id: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + username: "hercule_p" + }, + { + id: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + username: "jane_d" + }, + { + id: "TBedjwCX0Jf955Uuoxk6k74sY0l2", + username: "peter_f" + } + + ]) + + review_insertMany(data: [ + { + id: "345e4567-e89b-12d3-a456-426614174000", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440000", + rating: 5, + reviewText: "An incredible movie with a mind-blowing plot!", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174001", + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440001", + rating: 5, + reviewText: "A revolutionary film that changed cinema forever.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174002", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440002", + rating: 5, + reviewText: "A visually stunning and emotionally impactful movie.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174003", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440003", + rating: 4, + reviewText: "A fantastic superhero film with great performances.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174004", + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440004", + rating: 5, + reviewText: "An amazing film that keeps you on the edge of your seat.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174005", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "An absolute classic with unforgettable dialogue.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174006", + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l2", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "I really loved this one.", + reviewDate_date: { today: true } + }, + { + id: "345e4567-e89b-12d3-a456-426614174007", + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440005", + rating: 5, + reviewText: "Me too!.", + reviewDate_date: { today: true } + } + ]) + + favorite_movie_insertMany(data: [ + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440000" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440001" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440002" + }, + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + movieId: "550e8400-e29b-41d4-a716-446655440003" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + movieId: "550e8400-e29b-41d4-a716-446655440004" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + movieId: "550e8400-e29b-41d4-a716-446655440005" + } + ]) + + favorite_actor_insertMany(data: [ + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + actorId: "123e4567-e89b-12d3-a456-426614174000" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + actorId: "123e4567-e89b-12d3-a456-426614174001" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + actorId: "123e4567-e89b-12d3-a456-426614174002" + }, + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", + actorId: "123e4567-e89b-12d3-a456-426614174003" + }, + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", + actorId: "123e4567-e89b-12d3-a456-426614174004" + }, + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", + actorId: "123e4567-e89b-12d3-a456-426614174005" + } + ]) +} diff --git a/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql b/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql new file mode 100644 index 0000000..76b11da --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql @@ -0,0 +1,141 @@ +mutation updateMovieEmbeddings { + movie1: movie_update( + id: "550e8400-e29b-41d4-a716-446655440000" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move."} + } + ) + + movie2: movie_update( + id: "550e8400-e29b-41d4-a716-446655440001" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny."} + } + ) + + movie3: movie_update( + id: "550e8400-e29b-41d4-a716-446655440002" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances."} + } + ) + + movie4: movie_update( + id: "550e8400-e29b-41d4-a716-446655440003" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice."} + } + ) + + movie5: movie_update( + id: "550e8400-e29b-41d4-a716-446655440004" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity."} + } + ) + + movie6: movie_update( + id: "550e8400-e29b-41d4-a716-446655440005" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references."} + } + ) + + movie7: movie_update( + id: "550e8400-e29b-41d4-a716-446655440006" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond."} + } + ) + + movie8: movie_update( + id: "550e8400-e29b-41d4-a716-446655440007" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman)."} + } + ) + + movie9: movie_update( + id: "550e8400-e29b-41d4-a716-446655440008" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright)."} + } + ) + + movie10: movie_update( + id: "550e8400-e29b-41d4-a716-446655440009" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal."} + } + ) + + movie11: movie_update( + id: "550e8400-e29b-41d4-a716-446655440010" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer."} + } + ) + + movie12: movie_update( + id: "550e8400-e29b-41d4-a716-446655440011" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war."} + } + ) + + movie13: movie_update( + id: "550e8400-e29b-41d4-a716-446655440012" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast."} + } + ) + + movie14: movie_update( + id: "550e8400-e29b-41d4-a716-446655440013" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance."} + } + ) + + movie15: movie_update( + id: "550e8400-e29b-41d4-a716-446655440014" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals."} + } + ) + + movie16: movie_update( + id: "550e8400-e29b-41d4-a716-446655440015" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience."} + } + ) + + movie17: movie_update( + id: "550e8400-e29b-41d4-a716-446655440016" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures."} + } + ) + + movie18: movie_update( + id: "550e8400-e29b-41d4-a716-446655440017" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption."} + } + ) + + movie19: movie_update( + id: "550e8400-e29b-41d4-a716-446655440018" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters."} + } + ) + + movie20: movie_update( + id: "550e8400-e29b-41d4-a716-446655440019" + data: { + descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity."} + } + ) +} diff --git a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml new file mode 100644 index 0000000..7b27a6b --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml @@ -0,0 +1,11 @@ +specVersion: "v1alpha" +serviceId: "friendly-flix-service" +location: "us-central1" +schema: + source: "./schema" + datasource: + postgresql: + database: "friendly-flix-database" + cloudSql: + instanceId: "my-cloud-sql" +connectorDirs: ["./movie-connector"] diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml b/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml new file mode 100644 index 0000000..d8410a8 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/connector.yaml @@ -0,0 +1,7 @@ +connectorId: friendly-flix +authMode: PUBLIC +generate: + swiftSdk: + outputDir: "../../app" + package: "FriendlyFlixSDK" + observablePublisher: observableMacro \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql new file mode 100644 index 0000000..fdac88b --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql @@ -0,0 +1,114 @@ +# Create a movie based on user input +mutation CreateMovie( + $title: String! + $releaseYear: Int! + $genre: String! + $rating: Float + $description: String + $imageUrl: String! + $tags: [String!] = [] +) @auth(level: USER_EMAIL_VERIFIED) { + movie_insert( + data: { + title: $title + releaseYear: $releaseYear + genre: $genre + rating: $rating + description: $description + imageUrl: $imageUrl + tags: $tags + } + ) +} + +# Add a movie to the user's favorites list +mutation AddFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie_upsert(data: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Remove a movie from the user's favorites list +mutation DeleteFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Add an actor to the user's favorites list +mutation AddFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor_upsert(data: { userId_expr: "auth.uid", actorId: $actorId }) +} + +# Remove an actor from the user's favorites list +mutation DeleteFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor_delete(key: { userId_expr: "auth.uid", actorId: $actorId }) +} + +# Add a review for a movie +mutation AddReview( + $movieId: UUID! + $rating: Int! + $reviewText: String! +) @auth(level: USER) { + review_upsert( + data: { + userId_expr: "auth.uid" + movieId: $movieId + rating: $rating + reviewText: $reviewText + reviewDate_date: { today: true } + } + ) +} + +# Delete a user's review for a movie +mutation DeleteReview( + $movieId: UUID! +) @auth(level: USER) { + review_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) +} + +# Upsert (update or insert) a user based on their username +mutation UpsertUser($username: String!) @auth(level: USER) { + user_upsert( + data: { + id_expr: "auth.uid" + username: $username + } + ) +} + +# The mutations below are unused by the application, but are useful examples for more complex cases + +# Update movie information based on the provided ID +mutation UpdateMovie( + $id: UUID! + $title: String + $releaseYear: Int + $genre: String + $rating: Float + $description: String + $imageUrl: String + $tags: [String!] = [] +) @auth(level: USER_EMAIL_VERIFIED) { + movie_update( + id: $id + data: { + title: $title + releaseYear: $releaseYear + genre: $genre + rating: $rating + description: $description + imageUrl: $imageUrl + tags: $tags + } + ) +} + +# Delete a movie by its ID +mutation DeleteMovie($id: UUID!) @auth(level: USER_EMAIL_VERIFIED) { + movie_delete(id: $id) +} + +# Delete movies with a rating lower than the specified minimum rating +mutation DeleteUnpopularMovies($minRating: Float!) @auth(level: USER_EMAIL_VERIFIED) { + movie_deleteMany(where: { rating: { le: $minRating } }) +} +# End of example mutations \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql new file mode 100644 index 0000000..ca3257f --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -0,0 +1,379 @@ +# List subset of fields for movies +# query ListMovies($orderByRating: OrderDirection, $orderByReleaseYear: OrderDirection, $limit: Int) @auth(level: PUBLIC) { +# movies ( +# orderBy: [ +# { rating: $orderByRating }, +# { releaseYear: $orderByReleaseYear }] +# limit: $limit +# ) { +# id +# title +# imageUrl +# releaseYear +# genre +# rating +# tags +# description +# } +# } + +query ListMovies($limit: Int) @auth(level: PUBLIC) { + movies ( + limit: $limit + ) { + id + title + imageUrl + releaseYear + genre + rating + tags + description + } +} + +# List movies of a certain genre +query ListMoviesByGenre($genre: String!) @auth(level: PUBLIC) { + mostPopular: movies( + where: { genre: { eq: $genre } } + orderBy: { rating: DESC } + limit: 10 + ) { + id + title + imageUrl + rating + tags + } + mostRecent: movies( + where: { genre: { eq: $genre } } + orderBy: { releaseYear: DESC } + ) { + id + title + imageUrl + rating + tags + } +} + +# Get movie by id +query GetMovieById($id: UUID!) @auth(level: PUBLIC) { + movie(id: $id) { + id + title + imageUrl + releaseYear + genre + rating + description + tags + metadata: movieMetadatas_on_movie { + director + } + mainActors: actors_via_MovieActor(where: { role: { eq: "main" } }) { + id + name + imageUrl + } + supportingActors: actors_via_MovieActor( + where: { role: { eq: "supporting" } } + ) { + id + name + imageUrl + } + reviews: reviews_on_movie { + id + reviewText + reviewDate + rating + user { + id + username + } + } + } +} + +# Get actor by id +query GetActorById($id: UUID!) @auth(level: PUBLIC) { + actor(id: $id) { + id + name + imageUrl + mainActors: movies_via_MovieActor(where: { role: { eq: "main" } }) { + id + title + genre + tags + imageUrl + } + supportingActors: movies_via_MovieActor( + where: { role: { eq: "supporting" } } + ) { + id + title + genre + tags + imageUrl + } + } +} + +# Get user by ID +query GetCurrentUser @auth(level: USER) { + user(key: {id_expr: "auth.uid"}) { + id + username + reviews: reviews_on_user { + id + rating + reviewDate + reviewText + movie { + id + title + } + } + favoriteMovies: favorite_movies_on_user { + movie { + id + title + genre + imageUrl + releaseYear + rating + description + tags + metadata: movieMetadatas_on_movie { + director + } + } + } + favoriteActors: favorite_actors_on_user { + actor { + id + name + imageUrl + } + } + } +} + +# Check if a movie is favorited by user +query GetIfFavoritedMovie($movieId: UUID!) @auth(level: USER) { + favorite_movie(key: { userId_expr: "auth.uid", movieId: $movieId }) { + movieId + } +} + +# Check if an actor is favorited by user +query GetIfFavoritedActor($actorId: UUID!) @auth(level: USER) { + favorite_actor(key: { userId_expr: "auth.uid", actorId: $actorId }) { + actorId + } +} + +# Search for movies, actors, and reviews +query SearchAll( + $input: String + $minYear: Int! + $maxYear: Int! + $minRating: Float! + $maxRating: Float! + $genre: String! +) @auth(level: PUBLIC) { + moviesMatchingTitle: movies( + where: { + _and: [ + { releaseYear: { ge: $minYear } } + { releaseYear: { le: $maxYear } } + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { contains: $genre } } + { title: { contains: $input } } + ] + } + ) { + id + title + genre + rating + imageUrl + } + moviesMatchingDescription: movies( + where: { + _and: [ + { releaseYear: { ge: $minYear } } + { releaseYear: { le: $maxYear } } + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { contains: $genre } } + { description: { contains: $input } } + ] + } + ) { + id + title + genre + rating + imageUrl + } + actorsMatchingName: actors(where: { name: { contains: $input } }) { + id + name + imageUrl + } + reviewsMatchingText: reviews(where: { reviewText: { contains: $input } }) { + id + rating + reviewText + reviewDate + movie { + id + title + } + user { + id + username + } + } +} + +# Search movie descriptions using L2 similarity with Vertex AI +query SearchMovieDescriptionUsingL2Similarity($query: String!) +@auth(level: PUBLIC) { + movies_descriptionEmbedding_similarity( + compare_embed: { model: "textembedding-gecko@003", text: $query } + method: L2 + within: 2 + limit: 5 + ) { + id + title + description + tags + rating + imageUrl + } +} +# The queries below are unused by the application, but are useful examples for more complex cases + +# List movies by partial title match +query ListMoviesByPartialTitle($input: String!) @auth(level: PUBLIC) { + movies(where: { title: { contains: $input } }) { + id + title + genre + rating + imageUrl + } +} + +# List movies by tag +query ListMoviesByTag($tag: String!) @auth(level: PUBLIC) { + movies(where: { tags: { includes: $tag } }) { + id + title + imageUrl + genre + rating + } +} + +# List movies by release year range +query MoviesByReleaseYear($min: Int, $max: Int) @auth(level: PUBLIC) { + movies( + where: { releaseYear: { le: $max, ge: $min } } + orderBy: { releaseYear: ASC } + ) { + id + rating + title + imageUrl + } +} + +# List movies by rating and genre with OR filters +query SearchMovieOr( + $minRating: Float + $maxRating: Float + $genre: String + $tag: String + $input: String +) @auth(level: PUBLIC) { + movies( + where: { + _or: [ + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { eq: $genre } } + { tags: { includes: $tag } } + { title: { contains: $input } } + ] + } + ) { + id + rating + title + imageUrl + } +} + +# List movies by rating and genre with AND filters +query SearchMovieAnd( + $minRating: Float + $maxRating: Float + $genre: String + $tag: String + $input: String +) @auth(level: PUBLIC) { + movies( + where: { + _and: [ + { rating: { ge: $minRating } } + { rating: { le: $maxRating } } + { genre: { eq: $genre } } + { tags: { includes: $tag } } + { title: { contains: $input } } + ] + } + ) { + id + rating + title + imageUrl + } +} + +# Get favorite actors by user ID +query GetFavoriteActors @auth(level: USER) { + user(key: {id_expr: "auth.uid"}) { + favorite_actors_on_user { + actor { + id + name + imageUrl + } + } + } +} + +# Get favorite movies by user ID +query GetUserFavoriteMovies @auth(level: USER) { + user(id_expr: "auth.uid") { + favorite_movies_on_user { + movie { + id + title + genre + imageUrl + releaseYear + rating + description + } + } + } +} +# end of example queries diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql new file mode 100644 index 0000000..f25a8a1 --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -0,0 +1,89 @@ +# Movies +type Movie + # The below parameter values are generated by default with @table, and can be edited manually. + @table { + # implicitly calls @col to generates a column name. ex: @col(name: "movie_id") + # for UUID fields, @default(expr: "uuidV4()") is implicitly called + id: UUID! + title: String! + imageUrl: String! + releaseYear: Int + genre: String + rating: Float + description: String + tags: [String] + # Vectors -- uncomment the line below to enable vector search + descriptionEmbedding: Vector @col(size:768) +} + +# Movie Metadata +# Movie - MovieMetadata is a one-to-one relationship +type MovieMetadata + @table { + # @ref creates a field in the current table (MovieMetadata) that holds the primary key of the referenced type + # In this case, @ref(fields: "movieId", references: "id") is implied + movie: Movie! @ref + # movieId: UUID <- this is created by the above @ref + director: String +} + +# Actors +# Suppose an actor can participate in multiple movies and movies can have multiple actors +# Movie - Actors (or vice versa) is a many to many relationship +type Actor @table { + id: UUID! + imageUrl: String! + name: String! @col(name: "name", dataType: "varchar(30)") +} + +# Users +# Suppose a user can leave reviews for movies +# user-reviews is a one to many relationship, movie-reviews is a one to many relationship, movie:user is a many to many relationship +type User + @table { + id: String! @col(name: "user_auth") + username: String! @col(name: "username", dataType: "varchar(50)") + # The following are generated from the @ref in the Review table + # reviews_on_user + # movies_via_Review +} + +# Reviews +type Review @table(name: "Reviews", key: ["movie", "user"]) { + id: UUID! @default(expr: "uuidV4()") + user: User! + movie: Movie! + rating: Int + reviewText: String + reviewDate: Date! @default(expr: "request.time") +} + +# Join table for many-to-many relationship for movies and actors +# The 'key' param signifies the primary key(s) of this table +# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor] +type MovieActor @table(key: ["movie", "actor"]) { + # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type + # In this case, @ref(fields: "id") is implied + movie: Movie! + # movieId: UUID! <- this is created by the implied @ref, see: implicit.gql + + actor: Actor! + # actorId: UUID! <- this is created by the implied @ref, see: implicit.gql + + role: String! # "main" or "supporting" +} + +# Join table for many-to-many relationship for users and favorite movies +type FavoriteMovie + @table(name: "FavoriteMovies", singular: "favorite_movie", plural: "favorite_movies", key: ["user", "movie"]) { + # @ref is implicit + user: User! + movie: Movie! +} + +# Join table for many-to-many relationship for users and favorite actors +type FavoriteActor + @table(name: "FavoriteActors", singular: "favorite_actor", plural: "favorite_actors", key: ["user", "actor"]) { + user: User! + actor: Actor! +} diff --git a/Examples/FriendlyFlix/firebase.json b/Examples/FriendlyFlix/firebase.json new file mode 100644 index 0000000..c46f2c5 --- /dev/null +++ b/Examples/FriendlyFlix/firebase.json @@ -0,0 +1,31 @@ +{ + "emulators": { + "auth": { + "port": 9099 + }, + "hosting": { + "port": 5000 + }, + "dataconnect": { + "port": 9399 + }, + "ui": { + "enabled": true + }, + "singleProjectMode": true + }, + "dataconnect": { + "source": "./dataconnect" + }, + "hosting": { + "source": "app", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "frameworksBackend": { + "region": "us-central1" + } + } +} From edab184e7a245adb78a3021484cd874f836f9bbd Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Sat, 28 Sep 2024 14:42:28 +0200 Subject: [PATCH 03/50] Fix formatting Signed-off-by: Peter Friese --- .../Features/Details/DetailsSection.swift | 5 +- .../Features/Details/MovieDetailsView.swift | 20 +- .../Features/Details/MovieReviewCard.swift | 9 +- .../Features/Details/StarRatingView.swift | 2 +- .../FriendlyFlix/Features/Hero/CardView.swift | 13 +- .../Features/Hero/GradientView.swift | 11 +- .../Features/List/MovieCardView.swift | 4 +- .../Features/List/MoviesList.swift | 4 +- .../FriendlyFlix/Utilities/Color+Hex.swift | 4 +- .../FriendlyFlixTests/FriendlyFlixTests.swift | 2 - .../FriendlyFlixUITests.swift | 10 +- .../FriendlyFlixUITestsLaunchTests.swift | 1 - .../app/FriendlyFlixSDK/Package.swift | 9 +- .../Sources/FriendlyFlixClient.swift | 135 +- .../Sources/FriendlyFlixKeys.swift | 394 +- .../Sources/FriendlyFlixOperations.swift | 7569 +++++++---------- .../app/_FriendlyFlixSDK/Package.swift | 34 - .../Sources/FriendlyFlixClient.swift | 33 - .../Sources/FriendlyFlixKeys.swift | 501 -- .../Sources/FriendlyFlixOperations.swift | 5813 ------------- 20 files changed, 3134 insertions(+), 11439 deletions(-) delete mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift delete mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift delete mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift delete mode 100644 Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift index 0a94936..fed8cfb 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift @@ -17,7 +17,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI struct DetailsSection: View { @@ -75,13 +74,13 @@ struct DetailsSection: View { .bold() ScrollView(.horizontal) { LazyHStack { - ForEach(0..<10) { i in + ForEach(0 ..< 10) { i in MovieReviewCard( title: "Great stuff", rating: 4.5, reviewerName: "John Doe", review: - "Incididunt reprehenderit ad elit et commodo. Sint magna Lorem eiusmod. Ea ut culpa cupidatat Lorem culpa ad cupidatat excepteur voluptate consectetur nostrud eu laborum." + "Incididunt reprehenderit ad elit et commodo. Sint magna Lorem eiusmod. Ea ut culpa cupidatat Lorem culpa ad cupidatat excepteur voluptate consectetur nostrud eu laborum." ) .frame(width: 350) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift index 2aca1c1..13cdf1e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -1,5 +1,5 @@ // -// for.swift +// MovieDetailsView.swift // FriendlyFlix // // Created by Peter Friese on 28.08.24. @@ -21,7 +21,8 @@ import FirebaseDataConnect import FriendlyFlixSDK import SwiftUI -// introduce a common protocol for movie actors, so we can use the same view for ActorMainActors and ActorSupportingActors +// Introduce a common protocol for movie actors, so we can use the same +// view for ActorMainActors and ActorSupportingActors protocol MovieActor { var id: UUID { get set } var name: String { get set } @@ -64,7 +65,8 @@ struct MovieDetailsView: View { if let mainActors = movieDetailsRef.data?.movie?.mainActors, mainActors.count > 0 { actorsSection(title: "Main actors", actors: mainActors) } - if let supportingActors = movieDetailsRef.data?.movie?.supportingActors, supportingActors.count > 0 { + if let supportingActors = movieDetailsRef.data?.movie?.supportingActors, + supportingActors.count > 0 { actorsSection(title: "Supporting actors", actors: supportingActors) } @@ -107,10 +109,10 @@ struct MovieDetailsView: View { } // Similar Movies - // if let movie = movieRef.data?.movie { - // let metadata = "\(movie.description) \nGenres: \(movie.genres.joined(separator: " "))" - // RelatedSection(similarMoviesRef: DataConnect.moviesClient.listSimilarMoviesQueryRef(to: movie.id, metadata: metadata)) - // } + // if let movie = movieRef.data?.movie { + // let metadata = "\(movie.description) \nGenres: \(movie.genres.joined(separator: " "))" + // RelatedSection(similarMoviesRef: DataConnect.moviesClient.listSimilarMoviesQueryRef(to: movie.id, metadata: metadata)) + // } } .padding(8) } @@ -155,6 +157,6 @@ extension MovieDetailsView { } } -//#Preview { +// #Preview { // MovieDetailsView(for: UUID()) -//} +// } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift index f9f7c02..256ee38 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift @@ -48,8 +48,11 @@ struct MovieReviewCard: View { topLeading: 16, bottomLeading: 16, bottomTrailing: 16, - topTrailing: 16), - style: .continuous)) + topTrailing: 16 + ), + style: .continuous + ) + ) } } @@ -60,7 +63,7 @@ struct MovieReviewCard: View { rating: 4.5, reviewerName: "John Doe", review: - "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." + "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." ) .padding() } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift index c1d3a1e..24f5c6e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift @@ -24,7 +24,7 @@ struct StarRatingView: View { var body: some View { HStack(spacing: 4) { - ForEach(0..<5) { index in + ForEach(0 ..< 5) { index in Image(systemName: self.starType(for: index)) .foregroundColor(.yellow) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift index c1ccc83..8b12ca7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift @@ -34,10 +34,9 @@ struct CardView: View { var heroTitle: () -> Title var details: () -> Details - public init( - showDetails: Bool = false, @ViewBuilder heroView: @escaping () -> Hero, - @ViewBuilder heroTitle: @escaping () -> Title, @ViewBuilder details: @escaping () -> Details - ) { + public init(showDetails: Bool = false, @ViewBuilder heroView: @escaping () -> Hero, + @ViewBuilder heroTitle: @escaping () -> Title, + @ViewBuilder details: @escaping () -> Details) { self.showDetails = showDetails self.heroView = heroView self.heroTitle = heroTitle @@ -80,8 +79,10 @@ struct CardView: View { topLeading: cornerRadius, bottomLeading: showDetails ? 0 : 16, bottomTrailing: showDetails ? 0 : 16, - topTrailing: cornerRadius), - style: .continuous) + topTrailing: cornerRadius + ), + style: .continuous + ) ) .padding(showDetails ? 0 : 16) .shadow(radius: showDetails ? 0 : 8) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift index cc8c8e9..2376cd9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift @@ -1,5 +1,5 @@ // -// GradienConfiguration.swift +// GradientView.swift // FriendlyFlix // // Created by Peter Friese on 28.08.24. @@ -88,7 +88,8 @@ extension GradienConfiguration { .red, .purple, .indigo, .orange, .white, .blue, .yellow, .green, .mint, - ]), + ] + ), .init( name: "Neon Sunset", tagLine: "Where the Day Meets the Night", @@ -101,7 +102,8 @@ extension GradienConfiguration { colors: [ .red, .indigo, .yellow, .blue, - ]), + ] + ), .init( name: "Serenity Dusk", tagLine: "Where tranquility meets vibrancy", @@ -114,7 +116,8 @@ extension GradienConfiguration { colors: [ Color(hex: "#5a82e5"), Color(hex: "#ce6a7e"), Color(hex: "#5084e9"), Color(hex: "#d66871"), - ]), + ] + ), ] static let sample = Self.samples[0] diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift index dc5c186..d9f2f60 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift @@ -71,6 +71,6 @@ struct MovieCardView: View { } } -//#Preview { +// #Preview { // MovieCardView(showDetails: true, gradientConfiguration: GradienConfiguration.sample) -//} +// } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift index 6c00a83..2651199 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift @@ -45,8 +45,7 @@ struct MoviesList: View { .refreshable { do { let _ = try await listMovies.execute() - } catch { - } + } catch {} } } .overlay { @@ -58,7 +57,6 @@ struct MoviesList: View { } } } - } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index 4f3917d..0d79d48 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -42,6 +42,8 @@ extension Color { let green = Double((rgbValue & 0x0000_FF00) >> 8) / 255.0 let blue = Double(rgbValue & 0x0000_00FF) / 255.0 - self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha) // Use alpha instead of opacity + self + .init(.sRGB, red: red, green: green, blue: blue, + opacity: alpha) // Use alpha instead of opacity } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift index 921120a..b358975 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift @@ -22,9 +22,7 @@ import Testing @testable import FriendlyFlix struct FriendlyFlixTests { - @Test func example() async throws { // Write your test here and use APIs like `#expect(...)` to check expected conditions. } - } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift index 6a6fea6..6660d98 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift @@ -20,18 +20,20 @@ import XCTest final class FriendlyFlixUITests: XCTestCase { - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. + // Put setup code here. This method is called before the invocation of each test method in the + // class. // In UI tests it is usually best to stop immediately when a failure occurs. continueAfterFailure = false - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + // In UI tests it’s important to set the initial state - such as interface orientation - + // required for your tests before they run. The setUp method is a good place to do this. } override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. + // Put teardown code here. This method is called after the invocation of each test method in the + // class. } @MainActor diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift index d0b7ca7..416b40a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift @@ -20,7 +20,6 @@ import XCTest final class FriendlyFlixUITestsLaunchTests: XCTestCase { - override class var runsForEachTargetApplicationUIConfiguration: Bool { true } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 465913e..e30f7c9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -14,19 +14,20 @@ let package = Package( products: [ .library( name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]) + targets: ["FriendlyFlixSDK"] + ), ], dependencies: [ - .package(name: "FirebaseDataConnect", path: "../../../../") + .package(name: "FirebaseDataConnect", path: "../../../../"), ], targets: [ .target( name: "FriendlyFlixSDK", dependencies: [ - .product(name: "FirebaseDataConnect", package: "FirebaseDataConnect") + .product(name: "FirebaseDataConnect", package: "FirebaseDataConnect"), ], path: "Sources" - ) + ), ] ) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index efa1322..1e9aadf 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,93 +1,88 @@ -import Foundation import FirebaseDataConnect - - - - - - +import Foundation public extension DataConnect { - static var friendlyFlixConnector: FriendlyFlixConnector = { let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "friendly-flix-service", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) - self.deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) - self.deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) - self.deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - self.searchMovieDescriptionUsingL2similarityQuery = SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) - self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - self.listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) - self.moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) - self.searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) - self.searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) - self.getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) - self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) - + // init operations + createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) + deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) + deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) + deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + searchMovieDescriptionUsingL2similarityQuery = + SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) + listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) + moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) + searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) + searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) + getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) + getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let createMovieMutation: CreateMovieMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addFavoritedActorMutation: AddFavoritedActorMutation -public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation -public let addReviewMutation: AddReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let upsertUserMutation: UpsertUserMutation -public let updateMovieMutation: UpdateMovieMutation -public let deleteMovieMutation: DeleteMovieMutation -public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation -public let listMoviesQuery: ListMoviesQuery -public let listMoviesByGenreQuery: ListMoviesByGenreQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery -public let searchAllQuery: SearchAllQuery -public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery -public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery -public let listMoviesByTagQuery: ListMoviesByTagQuery -public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery -public let searchMovieOrQuery: SearchMovieOrQuery -public let searchMovieAndQuery: SearchMovieAndQuery -public let getFavoriteActorsQuery: GetFavoriteActorsQuery -public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery - + public let createMovieMutation: CreateMovieMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addFavoritedActorMutation: AddFavoritedActorMutation + public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation + public let addReviewMutation: AddReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let upsertUserMutation: UpsertUserMutation + public let updateMovieMutation: UpdateMovieMutation + public let deleteMovieMutation: DeleteMovieMutation + public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation + public let listMoviesQuery: ListMoviesQuery + public let listMoviesByGenreQuery: ListMoviesByGenreQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery + public let searchAllQuery: SearchAllQuery + public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery + public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery + public let listMoviesByTagQuery: ListMoviesByTagQuery + public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery + public let searchMovieOrQuery: SearchMovieOrQuery + public let searchMovieAndQuery: SearchMovieAndQuery + public let getFavoriteActorsQuery: GetFavoriteActorsQuery + public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 59be0f9..875ca8f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,500 +2,378 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct FavoriteActorKey { - public private(set) var userId: String - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case actorId - + case userId + + case actorId } } -extension FavoriteActorKey : Codable { +extension FavoriteActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension FavoriteActorKey : Equatable { +extension FavoriteActorKey: Equatable { public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension FavoriteActorKey : Hashable { +extension FavoriteActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.actorId) - + hasher.combine(userId) + + hasher.combine(actorId) } } - - public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } - - public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index dde7e2e..b3882f7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,279 +1,207 @@ import FirebaseDataConnect import Foundation +// MARK: Common Enums +public enum OrderDirection: String, Codable { + case ASC + case DESC +} +// End enum definitions +public class CreateMovieMutation { + let dataConnect: DataConnect + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + public static let OperationName = "CreateMovie" + public typealias Ref = MutationRef + public struct Variables: OperationVariable { + public var + title: String + public var + releaseYear: Int + public var + genre: String + @OptionalVariable + public var + rating: Double? + @OptionalVariable + public var + description: String? + public var + imageUrl: String + @OptionalVariable + public var + tags: [String]? + public init(title: String, + releaseYear: Int, + genre: String, + imageUrl: String, + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl -// MARK: Common Enums - -public enum OrderDirection: String, Codable { - case ASC = "ASC" - case DESC = "DESC" - } - -// End enum definitions - - - - - - - - - -public class CreateMovieMutation{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "CreateMovie" + if let optionalVars { + optionalVars(&self) + } + } - public typealias Ref = MutationRef + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + } - public struct Variables: OperationVariable { - - - public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(title) - - - public var -releaseYear: Int + hasher.combine(releaseYear) - - - public var -genre: String + hasher.combine(genre) - - @OptionalVariable - public var -rating: Double? + hasher.combine(rating) - - @OptionalVariable - public var -description: String? + hasher.combine(description) - - - public var -imageUrl: String + hasher.combine(imageUrl) - - @OptionalVariable - public var -tags: [String]? - - - - - - public init ( - -title: String -, - -releaseYear: Int -, - -genre: String -, - -imageUrl: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.title = title - self.releaseYear = releaseYear - self.genre = genre - self.imageUrl = imageUrl - - - - if let optionalVars { - optionalVars(&self) - } - + hasher.combine(tags) } - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - -} - enum CodingKeys: String, CodingKey { - case title - + case releaseYear - + case genre - + case rating - + case description - + case imageUrl - + case tags - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(title, forKey: .title, container: &container) - - - + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) } - - + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) } - } - } public struct Data: Decodable { + public var + movie_insert: MovieKey + } + + public func ref(title: String, + + releaseYear: Int, + + genre: String, + imageUrl: String, + _ optionalVars: ((inout CreateMovieMutation.Variables) -> Void)? = nil) + -> MutationRef< + CreateMovieMutation.Data, + CreateMovieMutation.Variables + > { + var variables = CreateMovieMutation.Variables( + title: title, + releaseYear: releaseYear, + genre: genre, + imageUrl: imageUrl + ) -public var -movie_insert: MovieKey + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.mutation( + name: "CreateMovie", + variables: variables, + resultsDataType: CreateMovieMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -title: String -, -releaseYear: Int -, -genre: String -, -imageUrl: String - - - , - _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -title: String -, -releaseYear: Int -, -genre: String -, -imageUrl: String - - - , - _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) - - return try await ref.execute() - - } -} + public func execute(title: String, + + releaseYear: Int, + genre: String, + imageUrl: String, + _ optionalVars: ((inout CreateMovieMutation.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = CreateMovieMutation.Variables( + title: title, + releaseYear: releaseYear, + genre: genre, + imageUrl: imageUrl + ) + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.mutation( + name: "CreateMovie", + variables: variables, + resultsDataType: CreateMovieMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -282,104 +210,76 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID + public var + movieId: UUID - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -388,104 +288,75 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddFavoritedActorMutation{ + return try await ref.execute() + } +} +public class AddFavoritedActorMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -494,104 +365,76 @@ public class AddFavoritedActorMutation{ public static let OperationName = "AddFavoritedActor" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedActorMutation.Data, + AddFavoritedActorMutation.Variables + > public struct Variables: OperationVariable { - - - public var -actorId: UUID + public var + actorId: UUID - - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - + public init(actorId: UUID) { + self.actorId = actorId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - + return lhs.actorId == rhs.actorId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(actorId) + } enum CodingKeys: String, CodingKey { - case actorId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_actor_upsert: FavoriteActorKey - + public var + favorite_actor_upsert: FavoriteActorKey } - public func ref( - -actorId: UUID - - ) -> MutationRef { - var variables = AddFavoritedActorMutation.Variables(actorId:actorId) - - - let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -actorId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedActorMutation.Variables(actorId:actorId) - - - let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(actorId: UUID) -> MutationRef< + AddFavoritedActorMutation.Data, + AddFavoritedActorMutation.Variables + > { + var variables = AddFavoritedActorMutation.Variables(actorId: actorId) + let ref = dataConnect.mutation( + name: "AddFavoritedActor", + variables: variables, + resultsDataType: AddFavoritedActorMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedActorMutation.Data, + AddFavoritedActorMutation.Variables + > + } + public func execute(actorId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedActorMutation.Variables(actorId: actorId) + let ref = dataConnect.mutation( + name: "AddFavoritedActor", + variables: variables, + resultsDataType: AddFavoritedActorMutation.Data.self + ) -public class DeleteFavoritedActorMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedActorMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -600,104 +443,75 @@ public class DeleteFavoritedActorMutation{ public static let OperationName = "DeleteFavoritedActor" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedActorMutation.Data, + DeleteFavoritedActorMutation.Variables + > public struct Variables: OperationVariable { - - - public var -actorId: UUID - - - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - + public var + actorId: UUID - + public init(actorId: UUID) { + self.actorId = actorId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - + return lhs.actorId == rhs.actorId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(actorId) + } enum CodingKeys: String, CodingKey { - case actorId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_actor_delete: FavoriteActorKey? - + public var + favorite_actor_delete: FavoriteActorKey? } - public func ref( - -actorId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -actorId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(actorId: UUID) + -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId: actorId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedActor", + variables: variables, + resultsDataType: DeleteFavoritedActorMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedActorMutation.Data, + DeleteFavoritedActorMutation.Variables + > + } + public func execute(actorId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedActorMutation.Variables(actorId: actorId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedActor", + variables: variables, + resultsDataType: DeleteFavoritedActorMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -706,148 +520,109 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable { + public var + review_upsert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_upsert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -856,104 +631,69 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class UpsertUserMutation{ + return try await ref.execute() + } +} +public class UpsertUserMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -962,104 +702,69 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - - - - - - public init ( - -username: String + public var + username: String - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class UpdateMovieMutation{ + return try await ref.execute() + } +} +public class UpdateMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1068,223 +773,180 @@ public class UpdateMovieMutation{ public static let OperationName = "UpdateMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -id: UUID + public var + id: UUID - - @OptionalVariable - public var -title: String? + @OptionalVariable + public var + title: String? - - @OptionalVariable - public var -releaseYear: Int? + @OptionalVariable + public var + releaseYear: Int? - - @OptionalVariable - public var -genre: String? + @OptionalVariable + public var + genre: String? - - @OptionalVariable - public var -rating: Double? + @OptionalVariable + public var + rating: Double? - - @OptionalVariable - public var -description: String? + @OptionalVariable + public var + description: String? - - @OptionalVariable - public var -imageUrl: String? + @OptionalVariable + public var + imageUrl: String? - - @OptionalVariable - public var -tags: [String]? - - - - - - public init ( - -id: UUID - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.id = id - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + tags: [String]? + + public init(id: UUID, + + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.id = id + + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id && - lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - -} + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + } + + enum CodingKeys: String, CodingKey { + case id + + case title + + case releaseYear + + case genre + + case rating + + case description - enum CodingKeys: String, CodingKey { - - case id - - case title - - case releaseYear - - case genre - - case rating - - case description - case imageUrl - + case tags - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - - if $title.isSet { - try codecHelper.encode(title, forKey: .title, container: &container) + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) } - - if $releaseYear.isSet { - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) } - - if $imageUrl.isSet { - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) } - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) } - } - } public struct Data: Decodable { + public var + movie_update: MovieKey? + } + public func ref(id: UUID, + _ optionalVars: ((inout UpdateMovieMutation.Variables) -> Void)? = nil) + -> MutationRef< + UpdateMovieMutation.Data, + UpdateMovieMutation.Variables + > { + var variables = UpdateMovieMutation.Variables(id: id) -public var -movie_update: MovieKey? + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.mutation( + name: "UpdateMovie", + variables: variables, + resultsDataType: UpdateMovieMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -id: UUID - - - , - _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = UpdateMovieMutation.Variables(id:id) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -id: UUID - - - , - _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = UpdateMovieMutation.Variables(id:id) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(id: UUID, + _ optionalVars: ((inout UpdateMovieMutation.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = UpdateMovieMutation.Variables(id: id) + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.mutation( + name: "UpdateMovie", + variables: variables, + resultsDataType: UpdateMovieMutation.Data.self + ) -public class DeleteMovieMutation{ + return try await ref.execute() + } +} +public class DeleteMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1293,104 +955,67 @@ public class DeleteMovieMutation{ public static let OperationName = "DeleteMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { - - - -public var -movie_delete: MovieKey? - + public var + movie_delete: MovieKey? } - public func ref( - -id: UUID - - ) -> MutationRef { - var variables = DeleteMovieMutation.Variables(id:id) - - - let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = DeleteMovieMutation.Variables(id:id) - - - let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(id: UUID) + -> MutationRef { + var variables = DeleteMovieMutation.Variables(id: id) + let ref = dataConnect.mutation( + name: "DeleteMovie", + variables: variables, + resultsDataType: DeleteMovieMutation.Data.self + ) + return ref as MutationRef + } + public func execute(id: UUID) async throws -> OperationResult { + var variables = DeleteMovieMutation.Variables(id: id) + let ref = dataConnect.mutation( + name: "DeleteMovie", + variables: variables, + resultsDataType: DeleteMovieMutation.Data.self + ) -public class DeleteUnpopularMoviesMutation{ + return try await ref.execute() + } +} +public class DeleteUnpopularMoviesMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1399,103 +1024,75 @@ public class DeleteUnpopularMoviesMutation{ public static let OperationName = "DeleteUnpopularMovies" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteUnpopularMoviesMutation.Data, + DeleteUnpopularMoviesMutation.Variables + > public struct Variables: OperationVariable { - - - public var -minRating: Double - - - - - - public init ( - -minRating: Double - - - ) { - self.minRating = minRating - + public var + minRating: Double - + public init(minRating: Double) { + self.minRating = minRating } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating - + return lhs.minRating == rhs.minRating } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(minRating) + } enum CodingKeys: String, CodingKey { - case minRating - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - } - } public struct Data: Decodable { - - -public var -movie_deleteMany: Int - + public var + movie_deleteMany: Int } - public func ref( - -minRating: Double - - ) -> MutationRef { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) - - - let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -minRating: Double - - ) async throws -> OperationResult { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) - - - let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(minRating: Double) + -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating: minRating) + let ref = dataConnect.mutation( + name: "DeleteUnpopularMovies", + variables: variables, + resultsDataType: DeleteUnpopularMoviesMutation.Data.self + ) + return ref as MutationRef< + DeleteUnpopularMoviesMutation.Data, + DeleteUnpopularMoviesMutation.Variables + > + } + public func execute(minRating: Double) async throws + -> OperationResult { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating: minRating) + let ref = dataConnect.mutation( + name: "DeleteUnpopularMovies", + variables: variables, + resultsDataType: DeleteUnpopularMoviesMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1504,243 +1101,170 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.limit == rhs.limit - + return lhs.limit == rhs.limit } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(limit) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID - - - -public var -title: String + public var + tags: [String]? + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -imageUrl: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -releaseYear: Int? + case title + case imageUrl + case releaseYear -public var -genre: String? + case genre + case rating + case tags -public var -rating: Double? + case description + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -tags: [String]? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) -public var -description: String? + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } + public var + movies: [Movie] } - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } + public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class ListMoviesByGenreQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class ListMoviesByGenreQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1749,295 +1273,200 @@ public class ListMoviesByGenreQuery{ public static let OperationName = "ListMoviesByGenre" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByGenreQuery.Data, + ListMoviesByGenreQuery.Variables + > public struct Variables: OperationVariable { - - - public var -genre: String - + public var + genre: String - - - - public init ( - -genre: String - - - ) { - self.genre = genre - - - + public init(genre: String) { + self.genre = genre } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.genre == rhs.genre - + return lhs.genre == rhs.genre } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(genre) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable { + public struct MovieMostPopular: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + rating: Double? -public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { - + public var + tags: [String]? + public var movieMostPopularKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -id: UUID - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case imageUrl -public var -imageUrl: String + case rating + case tags + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) -public var -tags: [String]? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + } + } - - public var movieMostPopularKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + mostPopular: [MovieMostPopular] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostPopular: [MovieMostPopular] + public struct MovieMostRecent: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + rating: Double? + public var + tags: [String]? -public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { - + public var movieMostRecentKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -title: String + case imageUrl + case rating + case tags + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + } + } -public var -tags: [String]? + public var + mostRecent: [MovieMostRecent] + } + public func ref(genre: String) -> QueryRefObservation< + ListMoviesByGenreQuery.Data, + ListMoviesByGenreQuery.Variables + > { + var variables = ListMoviesByGenreQuery.Variables(genre: genre) - - public var movieMostRecentKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "ListMoviesByGenre", + variables: variables, + resultsDataType: ListMoviesByGenreQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation< + ListMoviesByGenreQuery.Data, + ListMoviesByGenreQuery.Variables + > } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostRecent: [MovieMostRecent] + public func execute(genre: String) async throws -> OperationResult { + var variables = ListMoviesByGenreQuery.Variables(genre: genre) - } + let ref = dataConnect.query( + name: "ListMoviesByGenre", + variables: variables, + resultsDataType: ListMoviesByGenreQuery.Data.self, + publisher: .observableMacro + ) - public func ref( - -genre: String - - ) -> QueryRefObservation { - var variables = ListMoviesByGenreQuery.Variables(genre:genre) - - - let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -genre: String - - ) async throws -> OperationResult { - var variables = ListMoviesByGenreQuery.Variables(genre:genre) - - - let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } + let refCast = ref as! QueryRefObservation< + ListMoviesByGenreQuery.Data, + ListMoviesByGenreQuery.Variables + > + return try await refCast.execute() + } } - - - - - -public class GetMovieByIdQuery{ - +public class GetMovieByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2046,579 +1475,395 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - + public var + id: UUID - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + genre: String? + public var + rating: Double? -public var -title: String - - - -public var -imageUrl: String + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable { + public var + director: String? -public var -releaseYear: Int? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -genre: String? + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -rating: Double? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -description: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -tags: [String]? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public struct MovieMetadataMetadata: Decodable { - + public var + mainActors: [ActorMainActors] + public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -director: String? + public var + name: String + public var + imageUrl: String - + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } - - enum CodingKeys: String, CodingKey { - - case director - - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { - + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + reviewText: String? -public var -name: String + public var + reviewDate: LocalDate + public var + rating: Int? + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String -public var -imageUrl: String + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case reviewText + case reviewDate -public var -name: String + case rating + case user + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct ReviewReviews: Decodable { - + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case title + case imageUrl + case releaseYear -public var -reviewText: String? + case genre + case rating + case description -public var -reviewDate: LocalDate + case tags + case metadata + case mainActors -public var -rating: Int? + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) -public var -id: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) -public var -username: String + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - - enum CodingKeys: String, CodingKey { - - case id - - case username - + public var + movie: Movie? } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation } -} -public var -reviews: [ReviewReviews] + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2627,382 +1872,257 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID + public var + id: UUID - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Actor: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - + public var + title: String + public var + genre: String? -public var -id: UUID + public var + tags: [String]? + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -name: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: UUID + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -title: String + public var + mainActors: [MovieMainActors] + public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public var -genre: String? + public var + genre: String? + public var + tags: [String]? + public var + imageUrl: String -public var -tags: [String]? + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } -public var -imageUrl: String + enum CodingKeys: String, CodingKey { + case id + case title - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + case genre - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case tags + case imageUrl + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + supportingActors: [MovieSupportingActors] + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -title: String + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -genre: String? + case imageUrl + case mainActors + case supportingActors + } -public var -tags: [String]? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -imageUrl: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) - } + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() + } } - - - - - -public class GetCurrentUserQuery{ - +public class GetCurrentUserQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3011,577 +2131,404 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable { + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - - -public struct ReviewReviews: Decodable { - - - -public var -id: UUID - - - -public var -rating: Int? - + public var + reviewDate: LocalDate + public var + reviewText: String? -public var -reviewDate: LocalDate + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -reviewText: String? + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } -public var -id: UUID + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case reviewDate + case reviewText - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + case movie + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public struct FavoriteMovieFavoriteMovies: Decodable { - + public var + genre: String? + public var + imageUrl: String + public var + releaseYear: Int? + public var + rating: Double? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public var + description: String? + public var + tags: [String]? -public var -id: UUID + public struct MovieMetadataMetadata: Decodable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -title: String + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -genre: String? + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case genre + case imageUrl -public var -releaseYear: Int? + case releaseYear + case rating + case description -public var -rating: Double? + case tags + case metadata + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -description: String? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public struct MovieMetadataMetadata: Decodable { - + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie -public var -director: String? + enum CodingKeys: String, CodingKey { + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } - - enum CodingKeys: String, CodingKey { - - case director - - } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public struct FavoriteActorFavoriteActors: Decodable { + public struct Actor: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + public var + name: String + public var + imageUrl: String - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } - + enum CodingKeys: String, CodingKey { + case id - - enum CodingKeys: String, CodingKey { - - case movie - - } + case name - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + case imageUrl + } - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + actor: Actor -public struct FavoriteActorFavoriteActors: Decodable { - + enum CodingKeys: String, CodingKey { + case actor + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + } + } + public var + favoriteActors: [FavoriteActorFavoriteActors] -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public var -name: String + case reviews + case favoriteMovies + case favoriteActors + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) - + favoriteActors = try codecHelper.decode( + [FavoriteActorFavoriteActors].self, + forKey: .favoriteActors, + container: &container + ) + } + } - - enum CodingKeys: String, CodingKey { - - case actor - + public var + user: User? } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - - + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation } -} -public var -favoriteActors: [FavoriteActorFavoriteActors] + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - case favoriteActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - - self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) - - - } -} -public var -user: User? + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetIfFavoritedMovieQuery{ - +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3590,134 +2537,97 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { + public struct FavoriteMovie: Decodable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable { - - - -public var -movieId: UUID - + public var + favorite_movie: FavoriteMovie? + } - + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - enum CodingKeys: String, CodingKey { - - case movieId - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - - } -} -public var -favorite_movie: FavoriteMovie? + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -movieId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetIfFavoritedActorQuery{ - +public class GetIfFavoritedActorQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3726,845 +2636,587 @@ public class GetIfFavoritedActorQuery{ public static let OperationName = "GetIfFavoritedActor" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedActorQuery.Data, + GetIfFavoritedActorQuery.Variables + > public struct Variables: OperationVariable { - - - public var -actorId: UUID - + public var + actorId: UUID - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - + public init(actorId: UUID) { + self.actorId = actorId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - + return lhs.actorId == rhs.actorId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(actorId) + } enum CodingKeys: String, CodingKey { - case actorId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - } - } public struct Data: Decodable { + public struct FavoriteActor: Decodable { + public var + actorId: UUID + enum CodingKeys: String, CodingKey { + case actorId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } + } -public struct FavoriteActor: Decodable { - + public var + favorite_actor: FavoriteActor? + } + public func ref(actorId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId: actorId) -public var -actorId: UUID + let ref = dataConnect.query( + name: "GetIfFavoritedActor", + variables: variables, + resultsDataType: GetIfFavoritedActorQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedActorQuery.Data, + GetIfFavoritedActorQuery.Variables + > + } + public func execute(actorId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedActorQuery.Variables(actorId: actorId) - + let ref = dataConnect.query( + name: "GetIfFavoritedActor", + variables: variables, + resultsDataType: GetIfFavoritedActorQuery.Data.self, + publisher: .observableMacro + ) - - enum CodingKeys: String, CodingKey { - - case actorId - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedActorQuery.Data, + GetIfFavoritedActorQuery.Variables + > + return try await refCast.execute() } +} - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public class SearchAllQuery { + let dataConnect: DataConnect - - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - - + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } -} -public var -favorite_actor: FavoriteActor? - } + public static let OperationName = "SearchAll" - public func ref( - -actorId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) - - - let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -actorId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) - - - let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public typealias Ref = QueryRefObservation + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double -public class SearchAllQuery{ + public var + genre: String - let dataConnect: DataConnect + public init(minYear: Int, - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxYear: Int, - public static let OperationName = "SearchAll" + minRating: Double, - public typealias Ref = QueryRefObservation + maxRating: Double, - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + genre: String, - - - public var -minYear: Int + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - - - public var -maxYear: Int + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minRating: Double + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxRating: Double + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minYear) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable { + public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { - + public var + imageUrl: String + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -id: UUID + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -title: String + case title + case genre + case rating -public var -genre: String? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -rating: Double? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -imageUrl: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + public var + title: String + public var + genre: String? + public var + rating: Double? + public var + imageUrl: String + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -title: String + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -genre: String? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -rating: Double? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] -public var -imageUrl: String - - - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -name: String + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -imageUrl: String + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var + actorsMatchingName: [ActorActorsMatchingName] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable { + public var + id: UUID + public var + rating: Int? + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public struct ReviewReviewsMatchingText: Decodable { - + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -id: UUID + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -rating: Int? + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -reviewText: String? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String -public var -reviewDate: LocalDate + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -id: UUID + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case rating - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + case reviewText - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + case reviewDate - + case movie - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + case user + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviewsMatchingText: [ReviewReviewsMatchingText] + } -public var -id: String + public func ref(minYear: Int, + maxYear: Int, + minRating: Double, -public var -username: String + maxRating: Double, + genre: String, - - public var userKey: UserKey { - return UserKey( - - id: id + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre ) - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - + if let optionalVars { + optionalVars(&variables) + } - - enum CodingKeys: String, CodingKey { - - case id - - case username - + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func execute(minYear: Int, - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + maxYear: Int, - } - - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + minRating: Double, + maxRating: Double, + genre: String, + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) -public class SearchMovieDescriptionUsingL2similarityQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class SearchMovieDescriptionUsingL2similarityQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4573,208 +3225,150 @@ public class SearchMovieDescriptionUsingL2similarityQuery{ public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + SearchMovieDescriptionUsingL2similarityQuery.Data, + SearchMovieDescriptionUsingL2similarityQuery.Variables + > public struct Variables: OperationVariable { - - - public var -query: String - + public var + query: String - - - - public init ( - -query: String - - - ) { - self.query = query - - - + public init(query: String) { + self.query = query } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.query == rhs.query - + return lhs.query == rhs.query } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(query) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(query) + } enum CodingKeys: String, CodingKey { - case query - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(query, forKey: .query, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + description: String? + public var + tags: [String]? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public var + rating: Double? + public var + imageUrl: String -public var -id: UUID - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -title: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -description: String? + case description + case tags + case rating -public var -tags: [String]? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -rating: Double? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies_descriptionEmbedding_similarity: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case description - - case tags - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies_descriptionEmbedding_similarity: [Movie] + public func ref(query: String) + -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query: query) + let ref = dataConnect.query( + name: "SearchMovieDescriptionUsingL2Similarity", + variables: variables, + resultsDataType: SearchMovieDescriptionUsingL2similarityQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + SearchMovieDescriptionUsingL2similarityQuery.Data, + SearchMovieDescriptionUsingL2similarityQuery.Variables + > } - public func ref( - -query: String - - ) -> QueryRefObservation { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) - - - let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -query: String - - ) async throws -> OperationResult { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) - - - let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - + public func execute(query: String) async throws + -> OperationResult { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query: query) + let ref = dataConnect.query( + name: "SearchMovieDescriptionUsingL2Similarity", + variables: variables, + resultsDataType: SearchMovieDescriptionUsingL2similarityQuery.Data.self, + publisher: .observableMacro + ) -public class ListMoviesByPartialTitleQuery{ + let refCast = ref as! QueryRefObservation< + SearchMovieDescriptionUsingL2similarityQuery.Data, + SearchMovieDescriptionUsingL2similarityQuery.Variables + > + return try await refCast.execute() + } +} +public class ListMoviesByPartialTitleQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4783,198 +3377,139 @@ public class ListMoviesByPartialTitleQuery{ public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > public struct Variables: OperationVariable { - - - public var -input: String - - - - - - public init ( - -input: String + public var + input: String - - ) { - self.input = input - - - + public init(input: String) { + self.input = input } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input - + return lhs.input == rhs.input } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(input) + } enum CodingKeys: String, CodingKey { - case input - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(input, forKey: .input, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - + public var + imageUrl: String -public var -id: UUID + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] + public func ref(input: String) + -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input: input) + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > } - public func ref( - -input: String - - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(input:input) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -input: String - - ) async throws -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(input:input) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - + public func execute(input: String) async throws + -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(input: input) + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) -public class ListMoviesByTagQuery{ + let refCast = ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > + return try await refCast.execute() + } +} +public class ListMoviesByTagQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4983,198 +3518,139 @@ public class ListMoviesByTagQuery{ public static let OperationName = "ListMoviesByTag" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByTagQuery.Data, + ListMoviesByTagQuery.Variables + > public struct Variables: OperationVariable { - - - public var -tag: String - - - - - - public init ( - -tag: String + public var + tag: String - - ) { - self.tag = tag - - - + public init(tag: String) { + self.tag = tag } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.tag == rhs.tag - + return lhs.tag == rhs.tag } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(tag) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(tag) + } enum CodingKeys: String, CodingKey { - case tag - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(tag, forKey: .tag, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + genre: String? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - + public var + rating: Double? -public var -id: UUID + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case imageUrl -public var -imageUrl: String + case genre + case rating + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -genre: String? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) -public var -rating: Double? + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case genre - - case rating - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - } -} -public var -movies: [Movie] + public func ref(tag: String) -> QueryRefObservation< + ListMoviesByTagQuery.Data, + ListMoviesByTagQuery.Variables + > { + var variables = ListMoviesByTagQuery.Variables(tag: tag) + let ref = dataConnect.query( + name: "ListMoviesByTag", + variables: variables, + resultsDataType: ListMoviesByTagQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + ListMoviesByTagQuery.Data, + ListMoviesByTagQuery.Variables + > } - public func ref( - -tag: String - - ) -> QueryRefObservation { - var variables = ListMoviesByTagQuery.Variables(tag:tag) - - - let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -tag: String - - ) async throws -> OperationResult { - var variables = ListMoviesByTagQuery.Variables(tag:tag) - - - let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - + public func execute(tag: String) async throws -> OperationResult { + var variables = ListMoviesByTagQuery.Variables(tag: tag) + let ref = dataConnect.query( + name: "ListMoviesByTag", + variables: variables, + resultsDataType: ListMoviesByTagQuery.Data.self, + publisher: .observableMacro + ) -public class MoviesByReleaseYearQuery{ + let refCast = ref as! QueryRefObservation< + ListMoviesByTagQuery.Data, + ListMoviesByTagQuery.Variables + > + return try await refCast.execute() + } +} +public class MoviesByReleaseYearQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -5183,214 +3659,158 @@ public class MoviesByReleaseYearQuery{ public static let OperationName = "MoviesByReleaseYear" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + MoviesByReleaseYearQuery.Data, + MoviesByReleaseYearQuery.Variables + > public struct Variables: OperationVariable { - - @OptionalVariable - public var -min: Int? + @OptionalVariable + public var + min: Int? - - @OptionalVariable - public var -max: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + max: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.min == rhs.min && - lhs.max == rhs.max - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(min) - - hasher.combine(max) - -} + return lhs.min == rhs.min && + lhs.max == rhs.max + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(min) + + hasher.combine(max) + } enum CodingKeys: String, CodingKey { - case min - + case max - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $min.isSet { - try codecHelper.encode(min, forKey: .min, container: &container) + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) } - - if $max.isSet { - try codecHelper.encode(max, forKey: .max, container: &container) + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + rating: Double? + public var + title: String + public var + imageUrl: String -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -rating: Double? + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case title + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + title = try codecHelper.decode(String.self, forKey: .title, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + movies: [Movie] } - public func ref( - - - - _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = MoviesByReleaseYearQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = MoviesByReleaseYearQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public func ref(_ optionalVars: ((inout MoviesByReleaseYearQuery.Variables) -> Void)? = nil) + -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "MoviesByReleaseYear", + variables: variables, + resultsDataType: MoviesByReleaseYearQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + MoviesByReleaseYearQuery.Data, + MoviesByReleaseYearQuery.Variables + > + } + public func execute(_ optionalVars: ((inout MoviesByReleaseYearQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = MoviesByReleaseYearQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "MoviesByReleaseYear", + variables: variables, + resultsDataType: MoviesByReleaseYearQuery.Data.self, + publisher: .observableMacro + ) -public class SearchMovieOrQuery{ + let refCast = ref as! QueryRefObservation< + MoviesByReleaseYearQuery.Data, + MoviesByReleaseYearQuery.Variables + > + return try await refCast.execute() + } +} +public class SearchMovieOrQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -5399,256 +3819,193 @@ public class SearchMovieOrQuery{ public static let OperationName = "SearchMovieOr" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -minRating: Double? + @OptionalVariable + public var + minRating: Double? - - @OptionalVariable - public var -maxRating: Double? + @OptionalVariable + public var + maxRating: Double? - - @OptionalVariable - public var -genre: String? + @OptionalVariable + public var + genre: String? - - @OptionalVariable - public var -tag: String? + @OptionalVariable + public var + tag: String? - - @OptionalVariable - public var -input: String? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + input: String? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - -} + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + } enum CodingKeys: String, CodingKey { - case minRating - + case maxRating - + case genre - + case tag - + case input - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + rating: Double? + public var + title: String + public var + imageUrl: String -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -rating: Double? + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case title + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + title = try codecHelper.decode(String.self, forKey: .title, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + movies: [Movie] } - public func ref( - - - - _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieOrQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchMovieOrQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public func ref(_ optionalVars: ((inout SearchMovieOrQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchMovieOrQuery.Data, + SearchMovieOrQuery.Variables + > { + var variables = SearchMovieOrQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchMovieOr", + variables: variables, + resultsDataType: SearchMovieOrQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } + public func execute(_ optionalVars: ((inout SearchMovieOrQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchMovieOrQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchMovieOr", + variables: variables, + resultsDataType: SearchMovieOrQuery.Data.self, + publisher: .observableMacro + ) -public class SearchMovieAndQuery{ + let refCast = ref as! QueryRefObservation< + SearchMovieOrQuery.Data, + SearchMovieOrQuery.Variables + > + return try await refCast.execute() + } +} +public class SearchMovieAndQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -5657,256 +4014,196 @@ public class SearchMovieAndQuery{ public static let OperationName = "SearchMovieAnd" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + SearchMovieAndQuery.Data, + SearchMovieAndQuery.Variables + > public struct Variables: OperationVariable { - - @OptionalVariable - public var -minRating: Double? + @OptionalVariable + public var + minRating: Double? - - @OptionalVariable - public var -maxRating: Double? + @OptionalVariable + public var + maxRating: Double? - - @OptionalVariable - public var -genre: String? + @OptionalVariable + public var + genre: String? - - @OptionalVariable - public var -tag: String? + @OptionalVariable + public var + tag: String? - - @OptionalVariable - public var -input: String? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + input: String? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - -} + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + } enum CodingKeys: String, CodingKey { - case minRating - + case maxRating - + case genre - + case tag - + case input - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + rating: Double? + public var + title: String + public var + imageUrl: String -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -rating: Double? + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case title + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + title = try codecHelper.decode(String.self, forKey: .title, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + movies: [Movie] } - public func ref( - - - - _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieAndQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchMovieAndQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public func ref(_ optionalVars: ((inout SearchMovieAndQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchMovieAndQuery.Data, + SearchMovieAndQuery.Variables + > { + var variables = SearchMovieAndQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchMovieAnd", + variables: variables, + resultsDataType: SearchMovieAndQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } + public func execute(_ optionalVars: ((inout SearchMovieAndQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchMovieAndQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchMovieAnd", + variables: variables, + resultsDataType: SearchMovieAndQuery.Data.self, + publisher: .observableMacro + ) -public class GetFavoriteActorsQuery{ + let refCast = ref as! QueryRefObservation< + SearchMovieAndQuery.Data, + SearchMovieAndQuery.Variables + > + return try await refCast.execute() + } +} +public class GetFavoriteActorsQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -5915,184 +4212,134 @@ public class GetFavoriteActorsQuery{ public static let OperationName = "GetFavoriteActors" - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { + public typealias Ref = QueryRefObservation< + GetFavoriteActorsQuery.Data, + GetFavoriteActorsQuery.Variables + > - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable { + public struct User: Decodable { + public struct FavoriteActor: Decodable { + public struct Actor: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } -public struct User: Decodable { - - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct FavoriteActor: Decodable { - + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -imageUrl: String + public var + actor: Actor + enum CodingKeys: String, CodingKey { + case actor + } - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor + actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + } + } + public var + favorite_actors_on_user: [FavoriteActor] - + enum CodingKeys: String, CodingKey { + case favorite_actors_on_user + } - - enum CodingKeys: String, CodingKey { - - case actor - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favorite_actors_on_user = try codecHelper.decode( + [FavoriteActor].self, + forKey: .favorite_actors_on_user, + container: &container + ) + } + } - - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - - + public var + user: User? } -} -public var -favorite_actors_on_user: [FavoriteActor] - - - - - enum CodingKeys: String, CodingKey { - - case favorite_actors_on_user - + public func ref( + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + let ref = dataConnect.query( + name: "GetFavoriteActors", + variables: variables, + resultsDataType: GetFavoriteActorsQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetFavoriteActorsQuery.Data, + GetFavoriteActorsQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func execute( + ) async throws -> OperationResult { + var variables = GetFavoriteActorsQuery.Variables() - - self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) - - - } -} -public var -user: User? + let ref = dataConnect.query( + name: "GetFavoriteActors", + variables: variables, + resultsDataType: GetFavoriteActorsQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetFavoriteActorsQuery.Data, + GetFavoriteActorsQuery.Variables + > + return try await refCast.execute() } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetFavoriteActorsQuery.Variables() - - - let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetFavoriteActorsQuery.Variables() - - - let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetUserFavoriteMoviesQuery{ - +public class GetUserFavoriteMoviesQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -6101,219 +4348,167 @@ public class GetUserFavoriteMoviesQuery{ public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable { + public struct User: Decodable { + public struct FavoriteMovie: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + imageUrl: String -public struct User: Decodable { - - - - + public var + releaseYear: Int? -public struct FavoriteMovie: Decodable { - + public var + rating: Double? + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case title + case genre + case imageUrl -public var -title: String + case releaseYear + case rating + case description + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? - - - -public var -rating: Double? - + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } -public var -description: String? + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movie: Movie + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favorite_movies_on_user: [FavoriteMovie] - + enum CodingKeys: String, CodingKey { + case favorite_movies_on_user + } - - enum CodingKeys: String, CodingKey { - - case movie - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favorite_movies_on_user = try codecHelper.decode( + [FavoriteMovie].self, + forKey: .favorite_movies_on_user, + container: &container + ) + } + } - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - + public var + user: User? } -} -public var -favorite_movies_on_user: [FavoriteMovie] - - - - - enum CodingKeys: String, CodingKey { - - case favorite_movies_on_user - + public func ref( + ) + -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func execute( + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() - - self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) - - - } -} -public var -user: User? + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > + return try await refCast.execute() } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift deleted file mode 100644 index 77520f6..0000000 --- a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version: 5.9 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v15), - .macOS(.v10_15), - .watchOS(.v6), - .tvOS(.v13) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/firebase-ios-sdk", branch: "dataconnect"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"firebase-ios-sdk") - ], - path: "Sources" - ) - ] -) - diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift deleted file mode 100644 index a04f999..0000000 --- a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import FirebaseDataConnect - - - - - - - -public extension DataConnect { - - static var friendlyFlixClient: FriendlyFlixClient = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixClient.connectorConfig) - return FriendlyFlixClient(dataConnect: dc) - }() - -} - -public class FriendlyFlixClient { - - var dataConnect: DataConnect - - public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") - - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) - } - -} diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift deleted file mode 100644 index 59be0f9..0000000 --- a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ /dev/null @@ -1,501 +0,0 @@ -import Foundation - -import FirebaseDataConnect - - - -public struct ActorKey { - - public private(set) var id: UUID - - - enum CodingKeys: String, CodingKey { - - case id - - } -} - -extension ActorKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } -} - -extension ActorKey : Equatable { - public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - - if lhs.id != rhs.id { - return false - } - - return true - } -} - -extension ActorKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - - } -} - - - -public struct FavoriteActorKey { - - public private(set) var userId: String - - public private(set) var actorId: UUID - - - enum CodingKeys: String, CodingKey { - - case userId - - case actorId - - } -} - -extension FavoriteActorKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } -} - -extension FavoriteActorKey : Equatable { - public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { - - if lhs.userId != rhs.userId { - return false - } - - if lhs.actorId != rhs.actorId { - return false - } - - return true - } -} - -extension FavoriteActorKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.actorId) - - } -} - - - -public struct FavoriteMovieKey { - - public private(set) var userId: String - - public private(set) var movieId: UUID - - - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - - } -} - -extension FavoriteMovieKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } -} - -extension FavoriteMovieKey : Equatable { - public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - - if lhs.userId != rhs.userId { - return false - } - - if lhs.movieId != rhs.movieId { - return false - } - - return true - } -} - -extension FavoriteMovieKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - - } -} - - - -public struct MovieActorKey { - - public private(set) var movieId: UUID - - public private(set) var actorId: UUID - - - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - - } -} - -extension MovieActorKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } -} - -extension MovieActorKey : Equatable { - public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - - if lhs.movieId != rhs.movieId { - return false - } - - if lhs.actorId != rhs.actorId { - return false - } - - return true - } -} - -extension MovieActorKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - - } -} - - - -public struct MovieMetadataKey { - - public private(set) var id: UUID - - - enum CodingKeys: String, CodingKey { - - case id - - } -} - -extension MovieMetadataKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } -} - -extension MovieMetadataKey : Equatable { - public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - - if lhs.id != rhs.id { - return false - } - - return true - } -} - -extension MovieMetadataKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - - } -} - - - -public struct MovieKey { - - public private(set) var id: UUID - - - enum CodingKeys: String, CodingKey { - - case id - - } -} - -extension MovieKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } -} - -extension MovieKey : Equatable { - public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - - if lhs.id != rhs.id { - return false - } - - return true - } -} - -extension MovieKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - - } -} - - - -public struct ReviewKey { - - public private(set) var userId: String - - public private(set) var movieId: UUID - - - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - - } -} - -extension ReviewKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } -} - -extension ReviewKey : Equatable { - public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - - if lhs.userId != rhs.userId { - return false - } - - if lhs.movieId != rhs.movieId { - return false - } - - return true - } -} - -extension ReviewKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - - } -} - - - -public struct UserKey { - - public private(set) var id: String - - - enum CodingKeys: String, CodingKey { - - case id - - } -} - -extension UserKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } -} - -extension UserKey : Equatable { - public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - - if lhs.id != rhs.id { - return false - } - - return true - } -} - -extension UserKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - - } -} - - diff --git a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift deleted file mode 100644 index 9bfd1ca..0000000 --- a/Examples/FriendlyFlix/app/_FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ /dev/null @@ -1,5813 +0,0 @@ -import FirebaseDataConnect -import Foundation - - - - - - - - - - - - - - - - - - - - - - -// MARK: Connector Client Extension -public extension FriendlyFlixClient { - - - - - func createMovieMutationRef( - - -title: String -, -releaseYear: Int -, -genre: String -, -imageUrl: String - - - , - _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) - - if let optionalVars { - optionalVars(&variables) - } - - let request = MutationRequest(operationName: "CreateMovie", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:CreateMovieMutation.Data.self) - return ref as! MutationRef - } - - - - - func addFavoritedMovieMutationRef( - - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - let request = MutationRequest(operationName: "AddFavoritedMovie", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as! MutationRef - } - - - - - func deleteFavoritedMovieMutationRef( - - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - let request = MutationRequest(operationName: "DeleteFavoritedMovie", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as! MutationRef - } - - - - - func addFavoritedActorMutationRef( - - -actorId: UUID - - ) -> MutationRef { - var variables = AddFavoritedActorMutation.Variables(actorId:actorId) - - let request = MutationRequest(operationName: "AddFavoritedActor", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:AddFavoritedActorMutation.Data.self) - return ref as! MutationRef - } - - - - - func deleteFavoritedActorMutationRef( - - -actorId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) - - let request = MutationRequest(operationName: "DeleteFavoritedActor", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:DeleteFavoritedActorMutation.Data.self) - return ref as! MutationRef - } - - - - - func addReviewMutationRef( - - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - let request = MutationRequest(operationName: "AddReview", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:AddReviewMutation.Data.self) - return ref as! MutationRef - } - - - - - func deleteReviewMutationRef( - - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - let request = MutationRequest(operationName: "DeleteReview", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:DeleteReviewMutation.Data.self) - return ref as! MutationRef - } - - - - - func upsertUserMutationRef( - - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - - let request = MutationRequest(operationName: "UpsertUser", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:UpsertUserMutation.Data.self) - return ref as! MutationRef - } - - - - - func updateMovieMutationRef( - - -id: UUID - - - , - _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = UpdateMovieMutation.Variables(id:id) - - if let optionalVars { - optionalVars(&variables) - } - - let request = MutationRequest(operationName: "UpdateMovie", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:UpdateMovieMutation.Data.self) - return ref as! MutationRef - } - - - - - func deleteMovieMutationRef( - - -id: UUID - - ) -> MutationRef { - var variables = DeleteMovieMutation.Variables(id:id) - - let request = MutationRequest(operationName: "DeleteMovie", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:DeleteMovieMutation.Data.self) - return ref as! MutationRef - } - - - - - func deleteUnpopularMoviesMutationRef( - - -minRating: Double - - ) -> MutationRef { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) - - let request = MutationRequest(operationName: "DeleteUnpopularMovies", variables: variables) - let ref = dataConnect.mutation(request: request, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) - return ref as! MutationRef - } - - - - - func listMoviesQueryRef( - - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - let request = QueryRequest(operationName: "ListMovies", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func listMoviesByGenreQueryRef( - - -genre: String - - ) -> QueryRefObservation { - var variables = ListMoviesByGenreQuery.Variables(genre:genre) - - let request = QueryRequest(operationName: "ListMoviesByGenre", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getMovieByIdQueryRef( - - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - let request = QueryRequest(operationName: "GetMovieById", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getActorByIdQueryRef( - - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - let request = QueryRequest(operationName: "GetActorById", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getCurrentUserQueryRef( - - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let request = QueryRequest(operationName: "GetCurrentUser", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getIfFavoritedMovieQueryRef( - - -movieId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - let request = QueryRequest(operationName: "GetIfFavoritedMovie", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getIfFavoritedActorQueryRef( - - -actorId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) - - let request = QueryRequest(operationName: "GetIfFavoritedActor", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func searchAllQueryRef( - - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - let request = QueryRequest(operationName: "SearchAll", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func searchMovieDescriptionUsingL2similarityQueryRef( - - -query: String - - ) -> QueryRefObservation { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) - - let request = QueryRequest(operationName: "SearchMovieDescriptionUsingL2Similarity", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func listMoviesByPartialTitleQueryRef( - - -input: String - - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(input:input) - - let request = QueryRequest(operationName: "ListMoviesByPartialTitle", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func listMoviesByTagQueryRef( - - -tag: String - - ) -> QueryRefObservation { - var variables = ListMoviesByTagQuery.Variables(tag:tag) - - let request = QueryRequest(operationName: "ListMoviesByTag", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func moviesByReleaseYearQueryRef( - - - - - _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = MoviesByReleaseYearQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - let request = QueryRequest(operationName: "MoviesByReleaseYear", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func searchMovieOrQueryRef( - - - - - _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieOrQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - let request = QueryRequest(operationName: "SearchMovieOr", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func searchMovieAndQueryRef( - - - - - _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieAndQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - let request = QueryRequest(operationName: "SearchMovieAnd", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getFavoriteActorsQueryRef( - - - ) -> QueryRefObservation { - var variables = GetFavoriteActorsQuery.Variables() - - let request = QueryRequest(operationName: "GetFavoriteActors", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - - - - func getUserFavoriteMoviesQueryRef( - - - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let request = QueryRequest(operationName: "GetUserFavoriteMovies", variables: variables) - let ref = dataConnect.query(request: request, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - -} - - - - - - -public enum CreateMovieMutation{ - - public static let OperationName = "CreateMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -title: String - - - - public var -releaseYear: Int - - - - public var -genre: String - - - @OptionalVariable - public var -rating: Double? - - - @OptionalVariable - public var -description: String? - - - - public var -imageUrl: String - - - @OptionalVariable - public var -tags: [String]? - - - - - - public init ( - -title: String -, - -releaseYear: Int -, - -genre: String -, - -imageUrl: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.title = title - self.releaseYear = releaseYear - self.genre = genre - self.imageUrl = imageUrl - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - -} - - enum CodingKeys: String, CodingKey { - - case title - - case releaseYear - - case genre - - case rating - - case description - - case imageUrl - - case tags - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(title, forKey: .title, container: &container) - - - - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - - - - try codecHelper.encode(genre, forKey: .genre, container: &container) - - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) - } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) - } - - - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - -public var -movie_insert: MovieKey - - } -} - - - - - - -public enum AddFavoritedMovieMutation{ - - public static let OperationName = "AddFavoritedMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - - } -} - - - - - - -public enum DeleteFavoritedMovieMutation{ - - public static let OperationName = "DeleteFavoritedMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - - } -} - - - - - - -public enum AddFavoritedActorMutation{ - - public static let OperationName = "AddFavoritedActor" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -actorId: UUID - - - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} - - enum CodingKeys: String, CodingKey { - - case actorId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -favorite_actor_upsert: FavoriteActorKey - - } -} - - - - - - -public enum DeleteFavoritedActorMutation{ - - public static let OperationName = "DeleteFavoritedActor" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -actorId: UUID - - - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} - - enum CodingKeys: String, CodingKey { - - case actorId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -favorite_actor_delete: FavoriteActorKey? - - } -} - - - - - - -public enum AddReviewMutation{ - - public static let OperationName = "AddReview" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int - - - - public var -reviewText: String - - - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String - - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - case rating - - case reviewText - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(rating, forKey: .rating, container: &container) - - - - try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -review_upsert: ReviewKey - - } -} - - - - - - -public enum DeleteReviewMutation{ - - public static let OperationName = "DeleteReview" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -review_delete: ReviewKey? - - } -} - - - - - - -public enum UpsertUserMutation{ - - public static let OperationName = "UpsertUser" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -username: String - - - - - - public init ( - -username: String - - - ) { - self.username = username - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} - - enum CodingKeys: String, CodingKey { - - case username - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(username, forKey: .username, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -user_upsert: UserKey - - } -} - - - - - - -public enum UpdateMovieMutation{ - - public static let OperationName = "UpdateMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - @OptionalVariable - public var -title: String? - - - @OptionalVariable - public var -releaseYear: Int? - - - @OptionalVariable - public var -genre: String? - - - @OptionalVariable - public var -rating: Double? - - - @OptionalVariable - public var -description: String? - - - @OptionalVariable - public var -imageUrl: String? - - - @OptionalVariable - public var -tags: [String]? - - - - - - public init ( - -id: UUID - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.id = id - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id && - lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - -} - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case releaseYear - - case genre - - case rating - - case description - - case imageUrl - - case tags - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - if $title.isSet { - try codecHelper.encode(title, forKey: .title, container: &container) - } - - if $releaseYear.isSet { - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) - } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) - } - - if $imageUrl.isSet { - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - } - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - -public var -movie_update: MovieKey? - - } -} - - - - - - -public enum DeleteMovieMutation{ - - public static let OperationName = "DeleteMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -movie_delete: MovieKey? - - } -} - - - - - - -public enum DeleteUnpopularMoviesMutation{ - - public static let OperationName = "DeleteUnpopularMovies" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -minRating: Double - - - - - - public init ( - -minRating: Double - - - ) { - self.minRating = minRating - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - -} - - enum CodingKeys: String, CodingKey { - - case minRating - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - } - - } - - public struct Data: Decodable { - - -public var -movie_deleteMany: Int - - } -} - - - - - - -public enum ListMoviesQuery{ - - public static let OperationName = "ListMovies" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(limit) - -} - - enum CodingKeys: String, CodingKey { - - case limit - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - -public var -description: String? - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum ListMoviesByGenreQuery{ - - public static let OperationName = "ListMoviesByGenre" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -genre: String - - - - - - public init ( - -genre: String - - - ) { - self.genre = genre - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(genre) - -} - - enum CodingKeys: String, CodingKey { - - case genre - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(genre, forKey: .genre, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - - public var movieMostPopularKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostPopular: [MovieMostPopular] - - - - - -public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - - public var movieMostRecentKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostRecent: [MovieMostRecent] - - } -} - - - - - - -public enum GetMovieByIdQuery{ - - public static let OperationName = "GetMovieById" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -description: String? - - - -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable { - - - -public var -director: String? - - - - - - enum CodingKeys: String, CodingKey { - - case director - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] - - - - - -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] - - - - - -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] - - - - - -public struct ReviewReviews: Decodable { - - - -public var -id: UUID - - - -public var -reviewText: String? - - - -public var -reviewDate: LocalDate - - - -public var -rating: Int? - - - - - -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviews: [ReviewReviews] - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? - - } -} - - - - - - -public enum GetActorByIdQuery{ - - public static let OperationName = "GetActorById" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - - -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -tags: [String]? - - - -public var -imageUrl: String - - - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] - - - - - -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -tags: [String]? - - - -public var -imageUrl: String - - - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [MovieSupportingActors] - - - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? - - } -} - - - - - - -public enum GetCurrentUserQuery{ - - public static let OperationName = "GetCurrentUser" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - - } - - public struct Data: Decodable { - - - - -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - - -public struct ReviewReviews: Decodable { - - - -public var -id: UUID - - - -public var -rating: Int? - - - -public var -reviewDate: LocalDate - - - -public var -reviewText: String? - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] - - - - - -public struct FavoriteMovieFavoriteMovies: Decodable { - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -rating: Double? - - - -public var -description: String? - - - -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable { - - - -public var -director: String? - - - - - - enum CodingKeys: String, CodingKey { - - case director - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - - -public struct FavoriteActorFavoriteActors: Decodable { - - - - - -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor - - - - - - enum CodingKeys: String, CodingKey { - - case actor - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - - - } -} -public var -favoriteActors: [FavoriteActorFavoriteActors] - - - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - case favoriteActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - - self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) - - - } -} -public var -user: User? - - } -} - - - - - - -public enum GetIfFavoritedMovieQuery{ - - public static let OperationName = "GetIfFavoritedMovie" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct FavoriteMovie: Decodable { - - - -public var -movieId: UUID - - - - - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - - } -} -public var -favorite_movie: FavoriteMovie? - - } -} - - - - - - -public enum GetIfFavoritedActorQuery{ - - public static let OperationName = "GetIfFavoritedActor" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -actorId: UUID - - - - - - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} - - enum CodingKeys: String, CodingKey { - - case actorId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct FavoriteActor: Decodable { - - - -public var -actorId: UUID - - - - - - enum CodingKeys: String, CodingKey { - - case actorId - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - - - } -} -public var -favorite_actor: FavoriteActor? - - } -} - - - - - - -public enum SearchAllQuery{ - - public static let OperationName = "SearchAll" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? - - - - public var -minYear: Int - - - - public var -maxYear: Int - - - - public var -minRating: Double - - - - public var -maxRating: Double - - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} - - enum CodingKeys: String, CodingKey { - - case input - - case minYear - - case maxYear - - case minRating - - case maxRating - - case genre - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } - - - try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - - try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - - try codecHelper.encode(genre, forKey: .genre, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -imageUrl: String - - - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] - - - - - -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -imageUrl: String - - - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] - - - - - -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] - - - - - -public struct ReviewReviewsMatchingText: Decodable { - - - -public var -id: UUID - - - -public var -rating: Int? - - - -public var -reviewText: String? - - - -public var -reviewDate: LocalDate - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] - - } -} - - - - - - -public enum SearchMovieDescriptionUsingL2similarityQuery{ - - public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -query: String - - - - - - public init ( - -query: String - - - ) { - self.query = query - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.query == rhs.query - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(query) - -} - - enum CodingKeys: String, CodingKey { - - case query - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(query, forKey: .query, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -description: String? - - - -public var -tags: [String]? - - - -public var -rating: Double? - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case description - - case tags - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies_descriptionEmbedding_similarity: [Movie] - - } -} - - - - - - -public enum ListMoviesByPartialTitleQuery{ - - public static let OperationName = "ListMoviesByPartialTitle" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -input: String - - - - - - public init ( - -input: String - - - ) { - self.input = input - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - -} - - enum CodingKeys: String, CodingKey { - - case input - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(input, forKey: .input, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum ListMoviesByTagQuery{ - - public static let OperationName = "ListMoviesByTag" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -tag: String - - - - - - public init ( - -tag: String - - - ) { - self.tag = tag - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.tag == rhs.tag - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(tag) - -} - - enum CodingKeys: String, CodingKey { - - case tag - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(tag, forKey: .tag, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -genre: String? - - - -public var -rating: Double? - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case genre - - case rating - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum MoviesByReleaseYearQuery{ - - public static let OperationName = "MoviesByReleaseYear" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -min: Int? - - - @OptionalVariable - public var -max: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.min == rhs.min && - lhs.max == rhs.max - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(min) - - hasher.combine(max) - -} - - enum CodingKeys: String, CodingKey { - - case min - - case max - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $min.isSet { - try codecHelper.encode(min, forKey: .min, container: &container) - } - - if $max.isSet { - try codecHelper.encode(max, forKey: .max, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -rating: Double? - - - -public var -title: String - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum SearchMovieOrQuery{ - - public static let OperationName = "SearchMovieOr" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -minRating: Double? - - - @OptionalVariable - public var -maxRating: Double? - - - @OptionalVariable - public var -genre: String? - - - @OptionalVariable - public var -tag: String? - - - @OptionalVariable - public var -input: String? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - -} - - enum CodingKeys: String, CodingKey { - - case minRating - - case maxRating - - case genre - - case tag - - case input - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) - } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -rating: Double? - - - -public var -title: String - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum SearchMovieAndQuery{ - - public static let OperationName = "SearchMovieAnd" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -minRating: Double? - - - @OptionalVariable - public var -maxRating: Double? - - - @OptionalVariable - public var -genre: String? - - - @OptionalVariable - public var -tag: String? - - - @OptionalVariable - public var -input: String? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - -} - - enum CodingKeys: String, CodingKey { - - case minRating - - case maxRating - - case genre - - case tag - - case input - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) - } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -rating: Double? - - - -public var -title: String - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case title - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -movies: [Movie] - - } -} - - - - - - -public enum GetFavoriteActorsQuery{ - - public static let OperationName = "GetFavoriteActors" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - - } - - public struct Data: Decodable { - - - - -public struct User: Decodable { - - - - - -public struct FavoriteActor: Decodable { - - - - - -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor - - - - - - enum CodingKeys: String, CodingKey { - - case actor - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - - - } -} -public var -favorite_actors_on_user: [FavoriteActor] - - - - - - enum CodingKeys: String, CodingKey { - - case favorite_actors_on_user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) - - - } -} -public var -user: User? - - } -} - - - - - - -public enum GetUserFavoriteMoviesQuery{ - - public static let OperationName = "GetUserFavoriteMovies" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - - } - - public struct Data: Decodable { - - - - -public struct User: Decodable { - - - - - -public struct FavoriteMovie: Decodable { - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -rating: Double? - - - -public var -description: String? - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favorite_movies_on_user: [FavoriteMovie] - - - - - - enum CodingKeys: String, CodingKey { - - case favorite_movies_on_user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) - - - } -} -public var -user: User? - - } -} - - From 3464d71a77e4ec3fedff7dda96554a12cd411210 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 7 Oct 2024 19:41:17 +0100 Subject: [PATCH 04/50] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20=20Update=20to=20lat?= =?UTF-8?q?est=20version=20of=20code=20generator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../app/FriendlyFlixSDK/README.md | 890 ++ .../Sources/FriendlyFlixClient.swift | 137 +- .../Sources/FriendlyFlixKeys.swift | 394 +- .../Sources/FriendlyFlixOperations.swift | 7555 ++++++++++------- 5 files changed, 5926 insertions(+), 3103 deletions(-) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index e30f7c9..52016e3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,30 +4,31 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17), - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"] - ), - ], - dependencies: [ - .package(name: "FirebaseDataConnect", path: "../../../../"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name: "FirebaseDataConnect", package: "FirebaseDataConnect"), - ], - path: "Sources" - ), - ] + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") + ], + path: "Sources" + ) + ] ) + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md new file mode 100644 index 0000000..9475655 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -0,0 +1,890 @@ +This Swift package contains the generated Swift code for the connector `friendly-flix`. + +You can use this package by adding it as a local Swift package dependency in your project. + +# Accessing the connector + +Add the necessary imports + +``` +import FirebaseDataConnect +import FriendlyFlixSDK + +``` + +The connector can be accessed using the following code: + +``` +let connector = DataConnect.friendlyFlixConnector + +``` + + +## Connecting to the local Emulator +By default, the connector will connect to the production service. + +To connect to the emulator, you can use the following code, which can be called from the `init` function of your SwiftUI app + +``` +connector.useEmulator() +``` + +# Queries + +## ListMoviesQuery +### Variables + + +#### Optional +```swift + +let limit: Int = ... +``` + + + +### Using the Query Reference +``` +struct MyView: View { + var listMoviesQueryRef = DataConnect.friendlyFlixConnector.listMoviesQuery.ref(...) + + var body: some View { + VStack { + if let data = listMoviesQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await listMoviesQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.listMoviesQuery.execute(...) +``` + + +## ListMoviesByGenreQuery +### Variables +#### Required +```swift + +let genre: String = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var listMoviesByGenreQueryRef = DataConnect.friendlyFlixConnector.listMoviesByGenreQuery.ref(...) + + var body: some View { + VStack { + if let data = listMoviesByGenreQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await listMoviesByGenreQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.listMoviesByGenreQuery.execute(...) +``` + + +## GetMovieByIdQuery +### Variables +#### Required +```swift + +let id: UUID = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var getMovieByIdQueryRef = DataConnect.friendlyFlixConnector.getMovieByIdQuery.ref(...) + + var body: some View { + VStack { + if let data = getMovieByIdQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getMovieByIdQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getMovieByIdQuery.execute(...) +``` + + +## GetActorByIdQuery +### Variables +#### Required +```swift + +let id: UUID = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var getActorByIdQueryRef = DataConnect.friendlyFlixConnector.getActorByIdQuery.ref(...) + + var body: some View { + VStack { + if let data = getActorByIdQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getActorByIdQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getActorByIdQuery.execute(...) +``` + + +## GetCurrentUserQuery + + +### Using the Query Reference +``` +struct MyView: View { + var getCurrentUserQueryRef = DataConnect.friendlyFlixConnector.getCurrentUserQuery.ref(...) + + var body: some View { + VStack { + if let data = getCurrentUserQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getCurrentUserQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getCurrentUserQuery.execute(...) +``` + + +## GetIfFavoritedMovieQuery +### Variables +#### Required +```swift + +let movieId: UUID = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var getIfFavoritedMovieQueryRef = DataConnect.friendlyFlixConnector.getIfFavoritedMovieQuery.ref(...) + + var body: some View { + VStack { + if let data = getIfFavoritedMovieQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getIfFavoritedMovieQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getIfFavoritedMovieQuery.execute(...) +``` + + +## GetIfFavoritedActorQuery +### Variables +#### Required +```swift + +let actorId: UUID = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var getIfFavoritedActorQueryRef = DataConnect.friendlyFlixConnector.getIfFavoritedActorQuery.ref(...) + + var body: some View { + VStack { + if let data = getIfFavoritedActorQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getIfFavoritedActorQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getIfFavoritedActorQuery.execute(...) +``` + + +## SearchAllQuery +### Variables +#### Required +```swift + +let minYear: Int = ... +let maxYear: Int = ... +let minRating: Double = ... +let maxRating: Double = ... +let genre: String = ... +``` + + +#### Optional +```swift + +let input: String = ... +``` + + + +### Using the Query Reference +``` +struct MyView: View { + var searchAllQueryRef = DataConnect.friendlyFlixConnector.searchAllQuery.ref(...) + + var body: some View { + VStack { + if let data = searchAllQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await searchAllQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.searchAllQuery.execute(...) +``` + + +## SearchMovieDescriptionUsingL2similarityQuery +### Variables +#### Required +```swift + +let query: String = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var searchMovieDescriptionUsingL2similarityQueryRef = DataConnect.friendlyFlixConnector.searchMovieDescriptionUsingL2similarityQuery.ref(...) + + var body: some View { + VStack { + if let data = searchMovieDescriptionUsingL2similarityQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await searchMovieDescriptionUsingL2similarityQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.searchMovieDescriptionUsingL2similarityQuery.execute(...) +``` + + +## ListMoviesByPartialTitleQuery +### Variables +#### Required +```swift + +let input: String = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var listMoviesByPartialTitleQueryRef = DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.ref(...) + + var body: some View { + VStack { + if let data = listMoviesByPartialTitleQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await listMoviesByPartialTitleQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.execute(...) +``` + + +## ListMoviesByTagQuery +### Variables +#### Required +```swift + +let tag: String = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var listMoviesByTagQueryRef = DataConnect.friendlyFlixConnector.listMoviesByTagQuery.ref(...) + + var body: some View { + VStack { + if let data = listMoviesByTagQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await listMoviesByTagQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.listMoviesByTagQuery.execute(...) +``` + + +## MoviesByReleaseYearQuery +### Variables + + +#### Optional +```swift + +let min: Int = ... +let max: Int = ... +``` + + + +### Using the Query Reference +``` +struct MyView: View { + var moviesByReleaseYearQueryRef = DataConnect.friendlyFlixConnector.moviesByReleaseYearQuery.ref(...) + + var body: some View { + VStack { + if let data = moviesByReleaseYearQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await moviesByReleaseYearQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.moviesByReleaseYearQuery.execute(...) +``` + + +## SearchMovieOrQuery +### Variables + + +#### Optional +```swift + +let minRating: Double = ... +let maxRating: Double = ... +let genre: String = ... +let tag: String = ... +let input: String = ... +``` + + + +### Using the Query Reference +``` +struct MyView: View { + var searchMovieOrQueryRef = DataConnect.friendlyFlixConnector.searchMovieOrQuery.ref(...) + + var body: some View { + VStack { + if let data = searchMovieOrQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await searchMovieOrQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.searchMovieOrQuery.execute(...) +``` + + +## SearchMovieAndQuery +### Variables + + +#### Optional +```swift + +let minRating: Double = ... +let maxRating: Double = ... +let genre: String = ... +let tag: String = ... +let input: String = ... +``` + + + +### Using the Query Reference +``` +struct MyView: View { + var searchMovieAndQueryRef = DataConnect.friendlyFlixConnector.searchMovieAndQuery.ref(...) + + var body: some View { + VStack { + if let data = searchMovieAndQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await searchMovieAndQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.searchMovieAndQuery.execute(...) +``` + + +## GetFavoriteActorsQuery + + +### Using the Query Reference +``` +struct MyView: View { + var getFavoriteActorsQueryRef = DataConnect.friendlyFlixConnector.getFavoriteActorsQuery.ref(...) + + var body: some View { + VStack { + if let data = getFavoriteActorsQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getFavoriteActorsQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getFavoriteActorsQuery.execute(...) +``` + + +## GetUserFavoriteMoviesQuery + + +### Using the Query Reference +``` +struct MyView: View { + var getUserFavoriteMoviesQueryRef = DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.ref(...) + + var body: some View { + VStack { + if let data = getUserFavoriteMoviesQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getUserFavoriteMoviesQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) +``` + + +# Mutations +## CreateMovieMutation + +### Variables + +#### Required +```swift + +let title: String = ... +let releaseYear: Int = ... +let genre: String = ... +let imageUrl: String = ... +``` + + +#### Optional +```swift + +let rating: Double = ... +let description: String = ... +let tags: String = ... +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.createMovieMutation.execute(...) +``` + +## AddFavoritedMovieMutation + +### Variables + +#### Required +```swift + +let movieId: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) +``` + +## DeleteFavoritedMovieMutation + +### Variables + +#### Required +```swift + +let movieId: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.deleteFavoritedMovieMutation.execute(...) +``` + +## AddFavoritedActorMutation + +### Variables + +#### Required +```swift + +let actorId: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.addFavoritedActorMutation.execute(...) +``` + +## DeleteFavoritedActorMutation + +### Variables + +#### Required +```swift + +let actorId: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.deleteFavoritedActorMutation.execute(...) +``` + +## AddReviewMutation + +### Variables + +#### Required +```swift + +let movieId: UUID = ... +let rating: Int = ... +let reviewText: String = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.addReviewMutation.execute(...) +``` + +## DeleteReviewMutation + +### Variables + +#### Required +```swift + +let movieId: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.deleteReviewMutation.execute(...) +``` + +## UpsertUserMutation + +### Variables + +#### Required +```swift + +let username: String = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) +``` + +## UpdateMovieMutation + +### Variables + +#### Required +```swift + +let id: UUID = ... +``` + + +#### Optional +```swift + +let title: String = ... +let releaseYear: Int = ... +let genre: String = ... +let rating: Double = ... +let description: String = ... +let imageUrl: String = ... +let tags: String = ... +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.updateMovieMutation.execute(...) +``` + +## DeleteMovieMutation + +### Variables + +#### Required +```swift + +let id: UUID = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.deleteMovieMutation.execute(...) +``` + +## DeleteUnpopularMoviesMutation + +### Variables + +#### Required +```swift + +let minRating: Double = ... +``` + + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.deleteUnpopularMoviesMutation.execute(...) +``` + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 1e9aadf..f0a7d38 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,88 +1,93 @@ -import FirebaseDataConnect import Foundation +import FirebaseDataConnect + + + + + + public extension DataConnect { + static var friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig) + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() + } public class FriendlyFlixConnector { + var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig( - serviceId: "friendly-flix-service", - location: "us-central1", - connector: "friendly-flix" - ) + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) - addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) - deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) - addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) - deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) - deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) - listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) - getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) - searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - searchMovieDescriptionUsingL2similarityQuery = - SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) - listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) - moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) - searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) - searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) - getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) - getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + // init operations + self.createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) + self.deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) + self.deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) + self.deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.searchMovieDescriptionUsingL2similarityQuery = SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) + self.moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) + self.searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) + self.searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) + self.getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, - port: Int = DataConnect.EmulatorDefaults.port) { - dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) } // MARK: Operations +public let createMovieMutation: CreateMovieMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addFavoritedActorMutation: AddFavoritedActorMutation +public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation +public let addReviewMutation: AddReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let upsertUserMutation: UpsertUserMutation +public let updateMovieMutation: UpdateMovieMutation +public let deleteMovieMutation: DeleteMovieMutation +public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation +public let listMoviesQuery: ListMoviesQuery +public let listMoviesByGenreQuery: ListMoviesByGenreQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery +public let searchAllQuery: SearchAllQuery +public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let listMoviesByTagQuery: ListMoviesByTagQuery +public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery +public let searchMovieOrQuery: SearchMovieOrQuery +public let searchMovieAndQuery: SearchMovieAndQuery +public let getFavoriteActorsQuery: GetFavoriteActorsQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery + - public let createMovieMutation: CreateMovieMutation - public let addFavoritedMovieMutation: AddFavoritedMovieMutation - public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation - public let addFavoritedActorMutation: AddFavoritedActorMutation - public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation - public let addReviewMutation: AddReviewMutation - public let deleteReviewMutation: DeleteReviewMutation - public let upsertUserMutation: UpsertUserMutation - public let updateMovieMutation: UpdateMovieMutation - public let deleteMovieMutation: DeleteMovieMutation - public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation - public let listMoviesQuery: ListMoviesQuery - public let listMoviesByGenreQuery: ListMoviesByGenreQuery - public let getMovieByIdQuery: GetMovieByIdQuery - public let getActorByIdQuery: GetActorByIdQuery - public let getCurrentUserQuery: GetCurrentUserQuery - public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery - public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery - public let searchAllQuery: SearchAllQuery - public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery - public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery - public let listMoviesByTagQuery: ListMoviesByTagQuery - public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery - public let searchMovieOrQuery: SearchMovieOrQuery - public let searchMovieAndQuery: SearchMovieAndQuery - public let getFavoriteActorsQuery: GetFavoriteActorsQuery - public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 875ca8f..59be0f9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,378 +2,500 @@ import Foundation import FirebaseDataConnect + + public struct ActorKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension ActorKey: Codable { +extension ActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension ActorKey: Equatable { +extension ActorKey : Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey: Hashable { +extension ActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct FavoriteActorKey { + public private(set) var userId: String - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case actorId + + case userId + + case actorId + } } -extension FavoriteActorKey: Codable { +extension FavoriteActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension FavoriteActorKey: Equatable { +extension FavoriteActorKey : Equatable { public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension FavoriteActorKey: Hashable { +extension FavoriteActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(actorId) + + hasher.combine(self.userId) + + hasher.combine(self.actorId) + } } + + public struct FavoriteMovieKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension FavoriteMovieKey: Codable { +extension FavoriteMovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension FavoriteMovieKey: Equatable { +extension FavoriteMovieKey : Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey: Hashable { +extension FavoriteMovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct MovieActorKey { + public private(set) var movieId: UUID - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case movieId - - case actorId + + case movieId + + case actorId + } } -extension MovieActorKey: Codable { +extension MovieActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension MovieActorKey: Equatable { +extension MovieActorKey : Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey: Hashable { +extension MovieActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(actorId) + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + } } + + public struct MovieMetadataKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieMetadataKey: Codable { +extension MovieMetadataKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieMetadataKey: Equatable { +extension MovieMetadataKey : Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey: Hashable { +extension MovieMetadataKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct MovieKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieKey: Codable { +extension MovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieKey: Equatable { +extension MovieKey : Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey: Hashable { +extension MovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct ReviewKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension ReviewKey: Codable { +extension ReviewKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension ReviewKey: Equatable { +extension ReviewKey : Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey: Hashable { +extension ReviewKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct UserKey { + public private(set) var id: String + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension UserKey: Codable { +extension UserKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension UserKey: Equatable { +extension UserKey : Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension UserKey: Hashable { +extension UserKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index b3882f7..dde7e2e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,207 +1,279 @@ import FirebaseDataConnect import Foundation -// MARK: Common Enums -public enum OrderDirection: String, Codable { - case ASC - case DESC -} -// End enum definitions -public class CreateMovieMutation { - let dataConnect: DataConnect - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - public static let OperationName = "CreateMovie" - public typealias Ref = MutationRef - public struct Variables: OperationVariable { - public var - title: String - public var - releaseYear: Int - public var - genre: String - @OptionalVariable - public var - rating: Double? - @OptionalVariable - public var - description: String? - public var - imageUrl: String - @OptionalVariable - public var - tags: [String]? - public init(title: String, - releaseYear: Int, - genre: String, - imageUrl: String, - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.title = title - self.releaseYear = releaseYear - self.genre = genre - self.imageUrl = imageUrl - if let optionalVars { - optionalVars(&self) - } - } +// MARK: Common Enums - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - } +public enum OrderDirection: String, Codable { + case ASC = "ASC" + case DESC = "DESC" + } + +// End enum definitions + + + + + + + + + +public class CreateMovieMutation{ + + let dataConnect: DataConnect + + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "CreateMovie" - public func hash(into hasher: inout Hasher) { - hasher.combine(title) + public typealias Ref = MutationRef - hasher.combine(releaseYear) + public struct Variables: OperationVariable { + + + public var +title: String + + + + public var +releaseYear: Int - hasher.combine(genre) + + + public var +genre: String - hasher.combine(rating) + + @OptionalVariable + public var +rating: Double? - hasher.combine(description) + + @OptionalVariable + public var +description: String? - hasher.combine(imageUrl) + + + public var +imageUrl: String - hasher.combine(tags) + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +title: String +, + +releaseYear: Int +, + +genre: String +, + +imageUrl: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.title = title + self.releaseYear = releaseYear + self.genre = genre + self.imageUrl = imageUrl + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} + enum CodingKeys: String, CodingKey { + case title - + case releaseYear - + case genre - + case rating - + case description - + case imageUrl - + case tags + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(title, forKey: .title, container: &container) - + + + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) + + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) } - + + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) + + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) } + } - } - public struct Data: Decodable { - public var - movie_insert: MovieKey } - public func ref(title: String, - - releaseYear: Int, - - genre: String, + public struct Data: Decodable { - imageUrl: String, - _ optionalVars: ((inout CreateMovieMutation.Variables) -> Void)? = nil) - -> MutationRef< - CreateMovieMutation.Data, - CreateMovieMutation.Variables - > { - var variables = CreateMovieMutation.Variables( - title: title, - releaseYear: releaseYear, - genre: genre, - imageUrl: imageUrl - ) - if let optionalVars { - optionalVars(&variables) - } +public var +movie_insert: MovieKey - let ref = dataConnect.mutation( - name: "CreateMovie", - variables: variables, - resultsDataType: CreateMovieMutation.Data.self - ) - return ref as MutationRef } - public func execute(title: String, - - releaseYear: Int, + public func ref( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +title: String +, +releaseYear: Int +, +genre: String +, +imageUrl: String + + + , + _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + + return try await ref.execute() + + } +} - genre: String, - imageUrl: String, - _ optionalVars: ((inout CreateMovieMutation.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = CreateMovieMutation.Variables( - title: title, - releaseYear: releaseYear, - genre: genre, - imageUrl: imageUrl - ) - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.mutation( - name: "CreateMovie", - variables: variables, - resultsDataType: CreateMovieMutation.Data.self - ) - return try await ref.execute() - } -} +public class AddFavoritedMovieMutation{ -public class AddFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -210,76 +282,104 @@ public class AddFavoritedMovieMutation { public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_upsert: FavoriteMovieKey } - public func ref(movieId: UUID) -> MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_upsert: FavoriteMovieKey - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedMovieMutation { + + + + + +public class DeleteFavoritedMovieMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -288,75 +388,104 @@ public class DeleteFavoritedMovieMutation { public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + - public init(movieId: UUID) { - self.movieId = movieId + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_delete: FavoriteMovieKey? } - public func ref(movieId: UUID) - -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_delete: FavoriteMovieKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class AddFavoritedActorMutation { + + + + + +public class AddFavoritedActorMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -365,76 +494,104 @@ public class AddFavoritedActorMutation { public static let OperationName = "AddFavoritedActor" - public typealias Ref = MutationRef< - AddFavoritedActorMutation.Data, - AddFavoritedActorMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - actorId: UUID + + + public var +actorId: UUID - public init(actorId: UUID) { - self.actorId = actorId + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.actorId == rhs.actorId + + return lhs.actorId == rhs.actorId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(actorId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} enum CodingKeys: String, CodingKey { + case actorId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_actor_upsert: FavoriteActorKey } - public func ref(actorId: UUID) -> MutationRef< - AddFavoritedActorMutation.Data, - AddFavoritedActorMutation.Variables - > { - var variables = AddFavoritedActorMutation.Variables(actorId: actorId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "AddFavoritedActor", - variables: variables, - resultsDataType: AddFavoritedActorMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedActorMutation.Data, - AddFavoritedActorMutation.Variables - > - } - public func execute(actorId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedActorMutation.Variables(actorId: actorId) - let ref = dataConnect.mutation( - name: "AddFavoritedActor", - variables: variables, - resultsDataType: AddFavoritedActorMutation.Data.self - ) +public var +favorite_actor_upsert: FavoriteActorKey - return try await ref.execute() } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedActorMutation { + + + + + +public class DeleteFavoritedActorMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -443,75 +600,104 @@ public class DeleteFavoritedActorMutation { public static let OperationName = "DeleteFavoritedActor" - public typealias Ref = MutationRef< - DeleteFavoritedActorMutation.Data, - DeleteFavoritedActorMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - actorId: UUID + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + - public init(actorId: UUID) { - self.actorId = actorId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.actorId == rhs.actorId + + return lhs.actorId == rhs.actorId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(actorId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} enum CodingKeys: String, CodingKey { + case actorId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_actor_delete: FavoriteActorKey? } - public func ref(actorId: UUID) - -> MutationRef { - var variables = DeleteFavoritedActorMutation.Variables(actorId: actorId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteFavoritedActor", - variables: variables, - resultsDataType: DeleteFavoritedActorMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedActorMutation.Data, - DeleteFavoritedActorMutation.Variables - > - } - public func execute(actorId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedActorMutation.Variables(actorId: actorId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedActor", - variables: variables, - resultsDataType: DeleteFavoritedActorMutation.Data.self - ) +public var +favorite_actor_delete: FavoriteActorKey? - return try await ref.execute() } + + public func ref( + +actorId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + + return try await ref.execute() + + } } -public class AddReviewMutation { + + + + + +public class AddReviewMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -520,109 +706,148 @@ public class AddReviewMutation { public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + public var +rating: Int - public var - rating: Int + + + public var +reviewText: String - public var - reviewText: String - public init(movieId: UUID, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - rating: Int, + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable { - public var - review_upsert: ReviewKey - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_upsert: ReviewKey - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return ref as MutationRef } - public func execute(movieId: UUID, + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} - rating: Int, - reviewText: String) async throws -> OperationResult { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteReviewMutation { + +public class DeleteReviewMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -631,69 +856,104 @@ public class DeleteReviewMutation { public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + - public init(movieId: UUID) { - self.movieId = movieId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - review_delete: ReviewKey? } - public func ref(movieId: UUID) -> MutationRef< - DeleteReviewMutation.Data, - DeleteReviewMutation.Variables - > { - var variables = DeleteReviewMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) - return ref as MutationRef - } - public func execute(movieId: UUID) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) +public var +review_delete: ReviewKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } } -public class UpsertUserMutation { + + + + + +public class UpsertUserMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -702,69 +962,104 @@ public class UpsertUserMutation { public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - username: String + + + public var +username: String + + + + + + public init ( + +username: String - public init(username: String) { - self.username = username + + ) { + self.username = username + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.username == rhs.username + + return lhs.username == rhs.username + } - public func hash(into hasher: inout Hasher) { - hasher.combine(username) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} enum CodingKeys: String, CodingKey { + case username + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(username, forKey: .username, container: &container) + + } - } - public struct Data: Decodable { - public var - user_upsert: UserKey } - public func ref(username: String) -> MutationRef< - UpsertUserMutation.Data, - UpsertUserMutation.Variables - > { - var variables = UpsertUserMutation.Variables(username: username) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) - return ref as MutationRef - } - public func execute(username: String) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) +public var +user_upsert: UserKey - return try await ref.execute() } + + public func ref( + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } } -public class UpdateMovieMutation { + + + + + +public class UpdateMovieMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -773,180 +1068,223 @@ public class UpdateMovieMutation { public static let OperationName = "UpdateMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - id: UUID - - @OptionalVariable - public var - title: String? - - @OptionalVariable - public var - releaseYear: Int? - - @OptionalVariable - public var - genre: String? + + + public var +id: UUID - @OptionalVariable - public var - rating: Double? + + @OptionalVariable + public var +title: String? - @OptionalVariable - public var - description: String? + + @OptionalVariable + public var +releaseYear: Int? - @OptionalVariable - public var - imageUrl: String? + + @OptionalVariable + public var +genre: String? - @OptionalVariable - public var - tags: [String]? + + @OptionalVariable + public var +rating: Double? - public init(id: UUID, + + @OptionalVariable + public var +description: String? - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.id = id + + @OptionalVariable + public var +imageUrl: String? - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +tags: [String]? + + + + + + public init ( + +id: UUID + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.id = id + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id && - lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - } + + return lhs.id == rhs.id && + lhs.title == rhs.title && + lhs.releaseYear == rhs.releaseYear && + lhs.genre == rhs.genre && + lhs.rating == rhs.rating && + lhs.description == rhs.description && + lhs.imageUrl == rhs.imageUrl && + lhs.tags == rhs.tags + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + + hasher.combine(title) + + hasher.combine(releaseYear) + + hasher.combine(genre) + + hasher.combine(rating) + + hasher.combine(description) + + hasher.combine(imageUrl) + + hasher.combine(tags) + +} enum CodingKeys: String, CodingKey { + case id - + case title - + case releaseYear - + case genre - + case rating - + case description - + case imageUrl - + case tags + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) - - if $title.isSet { - try codecHelper.encode(title, forKey: .title, container: &container) + + + if $title.isSet { + try codecHelper.encode(title, forKey: .title, container: &container) } - - if $releaseYear.isSet { - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) + + if $releaseYear.isSet { + try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) + + if $rating.isSet { + try codecHelper.encode(rating, forKey: .rating, container: &container) } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) + + if $description.isSet { + try codecHelper.encode(description, forKey: .description, container: &container) } - - if $imageUrl.isSet { - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) + + if $imageUrl.isSet { + try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) } - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) + + if $tags.isSet { + try codecHelper.encode(tags, forKey: .tags, container: &container) } + } + } public struct Data: Decodable { - public var - movie_update: MovieKey? - } - public func ref(id: UUID, - _ optionalVars: ((inout UpdateMovieMutation.Variables) -> Void)? = nil) - -> MutationRef< - UpdateMovieMutation.Data, - UpdateMovieMutation.Variables - > { - var variables = UpdateMovieMutation.Variables(id: id) - if let optionalVars { - optionalVars(&variables) - } +public var +movie_update: MovieKey? - let ref = dataConnect.mutation( - name: "UpdateMovie", - variables: variables, - resultsDataType: UpdateMovieMutation.Data.self - ) - return ref as MutationRef } - public func execute(id: UUID, + public func ref( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) -> MutationRef { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + + , + _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = UpdateMovieMutation.Variables(id:id) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) + + return try await ref.execute() + + } +} - _ optionalVars: ((inout UpdateMovieMutation.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = UpdateMovieMutation.Variables(id: id) - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.mutation( - name: "UpdateMovie", - variables: variables, - resultsDataType: UpdateMovieMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteMovieMutation { + +public class DeleteMovieMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -955,67 +1293,104 @@ public class DeleteMovieMutation { public static let OperationName = "DeleteMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + - public init(id: UUID) { - self.id = id + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } - } - public struct Data: Decodable { - public var - movie_delete: MovieKey? } - public func ref(id: UUID) - -> MutationRef { - var variables = DeleteMovieMutation.Variables(id: id) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteMovie", - variables: variables, - resultsDataType: DeleteMovieMutation.Data.self - ) - return ref as MutationRef - } - public func execute(id: UUID) async throws -> OperationResult { - var variables = DeleteMovieMutation.Variables(id: id) - let ref = dataConnect.mutation( - name: "DeleteMovie", - variables: variables, - resultsDataType: DeleteMovieMutation.Data.self - ) +public var +movie_delete: MovieKey? - return try await ref.execute() } + + public func ref( + +id: UUID + + ) -> MutationRef { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = DeleteMovieMutation.Variables(id:id) + + + let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteUnpopularMoviesMutation { + + + + + +public class DeleteUnpopularMoviesMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1024,75 +1399,103 @@ public class DeleteUnpopularMoviesMutation { public static let OperationName = "DeleteUnpopularMovies" - public typealias Ref = MutationRef< - DeleteUnpopularMoviesMutation.Data, - DeleteUnpopularMoviesMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - minRating: Double + + + public var +minRating: Double + - public init(minRating: Double) { - self.minRating = minRating + + + + public init ( + +minRating: Double + + + ) { + self.minRating = minRating + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.minRating == rhs.minRating + + return lhs.minRating == rhs.minRating + } - public func hash(into hasher: inout Hasher) { - hasher.combine(minRating) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + +} enum CodingKeys: String, CodingKey { + case minRating + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + } + } public struct Data: Decodable { - public var - movie_deleteMany: Int - } - public func ref(minRating: Double) - -> MutationRef { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating: minRating) - let ref = dataConnect.mutation( - name: "DeleteUnpopularMovies", - variables: variables, - resultsDataType: DeleteUnpopularMoviesMutation.Data.self - ) - return ref as MutationRef< - DeleteUnpopularMoviesMutation.Data, - DeleteUnpopularMoviesMutation.Variables - > +public var +movie_deleteMany: Int + } - public func execute(minRating: Double) async throws - -> OperationResult { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating: minRating) + public func ref( + +minRating: Double + + ) -> MutationRef { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +minRating: Double + + ) async throws -> OperationResult { + var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) + + + let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) + + return try await ref.execute() + + } +} + + - let ref = dataConnect.mutation( - name: "DeleteUnpopularMovies", - variables: variables, - resultsDataType: DeleteUnpopularMoviesMutation.Data.self - ) - return try await ref.execute() - } -} -public class ListMoviesQuery { + +public class ListMoviesQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1101,170 +1504,243 @@ public class ListMoviesQuery { public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - limit: Int? - - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.limit == rhs.limit + + return lhs.limit == rhs.limit + } - public func hash(into hasher: inout Hasher) { - hasher.combine(limit) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(limit) + +} enum CodingKeys: String, CodingKey { + case limit + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - tags: [String]? +public var +id: UUID - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +title: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case imageUrl - case releaseYear - case genre +public var +releaseYear: Int? - case rating - case tags - case description - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +tags: [String]? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } +public var +description: String? - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - ListMoviesQuery.Data, - ListMoviesQuery.Variables - > { - var variables = ListMoviesQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation } - public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - } -} -public class ListMoviesByGenreQuery { + +public class ListMoviesByGenreQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1273,200 +1749,295 @@ public class ListMoviesByGenreQuery { public static let OperationName = "ListMoviesByGenre" - public typealias Ref = QueryRefObservation< - ListMoviesByGenreQuery.Data, - ListMoviesByGenreQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - genre: String + + + public var +genre: String + + + + + + public init ( + +genre: String + + + ) { + self.genre = genre + - public init(genre: String) { - self.genre = genre + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.genre == rhs.genre + + return lhs.genre == rhs.genre + } - public func hash(into hasher: inout Hasher) { - hasher.combine(genre) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(genre) + +} enum CodingKeys: String, CodingKey { + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable { - public struct MovieMostPopular: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - rating: Double? - public var - tags: [String]? +public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { + - public var movieMostPopularKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case imageUrl - case rating - case tags - } +public var +imageUrl: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - } - } +public var +tags: [String]? + - public var - mostPopular: [MovieMostPopular] + + public var movieMostPopularKey: MovieKey { + return MovieKey( + + id: id + ) + } - public struct MovieMostRecent: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostPopular: [MovieMostPopular] - public var - title: String - public var - imageUrl: String - public var - rating: Double? - public var - tags: [String]? - public var movieMostRecentKey: MovieKey { - return MovieKey( - id: id - ) - } +public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { + - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { - return lhs.id == rhs.id - } +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case title - case imageUrl +public var +title: String - case rating - case tags - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +imageUrl: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +rating: Double? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - } - } - public var - mostRecent: [MovieMostRecent] - } +public var +tags: [String]? - public func ref(genre: String) -> QueryRefObservation< - ListMoviesByGenreQuery.Data, - ListMoviesByGenreQuery.Variables - > { - var variables = ListMoviesByGenreQuery.Variables(genre: genre) - let ref = dataConnect.query( - name: "ListMoviesByGenre", - variables: variables, - resultsDataType: ListMoviesByGenreQuery.Data.self, - publisher: .observableMacro + + public var movieMostRecentKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - ListMoviesByGenreQuery.Data, - ListMoviesByGenreQuery.Variables - > } - public func execute(genre: String) async throws -> OperationResult { - var variables = ListMoviesByGenreQuery.Variables(genre: genre) - - let ref = dataConnect.query( - name: "ListMoviesByGenre", - variables: variables, - resultsDataType: ListMoviesByGenreQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case rating + + case tags + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + } +} +public var +mostRecent: [MovieMostRecent] - let refCast = ref as! QueryRefObservation< - ListMoviesByGenreQuery.Data, - ListMoviesByGenreQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +genre: String + + ) -> QueryRefObservation { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +genre: String + + ) async throws -> OperationResult { + var variables = ListMoviesByGenreQuery.Variables(genre:genre) + + + let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetMovieByIdQuery { + + + + + +public class GetMovieByIdQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1475,395 +2046,579 @@ public class GetMovieByIdQuery { public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + - public init(id: UUID) { - self.id = id + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } +public var +title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - } - } - public var - metadata: [MovieMetadataMetadata] +public var +imageUrl: String - public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +releaseYear: Int? - public var actorMainActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +genre: String? - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public var +rating: Double? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +description: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [ActorMainActors] - public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +tags: [String]? - public var - name: String - public var - imageUrl: String - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - return lhs.id == rhs.id - } +public struct MovieMetadataMetadata: Decodable { + - enum CodingKeys: String, CodingKey { - case id - case name +public var +director: String? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + enum CodingKeys: String, CodingKey { + + case director + + } - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - public var - supportingActors: [ActorSupportingActors] - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - reviewText: String? - public var - reviewDate: LocalDate - public var - rating: Int? +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +id: UUID - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +imageUrl: String - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var - user: User + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] - enum CodingKeys: String, CodingKey { - case id - case reviewText - case reviewDate - case rating - case user - } +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +id: UUID - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +name: String - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviews: [ReviewReviews] - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +imageUrl: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case id + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] - case title - case imageUrl - case releaseYear - case genre - case rating +public struct ReviewReviews: Decodable { + - case description - case tags +public var +id: UUID - case metadata - case mainActors - case supportingActors +public var +reviewText: String? - case reviews - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +reviewDate: LocalDate - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) +public var +rating: Int? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - mainActors = try codecHelper.decode( - [ActorMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [ActorSupportingActors].self, - forKey: .supportingActors, - container: &container - ) +public var +id: String - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - } - } - public var - movie: Movie? - } - public func ref(id: UUID) -> QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > { - var variables = GetMovieByIdQuery.Variables(id: id) +public var +username: String + - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id: id) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? - let refCast = ref as! QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetActorByIdQuery { + + + + + +public class GetActorByIdQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1872,257 +2627,382 @@ public class GetActorByIdQuery { public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID - public init(id: UUID) { - self.id = id + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Actor: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String - public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - tags: [String]? +public var +id: UUID - public var - imageUrl: String - public var movieMainActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - - public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public var +imageUrl: String - case tags - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +id: UUID - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [MovieMainActors] - public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +title: String - public var - title: String - public var - genre: String? - public var - tags: [String]? +public var +genre: String? - public var - imageUrl: String - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +tags: [String]? - public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case genre - case tags + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - case imageUrl - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - supportingActors: [MovieSupportingActors] +public var +id: UUID - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } +public var +title: String - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl +public var +genre: String? - case mainActors - case supportingActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +tags: [String]? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +imageUrl: String - mainActors = try codecHelper.decode( - [MovieMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [MovieSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - } - } + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - actor: Actor? + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + } +} +public var +supportingActors: [MovieSupportingActors] - public func ref(id: UUID) -> QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > { - var variables = GetActorByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id: id) - - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? - let refCast = ref as! QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetCurrentUserQuery { + + + + + +public class GetCurrentUserQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2131,404 +3011,577 @@ public class GetCurrentUserQuery { public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { - public struct Variables: OperationVariable {} + + + } public struct Data: Decodable { - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - rating: Int? - public var - reviewDate: LocalDate +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - public var - reviewText: String? - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +id: String - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +username: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ReviewReviews: Decodable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case reviewDate +public var +rating: Int? - case reviewText - case movie - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +reviewText: String? - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - reviews: [ReviewReviews] - public struct FavoriteMovieFavoriteMovies: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + - public var - genre: String? + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - imageUrl: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - public var - releaseYear: Int? + - public var - rating: Double? + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - public var - description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var - tags: [String]? + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - public struct MovieMetadataMetadata: Decodable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - director = try codecHelper.decode( - String?.self, - forKey: .director, - container: &container - ) - } - } - public var - metadata: [MovieMetadataMetadata] +public struct FavoriteMovieFavoriteMovies: Decodable { + - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - case title - case genre +public var +id: UUID - case imageUrl - case releaseYear - case rating +public var +title: String - case description - case tags - case metadata - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +imageUrl: String - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) +public var +releaseYear: Int? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +rating: Double? - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +tags: [String]? - public struct FavoriteActorFavoriteActors: Decodable { - public struct Actor: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct MovieMetadataMetadata: Decodable { + - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +director: String? - case name - case imageUrl - } + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + + enum CodingKeys: String, CodingKey { + + case director + + } - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - actor: Actor + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case actor - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - } - } + - public var - favoriteActors: [FavoriteActorFavoriteActors] + + enum CodingKeys: String, CodingKey { + + case movie + + } - public var userKey: UserKey { - return UserKey( - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case username - case reviews - case favoriteMovies +public struct FavoriteActorFavoriteActors: Decodable { + - case favoriteActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) +public var +id: UUID - favoriteActors = try codecHelper.decode( - [FavoriteActorFavoriteActors].self, - forKey: .favoriteActors, - container: &container - ) - } - } - public var - user: User? - } - public func ref( - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro +public var +name: String + + + +public var +imageUrl: String + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute( - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor + + + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + + } +} +public var +favoriteActors: [FavoriteActorFavoriteActors] + - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + case favoriteActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) + + + } +} +public var +user: User? - let refCast = ref as! QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > - return try await refCast.execute() } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetIfFavoritedMovieQuery { + + + + + +public class GetIfFavoritedMovieQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2537,97 +3590,134 @@ public class GetIfFavoritedMovieQuery { public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable { - public struct FavoriteMovie: Decodable { - public var - movieId: UUID - enum CodingKeys: String, CodingKey { - case movieId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } - } - public var - favorite_movie: FavoriteMovie? - } +public struct FavoriteMovie: Decodable { + - public func ref(movieId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > +public var +movieId: UUID + + + + + + enum CodingKeys: String, CodingKey { + + case movieId + } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + + } +} +public var +favorite_movie: FavoriteMovie? - let refCast = ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetIfFavoritedActorQuery { + + + + + +public class GetIfFavoritedActorQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2636,587 +3726,845 @@ public class GetIfFavoritedActorQuery { public static let OperationName = "GetIfFavoritedActor" - public typealias Ref = QueryRefObservation< - GetIfFavoritedActorQuery.Data, - GetIfFavoritedActorQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - actorId: UUID + + + public var +actorId: UUID + + + + + + public init ( + +actorId: UUID + + + ) { + self.actorId = actorId + - public init(actorId: UUID) { - self.actorId = actorId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.actorId == rhs.actorId + + return lhs.actorId == rhs.actorId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(actorId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(actorId) + +} enum CodingKeys: String, CodingKey { + case actorId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + } + } public struct Data: Decodable { - public struct FavoriteActor: Decodable { - public var - actorId: UUID - enum CodingKeys: String, CodingKey { - case actorId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - } - } - public var - favorite_actor: FavoriteActor? - } +public struct FavoriteActor: Decodable { + - public func ref(actorId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedActorQuery.Variables(actorId: actorId) - let ref = dataConnect.query( - name: "GetIfFavoritedActor", - variables: variables, - resultsDataType: GetIfFavoritedActorQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedActorQuery.Data, - GetIfFavoritedActorQuery.Variables - > - } +public var +actorId: UUID - public func execute(actorId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedActorQuery.Variables(actorId: actorId) - let ref = dataConnect.query( - name: "GetIfFavoritedActor", - variables: variables, - resultsDataType: GetIfFavoritedActorQuery.Data.self, - publisher: .observableMacro - ) + - let refCast = ref as! QueryRefObservation< - GetIfFavoritedActorQuery.Data, - GetIfFavoritedActorQuery.Variables - > - return try await refCast.execute() + + enum CodingKeys: String, CodingKey { + + case actorId + } -} -public class SearchAllQuery { - let dataConnect: DataConnect + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect + + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + } +} +public var +favorite_actor: FavoriteActor? - public static let OperationName = "SearchAll" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - @OptionalVariable - public var - input: String? - - public var - minYear: Int - - public var - maxYear: Int + } - public var - minRating: Double + public func ref( + +actorId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +actorId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - public var - maxRating: Double - public var - genre: String - public init(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, +public class SearchAllQuery{ - genre: String, + let dataConnect: DataConnect - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } - if let optionalVars { - optionalVars(&self) - } - } + public static let OperationName = "SearchAll" - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - } + public typealias Ref = QueryRefObservation - public func hash(into hasher: inout Hasher) { - hasher.combine(input) + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? - hasher.combine(minYear) + + + public var +minYear: Int - hasher.combine(maxYear) + + + public var +maxYear: Int - hasher.combine(minRating) + + + public var +minRating: Double - hasher.combine(maxRating) + + + public var +maxRating: Double - hasher.combine(genre) + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + enum CodingKeys: String, CodingKey { + case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable { - public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case genre - case rating - case imageUrl - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - title: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + - public static func == (lhs: MovieMoviesMatchingDescription, - rhs: MovieMoviesMatchingDescription) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +id: UUID - case title - case genre - case rating +public var +title: String - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - moviesMatchingDescription: [MovieMoviesMatchingDescription] - public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +imageUrl: String - public var - name: String - public var - imageUrl: String + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - id: id - ) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +id: UUID - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - actorsMatchingName: [ActorActorsMatchingName] +public var +name: String - public struct ReviewReviewsMatchingText: Decodable { - public var - id: UUID - public var - rating: Int? - public var - reviewText: String? +public var +imageUrl: String - public var - reviewDate: LocalDate - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var - title: String - - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct ReviewReviewsMatchingText: Decodable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } +public var +id: UUID - public var - movie: Movie - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +rating: Int? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +reviewText: String? - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } - public var - user: User - enum CodingKeys: String, CodingKey { - case id - case rating +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - case reviewText - case reviewDate +public var +id: UUID - case movie - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) + - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var - reviewsMatchingText: [ReviewReviewsMatchingText] + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + } +} +public var +movie: Movie - public func ref(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, - genre: String, +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchAllQuery.Data, - SearchAllQuery.Variables - > { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) - if let optionalVars { - optionalVars(&variables) - } +public var +id: String - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation - } - public func execute(minYear: Int, - maxYear: Int, +public var +username: String - minRating: Double, - maxRating: Double, + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } - genre: String, + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) + - if let optionalVars { - optionalVars(&variables) - } + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro - ) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - let refCast = ref as! QueryRefObservation - return try await refCast.execute() + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + } } +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } + + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class SearchMovieDescriptionUsingL2similarityQuery{ -public class SearchMovieDescriptionUsingL2similarityQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3225,150 +4573,208 @@ public class SearchMovieDescriptionUsingL2similarityQuery { public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" - public typealias Ref = QueryRefObservation< - SearchMovieDescriptionUsingL2similarityQuery.Data, - SearchMovieDescriptionUsingL2similarityQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - query: String + + + public var +query: String + + + + + + public init ( + +query: String + + + ) { + self.query = query + - public init(query: String) { - self.query = query + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.query == rhs.query + + return lhs.query == rhs.query + } - public func hash(into hasher: inout Hasher) { - hasher.combine(query) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(query) + +} enum CodingKeys: String, CodingKey { + case query + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(query, forKey: .query, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - description: String? - public var - tags: [String]? - public var - rating: Double? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - imageUrl: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +id: UUID - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +title: String - case title - case description - case tags +public var +description: String? - case rating - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +tags: [String]? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) +public var +rating: Double? - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - movies_descriptionEmbedding_similarity: [Movie] - } - public func ref(query: String) - -> QueryRefObservation { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query: query) - - let ref = dataConnect.query( - name: "SearchMovieDescriptionUsingL2Similarity", - variables: variables, - resultsDataType: SearchMovieDescriptionUsingL2similarityQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - SearchMovieDescriptionUsingL2similarityQuery.Data, - SearchMovieDescriptionUsingL2similarityQuery.Variables - > } - public func execute(query: String) async throws - -> OperationResult { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query: query) - - let ref = dataConnect.query( - name: "SearchMovieDescriptionUsingL2Similarity", - variables: variables, - resultsDataType: SearchMovieDescriptionUsingL2similarityQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case description + + case tags + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies_descriptionEmbedding_similarity: [Movie] - let refCast = ref as! QueryRefObservation< - SearchMovieDescriptionUsingL2similarityQuery.Data, - SearchMovieDescriptionUsingL2similarityQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +query: String + + ) -> QueryRefObservation { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +query: String + + ) async throws -> OperationResult { + var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) + + + let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class ListMoviesByPartialTitleQuery { + + + + + +public class ListMoviesByPartialTitleQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3377,139 +4783,198 @@ public class ListMoviesByPartialTitleQuery { public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - input: String + + + public var +input: String + + + + + + public init ( + +input: String + + + ) { + self.input = input + - public init(input: String) { - self.input = input + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input + + return lhs.input == rhs.input + } - public func hash(into hasher: inout Hasher) { - hasher.combine(input) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + +} enum CodingKeys: String, CodingKey { + case input + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(input, forKey: .input, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public var +title: String - case rating - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +genre: String? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +rating: Double? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - movies: [Movie] - } +public var +imageUrl: String - public func ref(input: String) - -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(input: input) - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > } - public func execute(input: String) async throws - -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(input: input) - - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +input: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +input: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class ListMoviesByTagQuery { + + + + + +public class ListMoviesByTagQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3518,139 +4983,198 @@ public class ListMoviesByTagQuery { public static let OperationName = "ListMoviesByTag" - public typealias Ref = QueryRefObservation< - ListMoviesByTagQuery.Data, - ListMoviesByTagQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - tag: String + + + public var +tag: String + + + + + + public init ( + +tag: String - public init(tag: String) { - self.tag = tag + + ) { + self.tag = tag + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.tag == rhs.tag + + return lhs.tag == rhs.tag + } - public func hash(into hasher: inout Hasher) { - hasher.combine(tag) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(tag) + +} enum CodingKeys: String, CodingKey { + case tag + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(tag, forKey: .tag, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - genre: String? - public var - rating: Double? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case imageUrl - case genre - case rating - } +public var +imageUrl: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +genre: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - } - } +public var +rating: Double? - public var - movies: [Movie] - } - - public func ref(tag: String) -> QueryRefObservation< - ListMoviesByTagQuery.Data, - ListMoviesByTagQuery.Variables - > { - var variables = ListMoviesByTagQuery.Variables(tag: tag) - let ref = dataConnect.query( - name: "ListMoviesByTag", - variables: variables, - resultsDataType: ListMoviesByTagQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - ListMoviesByTagQuery.Data, - ListMoviesByTagQuery.Variables - > } - public func execute(tag: String) async throws -> OperationResult { - var variables = ListMoviesByTagQuery.Variables(tag: tag) - - let ref = dataConnect.query( - name: "ListMoviesByTag", - variables: variables, - resultsDataType: ListMoviesByTagQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case genre + + case rating + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation< - ListMoviesByTagQuery.Data, - ListMoviesByTagQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +tag: String + + ) -> QueryRefObservation { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +tag: String + + ) async throws -> OperationResult { + var variables = ListMoviesByTagQuery.Variables(tag:tag) + + + let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class MoviesByReleaseYearQuery { + + + + + +public class MoviesByReleaseYearQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3659,158 +5183,214 @@ public class MoviesByReleaseYearQuery { public static let OperationName = "MoviesByReleaseYear" - public typealias Ref = QueryRefObservation< - MoviesByReleaseYearQuery.Data, - MoviesByReleaseYearQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - min: Int? - - @OptionalVariable - public var - max: Int? + + @OptionalVariable + public var +min: Int? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +max: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.min == rhs.min && - lhs.max == rhs.max - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(min) - - hasher.combine(max) - } + + return lhs.min == rhs.min && + lhs.max == rhs.max + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(min) + + hasher.combine(max) + +} enum CodingKeys: String, CodingKey { + case min - + case max + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $min.isSet { - try codecHelper.encode(min, forKey: .min, container: &container) + + if $min.isSet { + try codecHelper.encode(min, forKey: .min, container: &container) } - - if $max.isSet { - try codecHelper.encode(max, forKey: .max, container: &container) + + if $max.isSet { + try codecHelper.encode(max, forKey: .max, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - rating: Double? - public var - title: String - public var - imageUrl: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case title +public var +rating: Double? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +title: String - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout MoviesByReleaseYearQuery.Variables) -> Void)? = nil) - -> QueryRefObservation { - var variables = MoviesByReleaseYearQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "MoviesByReleaseYear", - variables: variables, - resultsDataType: MoviesByReleaseYearQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - MoviesByReleaseYearQuery.Data, - MoviesByReleaseYearQuery.Variables - > } - public func execute(_ optionalVars: ((inout MoviesByReleaseYearQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = MoviesByReleaseYearQuery.Variables() + public func ref( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = MoviesByReleaseYearQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "MoviesByReleaseYear", - variables: variables, - resultsDataType: MoviesByReleaseYearQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - MoviesByReleaseYearQuery.Data, - MoviesByReleaseYearQuery.Variables - > - return try await refCast.execute() - } -} -public class SearchMovieOrQuery { + +public class SearchMovieOrQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -3819,193 +5399,256 @@ public class SearchMovieOrQuery { public static let OperationName = "SearchMovieOr" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - minRating: Double? - - @OptionalVariable - public var - maxRating: Double? + + @OptionalVariable + public var +minRating: Double? - @OptionalVariable - public var - genre: String? + + @OptionalVariable + public var +maxRating: Double? - @OptionalVariable - public var - tag: String? + + @OptionalVariable + public var +genre: String? - @OptionalVariable - public var - input: String? + + @OptionalVariable + public var +tag: String? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - } + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} enum CodingKeys: String, CodingKey { + case minRating - + case maxRating - + case genre - + case tag - + case input + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - rating: Double? - public var - title: String - public var - imageUrl: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case title +public var +rating: Double? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +title: String - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout SearchMovieOrQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchMovieOrQuery.Data, - SearchMovieOrQuery.Variables - > { - var variables = SearchMovieOrQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "SearchMovieOr", - variables: variables, - resultsDataType: SearchMovieOrQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation } - public func execute(_ optionalVars: ((inout SearchMovieOrQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchMovieOrQuery.Variables() + public func ref( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieOrQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "SearchMovieOr", - variables: variables, - resultsDataType: SearchMovieOrQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - SearchMovieOrQuery.Data, - SearchMovieOrQuery.Variables - > - return try await refCast.execute() - } -} -public class SearchMovieAndQuery { +public class SearchMovieAndQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4014,196 +5657,256 @@ public class SearchMovieAndQuery { public static let OperationName = "SearchMovieAnd" - public typealias Ref = QueryRefObservation< - SearchMovieAndQuery.Data, - SearchMovieAndQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - minRating: Double? - - @OptionalVariable - public var - maxRating: Double? + + @OptionalVariable + public var +minRating: Double? - @OptionalVariable - public var - genre: String? + + @OptionalVariable + public var +maxRating: Double? - @OptionalVariable - public var - tag: String? + + @OptionalVariable + public var +genre: String? - @OptionalVariable - public var - input: String? + + @OptionalVariable + public var +tag: String? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +input: String? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) - } + + return lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre && + lhs.tag == rhs.tag && + lhs.input == rhs.input + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + + hasher.combine(tag) + + hasher.combine(input) + +} enum CodingKeys: String, CodingKey { + case minRating - + case maxRating - + case genre - + case tag - + case input + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + if $minRating.isSet { + try codecHelper.encode(minRating, forKey: .minRating, container: &container) } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) + + if $maxRating.isSet { + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) + + if $genre.isSet { + try codecHelper.encode(genre, forKey: .genre, container: &container) } - - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) + + if $tag.isSet { + try codecHelper.encode(tag, forKey: .tag, container: &container) } - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - rating: Double? - public var - title: String - public var - imageUrl: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case title +public var +rating: Double? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +title: String - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout SearchMovieAndQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchMovieAndQuery.Data, - SearchMovieAndQuery.Variables - > { - var variables = SearchMovieAndQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case title + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "SearchMovieAnd", - variables: variables, - resultsDataType: SearchMovieAndQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation } - public func execute(_ optionalVars: ((inout SearchMovieAndQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchMovieAndQuery.Variables() + public func ref( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchMovieAndQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "SearchMovieAnd", - variables: variables, - resultsDataType: SearchMovieAndQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - SearchMovieAndQuery.Data, - SearchMovieAndQuery.Variables - > - return try await refCast.execute() - } -} -public class GetFavoriteActorsQuery { + +public class GetFavoriteActorsQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4212,134 +5915,184 @@ public class GetFavoriteActorsQuery { public static let OperationName = "GetFavoriteActors" - public typealias Ref = QueryRefObservation< - GetFavoriteActorsQuery.Data, - GetFavoriteActorsQuery.Variables - > + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { - public struct Variables: OperationVariable {} + + + } public struct Data: Decodable { - public struct User: Decodable { - public struct FavoriteActor: Decodable { - public struct Actor: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct User: Decodable { + - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public struct FavoriteActor: Decodable { + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + - public var - actor: Actor - enum CodingKeys: String, CodingKey { - case actor - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - } - } - public var - favorite_actors_on_user: [FavoriteActor] +public var +name: String - enum CodingKeys: String, CodingKey { - case favorite_actors_on_user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - favorite_actors_on_user = try codecHelper.decode( - [FavoriteActor].self, - forKey: .favorite_actors_on_user, - container: &container - ) - } - } +public var +imageUrl: String - public var - user: User? - } - public func ref( - ) -> QueryRefObservation { - var variables = GetFavoriteActorsQuery.Variables() - - let ref = dataConnect.query( - name: "GetFavoriteActors", - variables: variables, - resultsDataType: GetFavoriteActorsQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) - return ref as! QueryRefObservation< - GetFavoriteActorsQuery.Data, - GetFavoriteActorsQuery.Variables - > } - public func execute( - ) async throws -> OperationResult { - var variables = GetFavoriteActorsQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actor: Actor - let ref = dataConnect.query( - name: "GetFavoriteActors", - variables: variables, - resultsDataType: GetFavoriteActorsQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - GetFavoriteActorsQuery.Data, - GetFavoriteActorsQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case actor + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + + } } +public var +favorite_actors_on_user: [FavoriteActor] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_actors_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetFavoriteActorsQuery.Variables() + + + let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetUserFavoriteMoviesQuery{ -public class GetUserFavoriteMoviesQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -4348,167 +6101,219 @@ public class GetUserFavoriteMoviesQuery { public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable { - public struct User: Decodable { - public struct FavoriteMovie: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - imageUrl: String - public var - releaseYear: Int? +public struct User: Decodable { + - public var - rating: Double? - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct FavoriteMovie: Decodable { + - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - case imageUrl - case releaseYear +public var +id: UUID - case rating - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +genre: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +imageUrl: String - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favorite_movies_on_user: [FavoriteMovie] +public var +rating: Double? - enum CodingKeys: String, CodingKey { - case favorite_movies_on_user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - favorite_movies_on_user = try codecHelper.decode( - [FavoriteMovie].self, - forKey: .favorite_movies_on_user, - container: &container - ) - } - } +public var +description: String? - public var - user: User? - } - public func ref( - ) - -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > } - public func execute( - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + } } +public var +favorite_movies_on_user: [FavoriteMovie] + + + + + + enum CodingKeys: String, CodingKey { + + case favorite_movies_on_user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + From 40531b022de9364e1ce0118061ca3b7bc89d40f3 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 8 Oct 2024 19:06:04 +0100 Subject: [PATCH 05/50] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20Upgrade=20to=20la?= =?UTF-8?q?test=20version=20of=20the=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/README.md | 529 +- .../Sources/FriendlyFlixClient.swift | 38 +- .../Sources/FriendlyFlixKeys.swift | 70 - .../Sources/FriendlyFlixOperations.swift | 5286 ++++------------- .../.dataconnect/schema/main/implicit.gql | 4 - .../.dataconnect/schema/main/input.gql | 36 - .../.dataconnect/schema/main/mutation.gql | 32 - .../.dataconnect/schema/main/query.gql | 13 - .../.dataconnect/schema/main/relation.gql | 16 - .../dataconnect/1_movie_insert.gql | 204 - .../dataconnect/2_actor_insert.gql | 104 - .../dataconnect/3_movie_actor_insert.gql | 238 - .../4_user_favorites_review_insert.gql | 142 - .../dataconnect/5_optional_vector_embed.gql | 141 - .../FriendlyFlix/dataconnect/dataconnect.yaml | 2 +- .../dataconnect/movie-connector/mutations.gql | 138 +- .../dataconnect/movie-connector/queries.gql | 332 +- .../dataconnect/moviedata_insert.gql | 687 +++ .../dataconnect/schema/schema.gql | 29 +- 19 files changed, 2061 insertions(+), 5980 deletions(-) delete mode 100644 Examples/FriendlyFlix/dataconnect/1_movie_insert.gql delete mode 100644 Examples/FriendlyFlix/dataconnect/2_actor_insert.gql delete mode 100644 Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql delete mode 100644 Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql delete mode 100644 Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql create mode 100644 Examples/FriendlyFlix/dataconnect/moviedata_insert.gql diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 9475655..be7abcd 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -38,6 +38,8 @@ connector.useEmulator() #### Optional ```swift +let orderByRating: OrderDirection = ... +let orderByReleaseYear: OrderDirection = ... let limit: Int = ... ``` @@ -73,47 +75,6 @@ DataConnect.friendlyFlixConnector.listMoviesQuery.execute(...) ``` -## ListMoviesByGenreQuery -### Variables -#### Required -```swift - -let genre: String = ... -``` - - - - -### Using the Query Reference -``` -struct MyView: View { - var listMoviesByGenreQueryRef = DataConnect.friendlyFlixConnector.listMoviesByGenreQuery.ref(...) - - var body: some View { - VStack { - if let data = listMoviesByGenreQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await listMoviesByGenreQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.listMoviesByGenreQuery.execute(...) -``` - - ## GetMovieByIdQuery ### Variables #### Required @@ -270,47 +231,6 @@ DataConnect.friendlyFlixConnector.getIfFavoritedMovieQuery.execute(...) ``` -## GetIfFavoritedActorQuery -### Variables -#### Required -```swift - -let actorId: UUID = ... -``` - - - - -### Using the Query Reference -``` -struct MyView: View { - var getIfFavoritedActorQueryRef = DataConnect.friendlyFlixConnector.getIfFavoritedActorQuery.ref(...) - - var body: some View { - VStack { - if let data = getIfFavoritedActorQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await getIfFavoritedActorQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.getIfFavoritedActorQuery.execute(...) -``` - - ## SearchAllQuery ### Variables #### Required @@ -362,356 +282,21 @@ DataConnect.friendlyFlixConnector.searchAllQuery.execute(...) ``` -## SearchMovieDescriptionUsingL2similarityQuery -### Variables -#### Required -```swift - -let query: String = ... -``` - - - - -### Using the Query Reference -``` -struct MyView: View { - var searchMovieDescriptionUsingL2similarityQueryRef = DataConnect.friendlyFlixConnector.searchMovieDescriptionUsingL2similarityQuery.ref(...) - - var body: some View { - VStack { - if let data = searchMovieDescriptionUsingL2similarityQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await searchMovieDescriptionUsingL2similarityQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.searchMovieDescriptionUsingL2similarityQuery.execute(...) -``` - - -## ListMoviesByPartialTitleQuery -### Variables -#### Required -```swift - -let input: String = ... -``` - - - - -### Using the Query Reference -``` -struct MyView: View { - var listMoviesByPartialTitleQueryRef = DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.ref(...) - - var body: some View { - VStack { - if let data = listMoviesByPartialTitleQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await listMoviesByPartialTitleQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.execute(...) -``` - - -## ListMoviesByTagQuery -### Variables -#### Required -```swift - -let tag: String = ... -``` - - - - -### Using the Query Reference -``` -struct MyView: View { - var listMoviesByTagQueryRef = DataConnect.friendlyFlixConnector.listMoviesByTagQuery.ref(...) - - var body: some View { - VStack { - if let data = listMoviesByTagQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await listMoviesByTagQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.listMoviesByTagQuery.execute(...) -``` - - -## MoviesByReleaseYearQuery -### Variables - - -#### Optional -```swift - -let min: Int = ... -let max: Int = ... -``` - - - -### Using the Query Reference -``` -struct MyView: View { - var moviesByReleaseYearQueryRef = DataConnect.friendlyFlixConnector.moviesByReleaseYearQuery.ref(...) - - var body: some View { - VStack { - if let data = moviesByReleaseYearQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await moviesByReleaseYearQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.moviesByReleaseYearQuery.execute(...) -``` - - -## SearchMovieOrQuery -### Variables - - -#### Optional -```swift - -let minRating: Double = ... -let maxRating: Double = ... -let genre: String = ... -let tag: String = ... -let input: String = ... -``` - - - -### Using the Query Reference -``` -struct MyView: View { - var searchMovieOrQueryRef = DataConnect.friendlyFlixConnector.searchMovieOrQuery.ref(...) - - var body: some View { - VStack { - if let data = searchMovieOrQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await searchMovieOrQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.searchMovieOrQuery.execute(...) -``` - - -## SearchMovieAndQuery -### Variables - - -#### Optional -```swift - -let minRating: Double = ... -let maxRating: Double = ... -let genre: String = ... -let tag: String = ... -let input: String = ... -``` - - - -### Using the Query Reference -``` -struct MyView: View { - var searchMovieAndQueryRef = DataConnect.friendlyFlixConnector.searchMovieAndQuery.ref(...) - - var body: some View { - VStack { - if let data = searchMovieAndQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await searchMovieAndQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.searchMovieAndQuery.execute(...) -``` - - -## GetFavoriteActorsQuery - - -### Using the Query Reference -``` -struct MyView: View { - var getFavoriteActorsQueryRef = DataConnect.friendlyFlixConnector.getFavoriteActorsQuery.ref(...) - - var body: some View { - VStack { - if let data = getFavoriteActorsQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await getFavoriteActorsQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.getFavoriteActorsQuery.execute(...) -``` - - -## GetUserFavoriteMoviesQuery - - -### Using the Query Reference -``` -struct MyView: View { - var getUserFavoriteMoviesQueryRef = DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.ref(...) - - var body: some View { - VStack { - if let data = getUserFavoriteMoviesQueryRef.data { - // use data in View - } - else { - Text("Loading...") - } - } - .task { - do { - let _ = try await getUserFavoriteMoviesQueryRef.execute() - } catch { - } - } - } -} -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) -``` - - # Mutations -## CreateMovieMutation +## UpsertUserMutation ### Variables #### Required ```swift -let title: String = ... -let releaseYear: Int = ... -let genre: String = ... -let imageUrl: String = ... +let username: String = ... ``` -#### Optional -```swift - -let rating: Double = ... -let description: String = ... -let tags: String = ... -``` - ### One-shot execute ``` -DataConnect.friendlyFlixConnector.createMovieMutation.execute(...) +DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) ``` ## AddFavoritedMovieMutation @@ -746,38 +331,6 @@ let movieId: UUID = ... DataConnect.friendlyFlixConnector.deleteFavoritedMovieMutation.execute(...) ``` -## AddFavoritedActorMutation - -### Variables - -#### Required -```swift - -let actorId: UUID = ... -``` - - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.addFavoritedActorMutation.execute(...) -``` - -## DeleteFavoritedActorMutation - -### Variables - -#### Required -```swift - -let actorId: UUID = ... -``` - - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.deleteFavoritedActorMutation.execute(...) -``` - ## AddReviewMutation ### Variables @@ -796,7 +349,7 @@ let reviewText: String = ... DataConnect.friendlyFlixConnector.addReviewMutation.execute(...) ``` -## DeleteReviewMutation +## UpdateReviewMutation ### Variables @@ -804,87 +357,29 @@ DataConnect.friendlyFlixConnector.addReviewMutation.execute(...) ```swift let movieId: UUID = ... +let rating: Int = ... +let reviewText: String = ... ``` ### One-shot execute ``` -DataConnect.friendlyFlixConnector.deleteReviewMutation.execute(...) -``` - -## UpsertUserMutation - -### Variables - -#### Required -```swift - -let username: String = ... -``` - - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) -``` - -## UpdateMovieMutation - -### Variables - -#### Required -```swift - -let id: UUID = ... -``` - - -#### Optional -```swift - -let title: String = ... -let releaseYear: Int = ... -let genre: String = ... -let rating: Double = ... -let description: String = ... -let imageUrl: String = ... -let tags: String = ... -``` - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.updateMovieMutation.execute(...) -``` - -## DeleteMovieMutation - -### Variables - -#### Required -```swift - -let id: UUID = ... -``` - - -### One-shot execute -``` -DataConnect.friendlyFlixConnector.deleteMovieMutation.execute(...) +DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) ``` -## DeleteUnpopularMoviesMutation +## DeleteReviewMutation ### Variables #### Required ```swift -let minRating: Double = ... +let movieId: UUID = ... ``` ### One-shot execute ``` -DataConnect.friendlyFlixConnector.deleteUnpopularMoviesMutation.execute(...) +DataConnect.friendlyFlixConnector.deleteReviewMutation.execute(...) ``` diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index f0a7d38..d0b2143 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -26,33 +26,18 @@ public class FriendlyFlixConnector { self.dataConnect = dataConnect // init operations - self.createMovieMutation = CreateMovieMutation(dataConnect: dataConnect) + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addFavoritedActorMutation = AddFavoritedActorMutation(dataConnect: dataConnect) - self.deleteFavoritedActorMutation = DeleteFavoritedActorMutation(dataConnect: dataConnect) self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.updateMovieMutation = UpdateMovieMutation(dataConnect: dataConnect) - self.deleteMovieMutation = DeleteMovieMutation(dataConnect: dataConnect) - self.deleteUnpopularMoviesMutation = DeleteUnpopularMoviesMutation(dataConnect: dataConnect) self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.listMoviesByGenreQuery = ListMoviesByGenreQuery(dataConnect: dataConnect) self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.getIfFavoritedActorQuery = GetIfFavoritedActorQuery(dataConnect: dataConnect) self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - self.searchMovieDescriptionUsingL2similarityQuery = SearchMovieDescriptionUsingL2similarityQuery(dataConnect: dataConnect) - self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - self.listMoviesByTagQuery = ListMoviesByTagQuery(dataConnect: dataConnect) - self.moviesByReleaseYearQuery = MoviesByReleaseYearQuery(dataConnect: dataConnect) - self.searchMovieOrQuery = SearchMovieOrQuery(dataConnect: dataConnect) - self.searchMovieAndQuery = SearchMovieAndQuery(dataConnect: dataConnect) - self.getFavoriteActorsQuery = GetFavoriteActorsQuery(dataConnect: dataConnect) - self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } @@ -61,33 +46,18 @@ public class FriendlyFlixConnector { } // MARK: Operations -public let createMovieMutation: CreateMovieMutation +public let upsertUserMutation: UpsertUserMutation public let addFavoritedMovieMutation: AddFavoritedMovieMutation public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addFavoritedActorMutation: AddFavoritedActorMutation -public let deleteFavoritedActorMutation: DeleteFavoritedActorMutation public let addReviewMutation: AddReviewMutation +public let updateReviewMutation: UpdateReviewMutation public let deleteReviewMutation: DeleteReviewMutation -public let upsertUserMutation: UpsertUserMutation -public let updateMovieMutation: UpdateMovieMutation -public let deleteMovieMutation: DeleteMovieMutation -public let deleteUnpopularMoviesMutation: DeleteUnpopularMoviesMutation public let listMoviesQuery: ListMoviesQuery -public let listMoviesByGenreQuery: ListMoviesByGenreQuery public let getMovieByIdQuery: GetMovieByIdQuery public let getActorByIdQuery: GetActorByIdQuery public let getCurrentUserQuery: GetCurrentUserQuery public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let getIfFavoritedActorQuery: GetIfFavoritedActorQuery public let searchAllQuery: SearchAllQuery -public let searchMovieDescriptionUsingL2similarityQuery: SearchMovieDescriptionUsingL2similarityQuery -public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery -public let listMoviesByTagQuery: ListMoviesByTagQuery -public let moviesByReleaseYearQuery: MoviesByReleaseYearQuery -public let searchMovieOrQuery: SearchMovieOrQuery -public let searchMovieAndQuery: SearchMovieAndQuery -public let getFavoriteActorsQuery: GetFavoriteActorsQuery -public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 59be0f9..ba7810c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -58,76 +58,6 @@ extension ActorKey : Hashable { -public struct FavoriteActorKey { - - public private(set) var userId: String - - public private(set) var actorId: UUID - - - enum CodingKeys: String, CodingKey { - - case userId - - case actorId - - } -} - -extension FavoriteActorKey : Codable { - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } -} - -extension FavoriteActorKey : Equatable { - public static func == (lhs: FavoriteActorKey, rhs: FavoriteActorKey) -> Bool { - - if lhs.userId != rhs.userId { - return false - } - - if lhs.actorId != rhs.actorId { - return false - } - - return true - } -} - -extension FavoriteActorKey : Hashable { - public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.actorId) - - } -} - - - public struct FavoriteMovieKey { public private(set) var userId: String diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index dde7e2e..4350f6f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -37,7 +37,7 @@ public enum OrderDirection: String, Codable { -public class CreateMovieMutation{ +public class UpsertUserMutation{ let dataConnect: DataConnect @@ -45,45 +45,15 @@ public class CreateMovieMutation{ self.dataConnect = dataConnect } - public static let OperationName = "CreateMovie" + public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { public var -title: String - - - - public var -releaseYear: Int - - - - public var -genre: String - - - @OptionalVariable - public var -rating: Double? - - - @OptionalVariable - public var -description: String? - - - - public var -imageUrl: String - - - @OptionalVariable - public var -tags: [String]? +username: String @@ -91,81 +61,32 @@ tags: [String]? public init ( -title: String -, - -releaseYear: Int -, - -genre: String -, - -imageUrl: String +username: String - - , - _ optionalVars: ((inout Variables)->())? = nil ) { - self.title = title - self.releaseYear = releaseYear - self.genre = genre - self.imageUrl = imageUrl + self.username = username - if let optionalVars { - optionalVars(&self) - } - } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags + return lhs.username == rhs.username } public func hash(into hasher: inout Hasher) { - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) + hasher.combine(username) } enum CodingKeys: String, CodingKey { - case title - - case releaseYear - - case genre - - case rating - - case description - - case imageUrl - - case tags + case username } @@ -174,32 +95,8 @@ public func hash(into hasher: inout Hasher) { let codecHelper = CodecHelper() - try codecHelper.encode(title, forKey: .title, container: &container) - - - - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - - - - try codecHelper.encode(genre, forKey: .genre, container: &container) - - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) - } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) - } - - - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - + try codecHelper.encode(username, forKey: .username, container: &container) - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) - } } @@ -210,57 +107,31 @@ public func hash(into hasher: inout Hasher) { public var -movie_insert: MovieKey +user_upsert: UserKey } public func ref( -title: String -, -releaseYear: Int -, -genre: String -, -imageUrl: String +username: String - - , - _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) - - if let optionalVars { - optionalVars(&variables) - } + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) - let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) - return ref as MutationRef + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef } public func execute( -title: String -, -releaseYear: Int -, -genre: String -, -imageUrl: String +username: String - - , - _ optionalVars: ((inout CreateMovieMutation.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = CreateMovieMutation.Variables(title:title,releaseYear:releaseYear,genre:genre,imageUrl:imageUrl) - - if let optionalVars { - optionalVars(&variables) - } + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) - let ref = dataConnect.mutation(name: "CreateMovie", variables: variables, resultsDataType:CreateMovieMutation.Data.self) + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) return try await ref.execute() @@ -484,7 +355,7 @@ movieId: UUID -public class AddFavoritedActorMutation{ +public class AddReviewMutation{ let dataConnect: DataConnect @@ -492,15 +363,25 @@ public class AddFavoritedActorMutation{ self.dataConnect = dataConnect } - public static let OperationName = "AddFavoritedActor" + public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { public var -actorId: UUID +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String @@ -508,11 +389,19 @@ actorId: UUID public init ( -actorId: UUID +movieId: UUID +, + +rating: Int +, + +reviewText: String ) { - self.actorId = actorId + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText @@ -520,20 +409,30 @@ actorId: UUID public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.actorId == rhs.actorId + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText } public func hash(into hasher: inout Hasher) { - hasher.combine(actorId) + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) } enum CodingKeys: String, CodingKey { - case actorId + case movieId + + case rating + + case reviewText } @@ -542,7 +441,15 @@ public func hash(into hasher: inout Hasher) { let codecHelper = CodecHelper() - try codecHelper.encode(actorId, forKey: .actorId, container: &container) + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) } @@ -554,31 +461,39 @@ public func hash(into hasher: inout Hasher) { public var -favorite_actor_upsert: FavoriteActorKey +review_insert: ReviewKey } public func ref( -actorId: UUID +movieId: UUID +, +rating: Int +, +reviewText: String - ) -> MutationRef { - var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) - return ref as MutationRef + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef } public func execute( -actorId: UUID +movieId: UUID +, +rating: Int +, +reviewText: String - ) async throws -> OperationResult { - var variables = AddFavoritedActorMutation.Variables(actorId:actorId) + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - let ref = dataConnect.mutation(name: "AddFavoritedActor", variables: variables, resultsDataType:AddFavoritedActorMutation.Data.self) + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) return try await ref.execute() @@ -590,7 +505,7 @@ actorId: UUID -public class DeleteFavoritedActorMutation{ +public class UpdateReviewMutation{ let dataConnect: DataConnect @@ -598,15 +513,25 @@ public class DeleteFavoritedActorMutation{ self.dataConnect = dataConnect } - public static let OperationName = "DeleteFavoritedActor" + public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { public var -actorId: UUID +movieId: UUID + + + + public var +rating: Int + + + + public var +reviewText: String @@ -614,11 +539,19 @@ actorId: UUID public init ( -actorId: UUID +movieId: UUID +, + +rating: Int +, + +reviewText: String ) { - self.actorId = actorId + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText @@ -626,20 +559,30 @@ actorId: UUID public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.actorId == rhs.actorId + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText } public func hash(into hasher: inout Hasher) { - hasher.combine(actorId) + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) } enum CodingKeys: String, CodingKey { - case actorId + case movieId + + case rating + + case reviewText } @@ -648,7 +591,15 @@ public func hash(into hasher: inout Hasher) { let codecHelper = CodecHelper() - try codecHelper.encode(actorId, forKey: .actorId, container: &container) + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(rating, forKey: .rating, container: &container) + + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) } @@ -660,31 +611,39 @@ public func hash(into hasher: inout Hasher) { public var -favorite_actor_delete: FavoriteActorKey? +review_update: ReviewKey? } public func ref( -actorId: UUID +movieId: UUID +, +rating: Int +, +reviewText: String - ) -> MutationRef { - var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + ) -> MutationRef { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) - return ref as MutationRef + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + return ref as MutationRef } public func execute( -actorId: UUID +movieId: UUID +, +rating: Int +, +reviewText: String - ) async throws -> OperationResult { - var variables = DeleteFavoritedActorMutation.Variables(actorId:actorId) + ) async throws -> OperationResult { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - let ref = dataConnect.mutation(name: "DeleteFavoritedActor", variables: variables, resultsDataType:DeleteFavoritedActorMutation.Data.self) + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) return try await ref.execute() @@ -696,7 +655,7 @@ actorId: UUID -public class AddReviewMutation{ +public class DeleteReviewMutation{ let dataConnect: DataConnect @@ -704,9 +663,9 @@ public class AddReviewMutation{ self.dataConnect = dataConnect } - public static let OperationName = "AddReview" + public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { @@ -714,35 +673,17 @@ public class AddReviewMutation{ public var movieId: UUID - - - public var -rating: Int - - - public var -reviewText: String - - - - - - public init ( + + + + public init ( movieId: UUID -, - -rating: Int -, - -reviewText: String ) { self.movieId = movieId - self.rating = rating - self.reviewText = reviewText @@ -750,9 +691,7 @@ reviewText: String public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + return lhs.movieId == rhs.movieId } @@ -761,20 +700,12 @@ public func hash(into hasher: inout Hasher) { hasher.combine(movieId) - hasher.combine(rating) - - hasher.combine(reviewText) - } enum CodingKeys: String, CodingKey { case movieId - case rating - - case reviewText - } public func encode(to encoder: Encoder) throws { @@ -785,14 +716,6 @@ public func hash(into hasher: inout Hasher) { try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(rating, forKey: .rating, container: &container) - - - - try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } } @@ -802,39 +725,31 @@ public func hash(into hasher: inout Hasher) { public var -review_upsert: ReviewKey +review_delete: ReviewKey? } public func ref( movieId: UUID -, -rating: Int -, -reviewText: String - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef } public func execute( movieId: UUID -, -rating: Int -, -reviewText: String - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) return try await ref.execute() @@ -846,7 +761,7 @@ reviewText: String -public class DeleteReviewMutation{ +public class ListMoviesQuery{ let dataConnect: DataConnect @@ -854,15 +769,25 @@ public class DeleteReviewMutation{ self.dataConnect = dataConnect } - public static let OperationName = "DeleteReview" + public static let OperationName = "ListMovies" - public typealias Ref = MutationRef + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - + @OptionalVariable public var -movieId: UUID +orderByRating: OrderDirection? + + + @OptionalVariable + public var +orderByReleaseYear: OrderDirection? + + + @OptionalVariable + public var +limit: Int? @@ -870,32 +795,45 @@ movieId: UUID public init ( -movieId: UUID - + + _ optionalVars: ((inout Variables)->())? = nil ) { - self.movieId = movieId + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit } public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) } enum CodingKeys: String, CodingKey { - case movieId + case orderByRating + + case orderByReleaseYear + + case limit } @@ -903,9 +841,17 @@ public func hash(into hasher: inout Hasher) { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + } - try codecHelper.encode(movieId, forKey: .movieId, container: &container) + if $orderByReleaseYear.isSet { + try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + } + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) + } } @@ -915,2933 +861,169 @@ public func hash(into hasher: inout Hasher) { + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + public var -review_delete: ReviewKey? +id: UUID - } - public func ref( - -movieId: UUID - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - +public var +title: String - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } - public func execute( - -movieId: UUID - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} +public var +imageUrl: String +public var +releaseYear: Int? -public class UpsertUserMutation{ +public var +genre: String? - let dataConnect: DataConnect - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - public static let OperationName = "UpsertUser" +public var +rating: Double? - public typealias Ref = MutationRef - public struct Variables: OperationVariable { - - - public var -username: String +public var +tags: [String]? - - - - public init ( - -username: String - - ) { - self.username = username - - - } +public var +description: String? - public static func == (lhs: Variables, rhs: Variables) -> Bool { + + + public var movieKey: MovieKey { + return MovieKey( - return lhs.username == rhs.username - - } + id: id + ) + } - + public func hash(into hasher: inout Hasher) { - hasher.combine(username) + hasher.combine(id) } - - enum CodingKeys: String, CodingKey { - - case username - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(username, forKey: .username, container: &container) - - - } - +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + } - public struct Data: Decodable { - - - -public var -user_upsert: UserKey + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -username: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - - -public class UpdateMovieMutation{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "UpdateMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - @OptionalVariable - public var -title: String? - - - @OptionalVariable - public var -releaseYear: Int? - - - @OptionalVariable - public var -genre: String? - - - @OptionalVariable - public var -rating: Double? - - - @OptionalVariable - public var -description: String? - - - @OptionalVariable - public var -imageUrl: String? - - - @OptionalVariable - public var -tags: [String]? - - - - - - public init ( - -id: UUID - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.id = id - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id && - lhs.title == rhs.title && - lhs.releaseYear == rhs.releaseYear && - lhs.genre == rhs.genre && - lhs.rating == rhs.rating && - lhs.description == rhs.description && - lhs.imageUrl == rhs.imageUrl && - lhs.tags == rhs.tags - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - - hasher.combine(title) - - hasher.combine(releaseYear) - - hasher.combine(genre) - - hasher.combine(rating) - - hasher.combine(description) - - hasher.combine(imageUrl) - - hasher.combine(tags) - -} - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case releaseYear - - case genre - - case rating - - case description - - case imageUrl - - case tags - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - if $title.isSet { - try codecHelper.encode(title, forKey: .title, container: &container) - } - - if $releaseYear.isSet { - try codecHelper.encode(releaseYear, forKey: .releaseYear, container: &container) - } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - - if $rating.isSet { - try codecHelper.encode(rating, forKey: .rating, container: &container) - } - - if $description.isSet { - try codecHelper.encode(description, forKey: .description, container: &container) - } - - if $imageUrl.isSet { - try codecHelper.encode(imageUrl, forKey: .imageUrl, container: &container) - } - - if $tags.isSet { - try codecHelper.encode(tags, forKey: .tags, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - -public var -movie_update: MovieKey? - - } - - public func ref( - -id: UUID - - - , - _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil - ) -> MutationRef { - var variables = UpdateMovieMutation.Variables(id:id) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -id: UUID - - - , - _ optionalVars: ((inout UpdateMovieMutation.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = UpdateMovieMutation.Variables(id:id) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.mutation(name: "UpdateMovie", variables: variables, resultsDataType:UpdateMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - - -public class DeleteMovieMutation{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "DeleteMovie" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - -public var -movie_delete: MovieKey? - - } - - public func ref( - -id: UUID - - ) -> MutationRef { - var variables = DeleteMovieMutation.Variables(id:id) - - - let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = DeleteMovieMutation.Variables(id:id) - - - let ref = dataConnect.mutation(name: "DeleteMovie", variables: variables, resultsDataType:DeleteMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - - -public class DeleteUnpopularMoviesMutation{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "DeleteUnpopularMovies" - - public typealias Ref = MutationRef - - public struct Variables: OperationVariable { - - - public var -minRating: Double - - - - - - public init ( - -minRating: Double - - - ) { - self.minRating = minRating - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.minRating == rhs.minRating - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(minRating) - -} - - enum CodingKeys: String, CodingKey { - - case minRating - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - } - - } - - public struct Data: Decodable { - - -public var -movie_deleteMany: Int - - } - - public func ref( - -minRating: Double - - ) -> MutationRef { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) - - - let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -minRating: Double - - ) async throws -> OperationResult { - var variables = DeleteUnpopularMoviesMutation.Variables(minRating:minRating) - - - let ref = dataConnect.mutation(name: "DeleteUnpopularMovies", variables: variables, resultsDataType:DeleteUnpopularMoviesMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - - -public class ListMoviesQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "ListMovies" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(limit) - -} - - enum CodingKeys: String, CodingKey { - - case limit - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) - } - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - -public var -description: String? - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] - - } - - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class ListMoviesByGenreQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "ListMoviesByGenre" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -genre: String - - - - - - public init ( - -genre: String - - - ) { - self.genre = genre - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(genre) - -} - - enum CodingKeys: String, CodingKey { - - case genre - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(genre, forKey: .genre, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct MovieMostPopular: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - - public var movieMostPopularKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostPopular, rhs: MovieMostPopular) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostPopular: [MovieMostPopular] - - - - - -public struct MovieMostRecent: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -rating: Double? - - - -public var -tags: [String]? - - - - public var movieMostRecentKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMostRecent, rhs: MovieMostRecent) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case rating - - case tags - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - } -} -public var -mostRecent: [MovieMostRecent] - - } - - public func ref( - -genre: String - - ) -> QueryRefObservation { - var variables = ListMoviesByGenreQuery.Variables(genre:genre) - - - let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -genre: String - - ) async throws -> OperationResult { - var variables = ListMoviesByGenreQuery.Variables(genre:genre) - - - let ref = dataConnect.query(name: "ListMoviesByGenre", variables: variables, resultsDataType:ListMoviesByGenreQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetMovieByIdQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetMovieById" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -genre: String? - - - -public var -rating: Double? - - - -public var -description: String? - - - -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable { - - - -public var -director: String? - - - - - - enum CodingKeys: String, CodingKey { - - case director - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] - - - - - -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] - - - - - -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] - - - - - -public struct ReviewReviews: Decodable { - - - -public var -id: UUID - - - -public var -reviewText: String? - - - -public var -reviewDate: LocalDate - - - -public var -rating: Int? - - - - - -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviews: [ReviewReviews] - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? - - } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetActorByIdQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetActorById" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -id: UUID - - - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} - - enum CodingKeys: String, CodingKey { - - case id - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - - -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -tags: [String]? - - - -public var -imageUrl: String - - - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] - - - - - -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -tags: [String]? - - - -public var -imageUrl: String - - - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [MovieSupportingActors] - - - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? - - } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetCurrentUserQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetCurrentUser" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - - } - - public struct Data: Decodable { - - - - -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String - - - - - -public struct ReviewReviews: Decodable { - - - -public var -id: UUID - - - -public var -rating: Int? - - - -public var -reviewDate: LocalDate - - - -public var -reviewText: String? - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] - - - - - -public struct FavoriteMovieFavoriteMovies: Decodable { - - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -title: String - - - -public var -genre: String? - - - -public var -imageUrl: String - - - -public var -releaseYear: Int? - - - -public var -rating: Double? - - - -public var -description: String? - - - -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable { - - - -public var -director: String? - - - - - - enum CodingKeys: String, CodingKey { - - case director - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - - -public struct FavoriteActorFavoriteActors: Decodable { - - - - - -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - - - -public var -name: String - - - -public var -imageUrl: String - - - - public var actorKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor - - - - - - enum CodingKeys: String, CodingKey { - - case actor - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) - - - } -} -public var -favoriteActors: [FavoriteActorFavoriteActors] - - - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - case favoriteActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - - self.favoriteActors = try codecHelper.decode([FavoriteActorFavoriteActors].self, forKey: .favoriteActors, container: &container) - - - } -} -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetIfFavoritedMovieQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetIfFavoritedMovie" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -movieId: UUID - - + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} - - enum CodingKeys: String, CodingKey { - - case movieId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct FavoriteMovie: Decodable { - - - -public var -movieId: UUID - - - - - - enum CodingKeys: String, CodingKey { + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - case movieId - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } -} -public var -favorite_movie: FavoriteMovie? - - } - - public func ref( - -movieId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetIfFavoritedActorQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetIfFavoritedActor" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -actorId: UUID - - + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - public init ( - -actorId: UUID - - - ) { - self.actorId = actorId - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.actorId == rhs.actorId - - } - + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public func hash(into hasher: inout Hasher) { - - hasher.combine(actorId) - -} - - enum CodingKeys: String, CodingKey { - - case actorId - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } - - } - - public struct Data: Decodable { - - - - -public struct FavoriteActor: Decodable { - - - -public var -actorId: UUID - - - - - - enum CodingKeys: String, CodingKey { - case actorId - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) } } public var -favorite_actor: FavoriteActor? +movies: [Movie] } public func ref( -actorId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation } public func execute( -actorId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedActorQuery.Variables(actorId:actorId) - let ref = dataConnect.query(name: "GetIfFavoritedActor", variables: variables, resultsDataType:GetIfFavoritedActorQuery.Data.self, publisher: .observableMacro) + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } @@ -3852,7 +1034,7 @@ actorId: UUID -public class SearchAllQuery{ +public class GetMovieByIdQuery{ let dataConnect: DataConnect @@ -3860,40 +1042,15 @@ public class SearchAllQuery{ self.dataConnect = dataConnect } - public static let OperationName = "SearchAll" + public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var -input: String? - - - - public var -minYear: Int - - - - public var -maxYear: Int - - - - public var -minRating: Double - - - - public var -maxRating: Double - - public var -genre: String +id: UUID @@ -3901,80 +1058,32 @@ genre: String public init ( -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String +id: UUID - - , - _ optionalVars: ((inout Variables)->())? = nil ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + self.id = id - if let optionalVars { - optionalVars(&self) - } - } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre + return lhs.id == rhs.id } public func hash(into hasher: inout Hasher) { - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) + hasher.combine(id) } enum CodingKeys: String, CodingKey { - case input - - case minYear - - case maxYear - - case minRating - - case maxRating - - case genre + case id } @@ -3982,28 +1091,8 @@ public func hash(into hasher: inout Hasher) { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } - - - try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - - try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - - try codecHelper.encode(genre, forKey: .genre, container: &container) + try codecHelper.encode(id, forKey: .id, container: &container) } @@ -4015,7 +1104,7 @@ public func hash(into hasher: inout Hasher) { -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { @@ -4029,6 +1118,16 @@ title: String +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + public var genre: String? @@ -4040,43 +1139,31 @@ rating: Double? public var -imageUrl: String +description: String? - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } + + +public var +director: String? + enum CodingKeys: String, CodingKey { - case id - - case title - - case genre - - case rating - - case imageUrl + case director } @@ -4086,35 +1173,19 @@ public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTi - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) } } public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] +metadata: [MovieMetadataMetadata] -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { @@ -4124,17 +1195,7 @@ id: UUID public var -title: String - - - -public var -genre: String? - - - -public var -rating: Double? +name: String @@ -4143,8 +1204,8 @@ imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( + public var actorMainActorsKey: ActorKey { + return ActorKey( id: id ) @@ -4156,7 +1217,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { return lhs.id == rhs.id @@ -4169,11 +1230,7 @@ public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatc case id - case title - - case genre - - case rating + case name case imageUrl @@ -4189,15 +1246,7 @@ public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatc - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) @@ -4207,13 +1256,13 @@ public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatc } } public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] +mainActors: [ActorMainActors] -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { @@ -4232,7 +1281,7 @@ imageUrl: String - public var actorActorsMatchingNameKey: ActorKey { + public var actorSupportingActorsKey: ActorKey { return ActorKey( id: id @@ -4245,7 +1294,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { return lhs.id == rhs.id @@ -4284,13 +1333,13 @@ public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingNam } } public var -actorsMatchingName: [ActorActorsMatchingName] +supportingActors: [ActorSupportingActors] -public struct ReviewReviewsMatchingText: Decodable { +public struct ReviewReviews: Decodable { @@ -4300,38 +1349,38 @@ id: UUID public var -rating: Int? +reviewText: String? public var -reviewText: String? +reviewDate: LocalDate public var -reviewDate: LocalDate +rating: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct User: Decodable ,Hashable, Equatable, Identifiable { public var -id: UUID +id: String public var -title: String +username: String - public var movieKey: MovieKey { - return MovieKey( + public var userKey: UserKey { + return UserKey( id: id ) @@ -4343,7 +1392,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Movie, rhs: Movie) -> Bool { +public static func == (lhs: User, rhs: User) -> Bool { return lhs.id == rhs.id @@ -4356,7 +1405,7 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case id - case title + case username } @@ -4366,38 +1415,70 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) } } public var -movie: Movie - - - +user: User -public struct User: Decodable ,Hashable, Equatable, Identifiable { + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } -public var -id: String - - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} public var -username: String +reviews: [ReviewReviews] - public var userKey: UserKey { - return UserKey( + public var movieKey: MovieKey { + return MovieKey( id: id ) @@ -4409,7 +1490,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: User, rhs: User) -> Bool { +public static func == (lhs: Movie, rhs: Movie) -> Bool { return lhs.id == rhs.id @@ -4422,7 +1503,27 @@ public static func == (lhs: User, rhs: User) -> Bool { case id - case username + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews } @@ -4432,127 +1533,78 @@ public static func == (lhs: User, rhs: User) -> Bool { - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - case id - case rating + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - case reviewText - case reviewDate - case movie + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - case user - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) } } public var -reviewsMatchingText: [ReviewReviewsMatchingText] +movie: Movie? } public func ref( -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String +id: UUID + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( - if let optionalVars { - optionalVars(&variables) - } +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } @@ -4563,7 +1615,7 @@ genre: String -public class SearchMovieDescriptionUsingL2similarityQuery{ +public class GetActorByIdQuery{ let dataConnect: DataConnect @@ -4571,15 +1623,15 @@ public class SearchMovieDescriptionUsingL2similarityQuery{ self.dataConnect = dataConnect } - public static let OperationName = "SearchMovieDescriptionUsingL2Similarity" + public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { public var -query: String +id: UUID @@ -4587,11 +1639,11 @@ query: String public init ( -query: String +id: UUID ) { - self.query = query + self.id = id @@ -4599,20 +1651,20 @@ query: String public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.query == rhs.query + return lhs.id == rhs.id } public func hash(into hasher: inout Hasher) { - hasher.combine(query) + hasher.combine(id) } enum CodingKeys: String, CodingKey { - case query + case id } @@ -4621,7 +1673,7 @@ public func hash(into hasher: inout Hasher) { let codecHelper = CodecHelper() - try codecHelper.encode(query, forKey: .query, container: &container) + try codecHelper.encode(id, forKey: .id, container: &container) } @@ -4633,7 +1685,7 @@ public func hash(into hasher: inout Hasher) { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { @@ -4643,22 +1695,38 @@ id: UUID public var -title: String +name: String public var -description: String? +imageUrl: String + + + +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + + public var -tags: [String]? +id: UUID public var -rating: Double? +title: String + + + +public var +genre: String? + + + +public var +tags: [String]? @@ -4667,7 +1735,7 @@ imageUrl: String - public var movieKey: MovieKey { + public var movieMainActorsKey: MovieKey { return MovieKey( id: id @@ -4680,7 +1748,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Movie, rhs: Movie) -> Bool { +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { return lhs.id == rhs.id @@ -4695,12 +1763,10 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case title - case description + case genre case tags - case rating - case imageUrl } @@ -4719,131 +1785,26 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) } } public var -movies_descriptionEmbedding_similarity: [Movie] - - } - - public func ref( - -query: String - - ) -> QueryRefObservation { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) - - - let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -query: String - - ) async throws -> OperationResult { - var variables = SearchMovieDescriptionUsingL2similarityQuery.Variables(query:query) - - - let ref = dataConnect.query(name: "SearchMovieDescriptionUsingL2Similarity", variables: variables, resultsDataType:SearchMovieDescriptionUsingL2similarityQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class ListMoviesByPartialTitleQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "ListMoviesByPartialTitle" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - public var -input: String - - - - - - public init ( - -input: String - - - ) { - self.input = input - - - - } - - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - -} - - enum CodingKeys: String, CodingKey { - - case input - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(input, forKey: .input, container: &container) - - - } - - } +mainActors: [MovieMainActors] - public struct Data: Decodable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { @@ -4863,7 +1824,7 @@ genre: String? public var -rating: Double? +tags: [String]? @@ -4872,7 +1833,7 @@ imageUrl: String - public var movieKey: MovieKey { + public var movieSupportingActorsKey: MovieKey { return MovieKey( id: id @@ -4885,7 +1846,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Movie, rhs: Movie) -> Bool { +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { return lhs.id == rhs.id @@ -4902,7 +1863,7 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case genre - case rating + case tags case imageUrl @@ -4925,44 +1886,109 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + + + + public var actorKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + } } public var -movies: [Movie] +actor: Actor? } public func ref( -input: String +id: UUID - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation } public func execute( -input: String +id: UUID - ) async throws -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(input:input) + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } @@ -4973,7 +1999,7 @@ input: String -public class ListMoviesByTagQuery{ +public class GetCurrentUserQuery{ let dataConnect: DataConnect @@ -4981,69 +2007,38 @@ public class ListMoviesByTagQuery{ self.dataConnect = dataConnect } - public static let OperationName = "ListMoviesByTag" + public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -tag: String - - - - public init ( - -tag: String + + } - - ) { - self.tag = tag - + public struct Data: Decodable { - - } - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.tag == rhs.tag - - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(tag) + +public struct User: Decodable ,Hashable, Equatable, Identifiable { -} - enum CodingKeys: String, CodingKey { - - case tag - - } - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(tag, forKey: .tag, container: &container) - - - } +public var +id: String - } - public struct Data: Decodable { + +public var +username: String -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + +public struct ReviewReviews: Decodable { @@ -5053,22 +2048,33 @@ id: UUID public var -title: String +rating: Int? public var -imageUrl: String +reviewDate: LocalDate public var -genre: String? +reviewText: String? + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + public var -rating: Double? +id: UUID + + + +public var +title: String @@ -5100,12 +2106,42 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case title - case imageUrl + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + - case genre + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id case rating + case reviewDate + + case reviewText + + case movie + } public init(from decoder: any Decoder) throws { @@ -5118,174 +2154,231 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) } } public var -movies: [Movie] +reviews: [ReviewReviews] - } - public func ref( - -tag: String - ) -> QueryRefObservation { - var variables = ListMoviesByTagQuery.Variables(tag:tag) - - let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - public func execute( - -tag: String +public struct FavoriteMovieFavoriteMovies: Decodable { + - ) async throws -> OperationResult { - var variables = ListMoviesByTagQuery.Variables(tag:tag) - - - let ref = dataConnect.query(name: "ListMoviesByTag", variables: variables, resultsDataType:ListMoviesByTagQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + +public var +id: UUID -public class MoviesByReleaseYearQuery{ - let dataConnect: DataConnect - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } +public var +title: String - public static let OperationName = "MoviesByReleaseYear" - public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable { +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + +public var +tags: [String]? + + + + + +public struct MovieMetadataMetadata: Decodable { - @OptionalVariable - public var -min: Int? + + +public var +director: String? + - @OptionalVariable - public var -max: Int? + + enum CodingKeys: String, CodingKey { + + case director + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - + + } +} +public var +metadata: [MovieMetadataMetadata] - - if let optionalVars { - optionalVars(&self) - } - - } - public static func == (lhs: Variables, rhs: Variables) -> Bool { + + public var movieKey: MovieKey { + return MovieKey( - return lhs.min == rhs.min && - lhs.max == rhs.max - - } + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - hasher.combine(min) +public func hash(into hasher: inout Hasher) { - hasher.combine(max) + hasher.combine(id) } - - enum CodingKeys: String, CodingKey { - - case min - - case max - - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - if $min.isSet { - try codecHelper.encode(min, forKey: .min, container: &container) - } - - if $max.isSet { - try codecHelper.encode(max, forKey: .max, container: &container) - } - - } - +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + } - public struct Data: Decodable { - - - - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } -public var -id: UUID - - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} public var -rating: Double? - +movie: Movie -public var -title: String + + + enum CodingKeys: String, CodingKey { + + case movie + + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} public var -imageUrl: String +favoriteMovies: [FavoriteMovieFavoriteMovies] - public var movieKey: MovieKey { - return MovieKey( + public var userKey: UserKey { + return UserKey( id: id ) @@ -5297,7 +2390,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Movie, rhs: Movie) -> Bool { +public static func == (lhs: User, rhs: User) -> Bool { return lhs.id == rhs.id @@ -5310,11 +2403,11 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case id - case rating + case username - case title + case reviews - case imageUrl + case favoriteMovies } @@ -5324,61 +2417,45 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) } } public var -movies: [Movie] +user: User? } public func ref( - - - _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = MoviesByReleaseYearQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() - let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation } public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() - _ optionalVars: ((inout MoviesByReleaseYearQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = MoviesByReleaseYearQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "MoviesByReleaseYear", variables: variables, resultsDataType:MoviesByReleaseYearQuery.Data.self, publisher: .observableMacro) + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } @@ -5389,7 +2466,7 @@ movies: [Movie] -public class SearchMovieOrQuery{ +public class GetIfFavoritedMovieQuery{ let dataConnect: DataConnect @@ -5397,35 +2474,15 @@ public class SearchMovieOrQuery{ self.dataConnect = dataConnect } - public static let OperationName = "SearchMovieOr" + public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var -minRating: Double? - - - @OptionalVariable - public var -maxRating: Double? - - - @OptionalVariable - public var -genre: String? - - - @OptionalVariable - public var -tag: String? - - - @OptionalVariable + public var -input: String? +movieId: UUID @@ -5433,55 +2490,32 @@ input: String? public init ( +movieId: UUID + - - _ optionalVars: ((inout Variables)->())? = nil ) { + self.movieId = movieId - if let optionalVars { - optionalVars(&self) - } - } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input + return lhs.movieId == rhs.movieId } public func hash(into hasher: inout Hasher) { - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - - hasher.combine(tag) - - hasher.combine(input) + hasher.combine(movieId) } enum CodingKeys: String, CodingKey { - case minRating - - case maxRating - - case genre - - case tag - - case input + case movieId } @@ -5489,25 +2523,9 @@ public func hash(into hasher: inout Hasher) { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) - } - - if $maxRating.isSet { - try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - } - - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) - } + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } } @@ -5518,61 +2536,20 @@ public func hash(into hasher: inout Hasher) { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct FavoriteMovie: Decodable { public var -id: UUID - - - -public var -rating: Double? - - - -public var -title: String - - - -public var -imageUrl: String - - - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } +movieId: UUID - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } enum CodingKeys: String, CodingKey { - case id - - case rating - - case title - - case imageUrl + case movieId } @@ -5582,61 +2559,39 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } } public var -movies: [Movie] +favorite_movie: FavoriteMovie? } public func ref( - - - _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieOrQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation } public func execute( +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - _ optionalVars: ((inout SearchMovieOrQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchMovieOrQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieOr", variables: variables, resultsDataType:SearchMovieOrQuery.Data.self, publisher: .observableMacro) + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } @@ -5647,7 +2602,7 @@ movies: [Movie] -public class SearchMovieAndQuery{ +public class SearchAllQuery{ let dataConnect: DataConnect @@ -5655,35 +2610,40 @@ public class SearchMovieAndQuery{ self.dataConnect = dataConnect } - public static let OperationName = "SearchMovieAnd" + public static let OperationName = "SearchAll" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { @OptionalVariable public var -minRating: Double? +input: String? - @OptionalVariable + public var -maxRating: Double? +minYear: Int - @OptionalVariable + public var -genre: String? +maxYear: Int - @OptionalVariable + public var -tag: String? +minRating: Double - @OptionalVariable + public var -input: String? +maxRating: Double + + + + public var +genre: String @@ -5691,10 +2651,30 @@ input: String? public init ( +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + , _ optionalVars: ((inout Variables)->())? = nil ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre @@ -5706,66 +2686,75 @@ input: String? public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.minRating == rhs.minRating && + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre && - lhs.tag == rhs.tag && - lhs.input == rhs.input + lhs.genre == rhs.genre } public func hash(into hasher: inout Hasher) { + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + hasher.combine(minRating) hasher.combine(maxRating) hasher.combine(genre) - hasher.combine(tag) - - hasher.combine(input) - } enum CodingKeys: String, CodingKey { + case input + + case minYear + + case maxYear + case minRating case maxRating case genre - case tag - - case input - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - if $minRating.isSet { - try codecHelper.encode(minRating, forKey: .minRating, container: &container) + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - if $maxRating.isSet { + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) + + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) + + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - } - if $genre.isSet { - try codecHelper.encode(genre, forKey: .genre, container: &container) - } - if $tag.isSet { - try codecHelper.encode(tag, forKey: .tag, container: &container) - } - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) - } + try codecHelper.encode(genre, forKey: .genre, container: &container) + } @@ -5776,7 +2765,7 @@ public func hash(into hasher: inout Hasher) { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { @@ -5786,12 +2775,17 @@ id: UUID public var -rating: Double? +title: String public var -title: String +genre: String? + + + +public var +rating: Double? @@ -5800,7 +2794,7 @@ imageUrl: String - public var movieKey: MovieKey { + public var movieMoviesMatchingTitleKey: MovieKey { return MovieKey( id: id @@ -5813,7 +2807,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Movie, rhs: Movie) -> Bool { +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { return lhs.id == rhs.id @@ -5826,10 +2820,12 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case id - case rating - case title + case genre + + case rating + case imageUrl } @@ -5844,11 +2840,15 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) @@ -5858,99 +2858,33 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { } } public var -movies: [Movie] - - } - - public func ref( - - - - _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchMovieAndQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout SearchMovieAndQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchMovieAndQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchMovieAnd", variables: variables, resultsDataType:SearchMovieAndQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetFavoriteActorsQuery{ - - let dataConnect: DataConnect - - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - - public static let OperationName = "GetFavoriteActors" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - - - - } +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct Data: Decodable { -public struct User: Decodable { +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { - - -public struct FavoriteActor: Decodable { - +public var +id: UUID +public var +title: String -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - public var -id: UUID +genre: String? public var -name: String +rating: Double? @@ -5959,8 +2893,8 @@ imageUrl: String - public var actorKey: ActorKey { - return ActorKey( + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( id: id ) @@ -5972,7 +2906,7 @@ public func hash(into hasher: inout Hasher) { hasher.combine(id) } -public static func == (lhs: Actor, rhs: Actor) -> Bool { +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { return lhs.id == rhs.id @@ -5985,7 +2919,11 @@ public static func == (lhs: Actor, rhs: Actor) -> Bool { case id - case name + case title + + case genre + + case rating case imageUrl @@ -6001,132 +2939,108 @@ public static func == (lhs: Actor, rhs: Actor) -> Bool { - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actor: Actor - - - - - - enum CodingKeys: String, CodingKey { - - case actor + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - self.actor = try codecHelper.decode(Actor.self, forKey: .actor, container: &container) + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - } -} -public var -favorite_actors_on_user: [FavoriteActor] - - - - - - enum CodingKeys: String, CodingKey { - case favorite_actors_on_user + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - self.favorite_actors_on_user = try codecHelper.decode([FavoriteActor].self, forKey: .favorite_actors_on_user, container: &container) + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) } } public var -user: User? +moviesMatchingDescription: [MovieMoviesMatchingDescription] - } - public func ref( - - ) -> QueryRefObservation { - var variables = GetFavoriteActorsQuery.Variables() - - let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - public func execute( - - ) async throws -> OperationResult { - var variables = GetFavoriteActorsQuery.Variables() - - - let ref = dataConnect.query(name: "GetFavoriteActors", variables: variables, resultsDataType:GetFavoriteActorsQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + +public var +id: UUID -public class GetUserFavoriteMoviesQuery{ +public var +name: String - let dataConnect: DataConnect - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } - public static let OperationName = "GetUserFavoriteMovies" +public var +imageUrl: String - public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable { + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - + return lhs.id == rhs.id + } - public struct Data: Decodable { - - - - -public struct User: Decodable { + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] -public struct FavoriteMovie: Decodable { - -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct ReviewReviewsMatchingText: Decodable { @@ -6136,32 +3050,33 @@ id: UUID public var -title: String +rating: Int? public var -genre: String? +reviewText: String? public var -imageUrl: String +reviewDate: LocalDate + -public var -releaseYear: Int? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + public var -rating: Double? +id: UUID public var -description: String? +title: String @@ -6193,16 +3108,6 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { case title - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - } public init(from decoder: any Decoder) throws { @@ -6218,38 +3123,56 @@ public static func == (lhs: Movie, rhs: Movie) -> Bool { self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - } } public var movie: Movie + + + +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + enum CodingKeys: String, CodingKey { - case movie + case id + + case username } @@ -6259,13 +3182,17 @@ movie: Movie - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) } } public var -favorite_movies_on_user: [FavoriteMovie] +user: User @@ -6273,7 +3200,17 @@ favorite_movies_on_user: [FavoriteMovie] enum CodingKeys: String, CodingKey { - case favorite_movies_on_user + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user } @@ -6282,35 +3219,90 @@ favorite_movies_on_user: [FavoriteMovie] let codecHelper = CodecHelper() - self.favorite_movies_on_user = try codecHelper.decode([FavoriteMovie].self, forKey: .favorite_movies_on_user, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) } } public var -user: User? +reviewsMatchingText: [ReviewReviewsMatchingText] } public func ref( - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation } public func execute( - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - let refCast = ref as! QueryRefObservation + let refCast = ref as! QueryRefObservation return try await refCast.execute() } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql index 8b418e9..6a8d92c 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql @@ -1,7 +1,3 @@ -extend type FavoriteActor { - userId: String! @fdc_generated(from: "FavoriteActor.user", purpose: IMPLICIT_REF_FIELD) - actorId: UUID! @fdc_generated(from: "FavoriteActor.actor", purpose: IMPLICIT_REF_FIELD) -} extend type FavoriteMovie { userId: String! @fdc_generated(from: "FavoriteMovie.user", purpose: IMPLICIT_REF_FIELD) movieId: UUID! @fdc_generated(from: "FavoriteMovie.movie", purpose: IMPLICIT_REF_FIELD) diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql index d0e06fe..bbbbc10 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql @@ -1,5 +1,4 @@ scalar Actor_Key -scalar FavoriteActor_Key scalar FavoriteMovie_Key scalar Movie_Key scalar MovieActor_Key @@ -21,10 +20,8 @@ input Actor_Filter { id: UUID_Filter imageUrl: String_Filter name: String_Filter - favorite_actors_on_actor: FavoriteActor_ListFilter movieActors_on_actor: MovieActor_ListFilter movies_via_MovieActor: Movie_ListFilter - users_via_FavoriteActor: User_ListFilter } input Actor_ListFilter { count: Int_Filter = {gt:0} @@ -35,33 +32,6 @@ input Actor_Order { imageUrl: OrderDirection name: OrderDirection } -input FavoriteActor_Data { - userId: String - userId_expr: String_Expr - actorId: UUID - actorId_expr: UUID_Expr - actor: Actor_Key - user: User_Key -} -input FavoriteActor_Filter { - _and: [FavoriteActor_Filter!] - _not: FavoriteActor_Filter - _or: [FavoriteActor_Filter!] - userId: String_Filter - actorId: UUID_Filter - actor: Actor_Filter - user: User_Filter -} -input FavoriteActor_ListFilter { - count: Int_Filter = {gt:0} - exist: FavoriteActor_Filter -} -input FavoriteActor_Order { - userId: OrderDirection - actorId: OrderDirection - actor: Actor_Order - user: User_Order -} input FavoriteMovie_Data { userId: String userId_expr: String_Expr @@ -94,8 +64,6 @@ input Movie_Data { id_expr: UUID_Expr description: String description_expr: String_Expr - descriptionEmbedding: Vector - descriptionEmbedding_embed: Vector_Embed genre: String genre_expr: String_Expr imageUrl: String @@ -112,7 +80,6 @@ input Movie_Filter { _or: [Movie_Filter!] id: UUID_Filter description: String_Filter - descriptionEmbedding: Vector_Filter genre: String_Filter imageUrl: String_Filter rating: Float_Filter @@ -134,7 +101,6 @@ input Movie_ListFilter { input Movie_Order { id: OrderDirection description: OrderDirection - descriptionEmbedding: OrderDirection genre: OrderDirection imageUrl: OrderDirection rating: OrderDirection @@ -255,10 +221,8 @@ input User_Filter { _or: [User_Filter!] id: String_Filter username: String_Filter - favorite_actors_on_user: FavoriteActor_ListFilter favorite_movies_on_user: FavoriteMovie_ListFilter reviews_on_user: Review_ListFilter - actors_via_FavoriteActor: Actor_ListFilter movies_via_FavoriteMovie: Movie_ListFilter movies_via_Review: Movie_ListFilter } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql index 335961a..5594f01 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql @@ -4,10 +4,6 @@ extend type Mutation { """ actor_insert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: INSERT_SINGLE) """ - Insert a single FavoriteActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - favorite_actor_insert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: INSERT_SINGLE) - """ Insert a single FavoriteMovie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). """ favorite_movie_insert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_SINGLE) @@ -36,10 +32,6 @@ extend type Mutation { """ actor_insertMany(data: [Actor_Data!]!): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: INSERT_MULTIPLE) """ - Insert FavoriteActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - favorite_actor_insertMany(data: [FavoriteActor_Data!]!): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: INSERT_MULTIPLE) - """ Insert FavoriteMovie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). """ favorite_movie_insertMany(data: [FavoriteMovie_Data!]!): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_MULTIPLE) @@ -68,10 +60,6 @@ extend type Mutation { """ actor_upsert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: UPSERT_SINGLE) """ - Insert or update a single FavoriteActor into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. - """ - favorite_actor_upsert(data: FavoriteActor_Data!): FavoriteActor_Key! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_SINGLE) - """ Insert or update a single FavoriteMovie into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. """ favorite_movie_upsert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_SINGLE) @@ -100,10 +88,6 @@ extend type Mutation { """ actor_upsertMany(data: [Actor_Data!]): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: UPSERT_MULTIPLE) """ - Insert or update FavoriteActor entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteActor. - """ - favorite_actor_upsertMany(data: [FavoriteActor_Data!]): [FavoriteActor_Key!]! @fdc_generated(from: "FavoriteActor", purpose: UPSERT_MULTIPLE) - """ Insert or update FavoriteMovie entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. """ favorite_movie_upsertMany(data: [FavoriteMovie_Data!]): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_MULTIPLE) @@ -132,10 +116,6 @@ extend type Mutation { """ actor_update(id: UUID, key: Actor_Key, data: Actor_Data!): Actor_Key @fdc_generated(from: "Actor", purpose: UPDATE_SINGLE) """ - Update a single FavoriteActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - favorite_actor_update(key: FavoriteActor_Key, data: FavoriteActor_Data!): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: UPDATE_SINGLE) - """ Update a single FavoriteMovie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. """ favorite_movie_update(key: FavoriteMovie_Key, data: FavoriteMovie_Data!): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_SINGLE) @@ -164,10 +144,6 @@ extend type Mutation { """ actor_updateMany(where: Actor_Filter, all: Boolean = false, data: Actor_Data!): Int! @fdc_generated(from: "Actor", purpose: UPDATE_MULTIPLE) """ - Update FavoriteActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - favorite_actor_updateMany(where: FavoriteActor_Filter, all: Boolean = false, data: FavoriteActor_Data!): Int! @fdc_generated(from: "FavoriteActor", purpose: UPDATE_MULTIPLE) - """ Update FavoriteMovie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. """ favorite_movie_updateMany(where: FavoriteMovie_Filter, all: Boolean = false, data: FavoriteMovie_Data!): Int! @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_MULTIPLE) @@ -196,10 +172,6 @@ extend type Mutation { """ actor_delete(id: UUID, key: Actor_Key): Actor_Key @fdc_generated(from: "Actor", purpose: DELETE_SINGLE) """ - Delete a single FavoriteActor based on `id` or `key` and return its key (or `null` if not found). - """ - favorite_actor_delete(key: FavoriteActor_Key): FavoriteActor_Key @fdc_generated(from: "FavoriteActor", purpose: DELETE_SINGLE) - """ Delete a single FavoriteMovie based on `id` or `key` and return its key (or `null` if not found). """ favorite_movie_delete(key: FavoriteMovie_Key): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: DELETE_SINGLE) @@ -228,10 +200,6 @@ extend type Mutation { """ actor_deleteMany(where: Actor_Filter, all: Boolean = false): Int! @fdc_generated(from: "Actor", purpose: DELETE_MULTIPLE) """ - Delete FavoriteActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - favorite_actor_deleteMany(where: FavoriteActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteActor", purpose: DELETE_MULTIPLE) - """ Delete FavoriteMovie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. """ favorite_movie_deleteMany(where: FavoriteMovie_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteMovie", purpose: DELETE_MULTIPLE) diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql index 3b373f9..d4dcfca 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql @@ -4,10 +4,6 @@ extend type Query { """ actor(id: UUID, key: Actor_Key): Actor @fdc_generated(from: "Actor", purpose: QUERY_SINGLE) """ - Look up a single FavoriteActor based on `id` or `key` and return selected fields (or `null` if not found). - """ - favorite_actor(key: FavoriteActor_Key): FavoriteActor @fdc_generated(from: "FavoriteActor", purpose: QUERY_SINGLE) - """ Look up a single FavoriteMovie based on `id` or `key` and return selected fields (or `null` if not found). """ favorite_movie(key: FavoriteMovie_Key): FavoriteMovie @fdc_generated(from: "FavoriteMovie", purpose: QUERY_SINGLE) @@ -36,10 +32,6 @@ extend type Query { """ actors(where: Actor_Filter, orderBy: [Actor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "Actor", purpose: QUERY_MULTIPLE) """ - List FavoriteActor entries in the table, optionally filtered by `where` conditions. - """ - favorite_actors(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE) - """ List FavoriteMovie entries in the table, optionally filtered by `where` conditions. """ favorite_movies(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE) @@ -63,9 +55,4 @@ extend type Query { List User entries in the table, optionally filtered by `where` conditions. """ users(where: User_Filter, orderBy: [User_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "User", purpose: QUERY_MULTIPLE) - """ - List Movie entries ordered by vector similarity between the `descriptionEmbedding` field and `compare_embed`. - (Alternatively, `compare` can be used if the input is a raw Vector.) - """ - movies_descriptionEmbedding_similarity(compare: Vector, compare_embed: Vector_Embed, method: VectorSimilarityMethod = INNER_PRODUCT, within: Float, where: Movie_Filter, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie.descriptionEmbedding", purpose: QUERY_MULTIPLE_BY_SIMILARITY) } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql index 352236f..a739e10 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql @@ -1,8 +1,4 @@ extend type Actor { - """ - ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.actor` equals this object). - """ - favorite_actors_on_actor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.actor` equals this object). """ @@ -11,10 +7,6 @@ extend type Actor { ✨ List related Movie entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `actor` == this and `movie` == that). """ movies_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) - """ - ✨ List related User entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `actor` == this and `user` == that). - """ - users_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) } extend type Movie { """ @@ -47,10 +39,6 @@ extend type Movie { users_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) } extend type User { - """ - ✨ List FavoriteActor entries in a one-to-many relationship with this object (i.e. where `FavoriteActor.user` equals this object). - """ - favorite_actors_on_user(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [FavoriteActor!]! @fdc_generated(from: "FavoriteActor.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.user` equals this object). """ @@ -60,10 +48,6 @@ extend type User { """ reviews_on_user(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List related Actor entries using FavoriteActor as a join table (i.e. where an entry of FavoriteActor exists whose `user` == this and `actor` == that). - """ - actors_via_FavoriteActor(where: FavoriteActor_Filter, orderBy: [FavoriteActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "FavoriteActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) - """ ✨ List related Movie entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `user` == this and `movie` == that). """ movies_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) diff --git a/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql b/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql deleted file mode 100644 index b8a9f8c..0000000 --- a/Examples/FriendlyFlix/dataconnect/1_movie_insert.gql +++ /dev/null @@ -1,204 +0,0 @@ -mutation { - movie_insertMany(data: [ - { - id: "550e8400-e29b-41d4-a716-446655440000", - title: "Inception", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168", - releaseYear: 2010, - genre: "sci-fi", - rating: 8.8, - description: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move.", - tags: ["thriller", "action"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440001", - title: "The Matrix", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059", - releaseYear: 1999, - genre: "action", - rating: 8.7, - description: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny.", - tags: ["sci-fi", "adventure"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440002", - title: "John Wick 4", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjohn_wick_4.jpg?alt=media&token=463ed467-9daa-4281-965d-44e7cc4172d5", - releaseYear: 2023, - genre: "action", - rating: 8.1, - description: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances.", - tags: ["action", "thriller"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440003", - title: "The Dark Knight", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_dark_knight.jpg?alt=media&token=a9803c59-40d5-4758-a6f4-9a7c274a1218", - releaseYear: 2008, - genre: "action", - rating: 9.0, - description: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice.", - tags: ["action", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440004", - title: "Fight Club", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ffight_club.jpg?alt=media&token=a4bc1933-2607-42cd-a860-e44c4587fd9c", - releaseYear: 1999, - genre: "drama", - rating: 8.8, - description: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity.", - tags: ["drama", "thriller"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440005", - title: "Pulp Fiction", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fpulp_fiction.jpg?alt=media&token=0df86e18-5cb1-45b3-a6d9-3f41563c3465", - releaseYear: 1994, - genre: "crime", - rating: 8.9, - description: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references.", - tags: ["crime", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440006", - title: "The Lord of the Rings: The Fellowship of the Ring", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Flotr_fellowship.jpg?alt=media&token=92641d2d-6c52-4172-bd66-95fb86b4b96b", - releaseYear: 2001, - genre: "fantasy", - rating: 8.8, - description: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond.", - tags: ["fantasy", "adventure"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440007", - title: "The Shawshank Redemption", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_shawshanks_redemption.jpg?alt=media&token=f67b5ab2-a435-48b2-8251-5bf866b183e9", - releaseYear: 1994, - genre: "drama", - rating: 9.3, - description: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman).", - tags: ["drama", "crime"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440008", - title: "Forrest Gump", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fforrest_gump.jpeg?alt=media&token=f21e88ce-6fab-4218-aa55-94738acc9b8f", - releaseYear: 1994, - genre: "drama", - rating: 8.8, - description: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright).", - tags: ["drama", "romance"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440009", - title: "The Godfather", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_godfather.jpg?alt=media&token=5297fd94-ae87-4995-9de5-3755232bad52", - releaseYear: 1972, - genre: "crime", - rating: 9.2, - description: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal.", - tags: ["crime", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440010", - title: "The Silence of the Lambs", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_silence_of_the_lambs.jpg?alt=media&token=7ca6abeb-b15c-4f5e-9280-5a590e89fe54", - releaseYear: 1991, - genre: "thriller", - rating: 8.6, - description: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer.", - tags: ["thriller", "crime"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440011", - title: "Saving Private Ryan", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fsaving_private_ryan.jpg?alt=media&token=58ed877e-7ae0-4e30-9aee-d45c2deb7a00", - releaseYear: 1998, - genre: "war", - rating: 8.6, - description: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war.", - tags: ["war", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440012", - title: "The Avengers", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_avengers.jpg?alt=media&token=3d68ccad-2fa1-48da-a83e-7941e246c9f9", - releaseYear: 2012, - genre: "action", - rating: 8.0, - description: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast.", - tags: ["action", "sci-fi"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440013", - title: "Gladiator", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fgladiator.jpg?alt=media&token=61d75825-b79f-4add-afdb-7da5eed53407", - releaseYear: 2000, - genre: "action", - rating: 8.5, - description: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance.", - tags: ["action", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440014", - title: "Titanic", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Ftitanic.png?alt=media&token=dd03dc83-486e-4b03-9b03-2f9ed83fd9d0", - releaseYear: 1997, - genre: "romance", - rating: 7.8, - description: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals.", - tags: ["romance", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440015", - title: "Avatar", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Favatar.jpg?alt=media&token=1c75b09d-7c7a-44bf-b7ad-e7da4d0b7193", - releaseYear: 2009, - genre: "sci-fi", - rating: 7.8, - description: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience.", - tags: ["sci-fi", "adventure"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440016", - title: "Jurassic Park", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fjurassic_park.jpg?alt=media&token=1731ce71-3384-4435-8a5b-821d4fd286d3", - releaseYear: 1993, - genre: "adventure", - rating: 8.1, - description: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures.", - tags: ["adventure", "sci-fi"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440017", - title: "The Lion King", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_lion_king.jpg?alt=media&token=3e4e4265-6ae7-47d6-a5ba-584de126ef00", - releaseYear: 1994, - genre: "animation", - rating: 8.5, - description: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption.", - tags: ["animation", "drama"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440018", - title: "Star Wars: Episode IV - A New Hope", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fstar_wars_4.jpg?alt=media&token=b4ea7e0c-707f-43dd-8633-9d962e77b5a4", - releaseYear: 1977, - genre: "sci-fi", - rating: 8.6, - description: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters.", - tags: ["sci-fi", "adventure"] - }, - { - id: "550e8400-e29b-41d4-a716-446655440019", - title: "Blade Runner", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fblade_runner.jpg?alt=media&token=d8e94bdd-1477-49f3-b244-dd7a9c059fc1", - releaseYear: 1982, - genre: "sci-fi", - rating: 8.1, - description: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity.", - tags: ["sci-fi", "thriller"] - } - ]) -} diff --git a/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql deleted file mode 100644 index 6922dcf..0000000 --- a/Examples/FriendlyFlix/dataconnect/2_actor_insert.gql +++ /dev/null @@ -1,104 +0,0 @@ -mutation { - actor_insertMany(data: [ - { - id: "123e4567-e89b-12d3-a456-426614174000", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316", - name: "Leonardo DiCaprio" - }, - { - id: "123e4567-e89b-12d3-a456-426614174001", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115", - name: "Keanu Reeves" - }, - { - id: "123e4567-e89b-12d3-a456-426614174002", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmcconaoghey.jpg?alt=media&token=d340ca18-ef51-44ac-a160-08e45b242cd7", - name: "Matthew McConaughey" - }, - { - id: "123e4567-e89b-12d3-a456-426614174003", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fbale.jpg?alt=media&token=666f1690-a550-458f-a1cf-9505b7d1af7d", - name: "Christian Bale" - }, - { - id: "123e4567-e89b-12d3-a456-426614174004", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpitt.jpeg?alt=media&token=3a5283d4-f85c-4ba7-be72-51bc87ca4133", - name: "Brad Pitt" - }, - { - id: "123e4567-e89b-12d3-a456-426614174005", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjackson.jpg?alt=media&token=07be0601-19fe-4b5d-b111-84fa71f32139", - name: "Samuel L. Jackson" - }, - { - id: "123e4567-e89b-12d3-a456-426614174006", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fmortensen.jpeg?alt=media&token=e3d1ec99-b8e7-42e9-9d1c-03f56f61ecf7", - name: "Viggo Mortensen" - }, - { - id: "123e4567-e89b-12d3-a456-426614174007", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffreeman.jpg?alt=media&token=94bc6227-119e-4ab0-b350-55fac7aeb062", - name: "Morgan Freeman" - }, - { - id: "123e4567-e89b-12d3-a456-426614174008", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fhanks.jpeg?alt=media&token=d92979ce-da62-4b28-afbe-b8740bbb9d32", - name: "Tom Hanks" - }, - { - id: "123e4567-e89b-12d3-a456-426614174009", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fpacino.jpg?alt=media&token=9c0c54b1-6913-48b5-8e5e-d6551dd2f182", - name: "Al Pacino" - }, - { - id: "123e4567-e89b-12d3-a456-426614174010", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Ffoster.jpg?alt=media&token=b429734c-0f2d-4840-b75b-6857eac7bb4f", - name: "Jodie Foster" - }, - { - id: "123e4567-e89b-12d3-a456-426614174011", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcruise.jpg?alt=media&token=d34b0326-a8d1-4f01-86e5-f3f094594e5a", - name: "Tom Cruise" - }, - { - id: "123e4567-e89b-12d3-a456-426614174012", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdowney.jpg?alt=media&token=dd291c96-6ef0-42fc-841c-902c80748b37", - name: "Robert Downey Jr." - }, - { - id: "123e4567-e89b-12d3-a456-426614174013", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fcrowe.jpg?alt=media&token=46d413d5-ace8-404e-b018-8d7e6fe0d362", - name: "Russell Crowe" - }, - { - id: "123e4567-e89b-12d3-a456-426614174014", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fwinslet.jpg?alt=media&token=b675585e-356e-4361-a041-5ac1a6ee5922", - name: "Kate Winslet" - }, - { - id: "123e4567-e89b-12d3-a456-426614174015", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fweaver.jpeg?alt=media&token=263b5c3d-e0ee-43c3-854d-9b236c6df391", - name: "Sigourney Weaver" - }, - { - id: "123e4567-e89b-12d3-a456-426614174016", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fgoldblume.jpeg?alt=media&token=18277dd1-166c-4934-a02e-19ef141c86e2", - name: "Jeff Goldblum" - }, - { - id: "123e4567-e89b-12d3-a456-426614174017", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fjones.jpg?alt=media&token=f7ac9bc4-6e26-4b25-9a73-7a90f699424e", - name: "James Earl Jones" - }, - { - id: "123e4567-e89b-12d3-a456-426614174018", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fford.jpg?alt=media&token=928434c0-d492-4c8e-bdf0-0db585008d87", - name: "Harrison Ford" - }, - { - id: "123e4567-e89b-12d3-a456-426614174019", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fschwarzenegger.jpeg?alt=media&token=c46fb249-41ef-4084-b4ad-9517bee6ab46", - name: "Arnold Schwarzenegger" - } - ]) -} diff --git a/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql b/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql deleted file mode 100644 index c2256ac..0000000 --- a/Examples/FriendlyFlix/dataconnect/3_movie_actor_insert.gql +++ /dev/null @@ -1,238 +0,0 @@ -mutation { - movieMetadata_insertMany(data: [ - { - movieId: "550e8400-e29b-41d4-a716-446655440000", - director: "Christopher Nolan" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440001", - director: "Lana Wachowski, Lilly Wachowski" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440002", - director: "Chad Stahelski" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440003", - director: "Christopher Nolan" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440004", - director: "David Fincher" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440005", - director: "Quentin Tarantino" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440006", - director: "Peter Jackson" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440007", - director: "Frank Darabont" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440008", - director: "Robert Zemeckis" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440009", - director: "Francis Ford Coppola" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440010", - director: "Jonathan Demme" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440011", - director: "Steven Spielberg" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440012", - director: "Joss Whedon" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440013", - director: "Ridley Scott" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440014", - director: "James Cameron" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440015", - director: "James Cameron" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440016", - director: "Steven Spielberg" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440017", - director: "Roger Allers, Rob Minkoff" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440018", - director: "George Lucas" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440019", - director: "Ridley Scott" - } - ]) - - movieActor_insertMany(data: [ - { - movieId: "550e8400-e29b-41d4-a716-446655440000", - actorId: "123e4567-e89b-12d3-a456-426614174000", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440001", - actorId: "123e4567-e89b-12d3-a456-426614174001", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440002", - actorId: "123e4567-e89b-12d3-a456-426614174001", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440003", - actorId: "123e4567-e89b-12d3-a456-426614174003", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440004", - actorId: "123e4567-e89b-12d3-a456-426614174004", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440005", - actorId: "123e4567-e89b-12d3-a456-426614174005", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440006", - actorId: "123e4567-e89b-12d3-a456-426614174006", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440007", - actorId: "123e4567-e89b-12d3-a456-426614174007", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440008", - actorId: "123e4567-e89b-12d3-a456-426614174008", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440009", - actorId: "123e4567-e89b-12d3-a456-426614174009", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440010", - actorId: "123e4567-e89b-12d3-a456-426614174010", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440011", - actorId: "123e4567-e89b-12d3-a456-426614174011", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440012", - actorId: "123e4567-e89b-12d3-a456-426614174012", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440013", - actorId: "123e4567-e89b-12d3-a456-426614174013", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440014", - actorId: "123e4567-e89b-12d3-a456-426614174014", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440015", - actorId: "123e4567-e89b-12d3-a456-426614174015", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440016", - actorId: "123e4567-e89b-12d3-a456-426614174016", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440017", - actorId: "123e4567-e89b-12d3-a456-426614174017", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440018", - actorId: "123e4567-e89b-12d3-a456-426614174018", - role: "main" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440019", - actorId: "123e4567-e89b-12d3-a456-426614174019", - role: "main" - }, - # Supporting actors - { - movieId: "550e8400-e29b-41d4-a716-446655440000", - actorId: "123e4567-e89b-12d3-a456-426614174001", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440001", - actorId: "123e4567-e89b-12d3-a456-426614174002", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440002", - actorId: "123e4567-e89b-12d3-a456-426614174003", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440003", - actorId: "123e4567-e89b-12d3-a456-426614174004", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440004", - actorId: "123e4567-e89b-12d3-a456-426614174005", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440005", - actorId: "123e4567-e89b-12d3-a456-426614174006", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440006", - actorId: "123e4567-e89b-12d3-a456-426614174007", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440007", - actorId: "123e4567-e89b-12d3-a456-426614174008", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440008", - actorId: "123e4567-e89b-12d3-a456-426614174009", - role: "supporting" - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440009", - actorId: "123e4567-e89b-12d3-a456-426614174010", - role: "supporting" - } - ]) -} diff --git a/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql b/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql deleted file mode 100644 index 51167f3..0000000 --- a/Examples/FriendlyFlix/dataconnect/4_user_favorites_review_insert.gql +++ /dev/null @@ -1,142 +0,0 @@ -mutation { - user_insertMany(data: [ - { - id: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - username: "cynthia_w" - }, - { - id: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - username: "hercule_p" - }, - { - id: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - username: "jane_d" - }, - { - id: "TBedjwCX0Jf955Uuoxk6k74sY0l2", - username: "peter_f" - } - - ]) - - review_insertMany(data: [ - { - id: "345e4567-e89b-12d3-a456-426614174000", - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440000", - rating: 5, - reviewText: "An incredible movie with a mind-blowing plot!", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174001", - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440001", - rating: 5, - reviewText: "A revolutionary film that changed cinema forever.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174002", - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440002", - rating: 5, - reviewText: "A visually stunning and emotionally impactful movie.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174003", - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440003", - rating: 4, - reviewText: "A fantastic superhero film with great performances.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174004", - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440004", - rating: 5, - reviewText: "An amazing film that keeps you on the edge of your seat.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174005", - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440005", - rating: 5, - reviewText: "An absolute classic with unforgettable dialogue.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174006", - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l2", - movieId: "550e8400-e29b-41d4-a716-446655440005", - rating: 5, - reviewText: "I really loved this one.", - reviewDate_date: { today: true } - }, - { - id: "345e4567-e89b-12d3-a456-426614174007", - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440005", - rating: 5, - reviewText: "Me too!.", - reviewDate_date: { today: true } - } - ]) - - favorite_movie_insertMany(data: [ - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440000" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440001" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440002" - }, - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440003" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440004" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440005" - } - ]) - - favorite_actor_insertMany(data: [ - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - actorId: "123e4567-e89b-12d3-a456-426614174000" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - actorId: "123e4567-e89b-12d3-a456-426614174001" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - actorId: "123e4567-e89b-12d3-a456-426614174002" - }, - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - actorId: "123e4567-e89b-12d3-a456-426614174003" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - actorId: "123e4567-e89b-12d3-a456-426614174004" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - actorId: "123e4567-e89b-12d3-a456-426614174005" - } - ]) -} diff --git a/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql b/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql deleted file mode 100644 index 76b11da..0000000 --- a/Examples/FriendlyFlix/dataconnect/5_optional_vector_embed.gql +++ /dev/null @@ -1,141 +0,0 @@ -mutation updateMovieEmbeddings { - movie1: movie_update( - id: "550e8400-e29b-41d4-a716-446655440000" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Dom Cobb (Leonardo DiCaprio) is a thief with the rare ability to enter people's dreams and steal their secrets from their subconscious. His skill has made him a valuable player in the world of corporate espionage but has also cost him everything he loves. Cobb gets a chance at redemption when he is offered a seemingly impossible task: plant an idea in someone's mind. If he succeeds, it will be the perfect crime, but a dangerous enemy anticipates Cobb's every move."} - } - ) - - movie2: movie_update( - id: "550e8400-e29b-41d4-a716-446655440001" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Thomas Anderson, a computer programmer, discovers that the world is actually a simulation controlled by malevolent machines in a dystopian future. Known as Neo, he joins a group of underground rebels led by Morpheus to fight the machines and free humanity. Along the way, Neo learns to manipulate the simulated reality, uncovering his true destiny."} - } - ) - - movie3: movie_update( - id: "550e8400-e29b-41d4-a716-446655440002" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "John Wick (Keanu Reeves) uncovers a path to defeating The High Table, but before he can earn his freedom, he must face off against a new enemy with powerful alliances across the globe. The film follows Wick as he battles through various international locations, facing relentless adversaries and forming new alliances."} - } - ) - - movie4: movie_update( - id: "550e8400-e29b-41d4-a716-446655440003" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "When the menace known as the Joker (Heath Ledger) emerges from his mysterious past, he wreaks havoc and chaos on the people of Gotham. The Dark Knight (Christian Bale) must accept one of the greatest psychological and physical tests of his ability to fight injustice."} - } - ) - - movie5: movie_update( - id: "550e8400-e29b-41d4-a716-446655440004" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "An insomniac office worker (Edward Norton) and a devil-may-care soapmaker (Brad Pitt) form an underground fight club that evolves into something much more. The story explores themes of consumerism, masculinity, and the search for identity."} - } - ) - - movie6: movie_update( - id: "550e8400-e29b-41d4-a716-446655440005" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption. The film is known for its eclectic dialogue, ironic mix of humor and violence, and a host of cinematic allusions and pop culture references."} - } - ) - - movie7: movie_update( - id: "550e8400-e29b-41d4-a716-446655440006" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A meek Hobbit from the Shire, Frodo Baggins, and eight companions set out on a journey to destroy the powerful One Ring and save Middle-earth from the Dark Lord Sauron. The epic adventure begins the quest that will test their courage and bond."} - } - ) - - movie8: movie_update( - id: "550e8400-e29b-41d4-a716-446655440007" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency. The film follows Andy Dufresne (Tim Robbins), a banker sentenced to life in Shawshank State Penitentiary, and his friendship with Red (Morgan Freeman)."} - } - ) - - movie9: movie_update( - id: "550e8400-e29b-41d4-a716-446655440008" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The presidencies of Kennedy and Johnson, the events of Vietnam, Watergate, and other historical moments unfold from the perspective of an Alabama man with a low IQ. Forrest Gump (Tom Hanks) becomes an unwitting participant in many key moments of 20th-century U.S. history, all while maintaining his love for his childhood sweetheart Jenny (Robin Wright)."} - } - ) - - movie10: movie_update( - id: "550e8400-e29b-41d4-a716-446655440009" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son. The story follows the powerful Corleone family as they navigate power, loyalty, and betrayal."} - } - ) - - movie11: movie_update( - id: "550e8400-e29b-41d4-a716-446655440010" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young F.B.I. cadet must receive the help of an incarcerated and manipulative cannibal killer to help catch another serial killer. Clarice Starling (Jodie Foster) seeks the assistance of Hannibal Lecter (Anthony Hopkins) to understand the mind of a killer."} - } - ) - - movie12: movie_update( - id: "550e8400-e29b-41d4-a716-446655440011" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Following the Normandy Landings, a group of U.S. soldiers go behind enemy lines to retrieve a paratrooper whose brothers have been killed in action. The harrowing journey of Captain John H. Miller (Tom Hanks) and his men highlights the brutal reality of war."} - } - ) - - movie13: movie_update( - id: "550e8400-e29b-41d4-a716-446655440012" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Earth's mightiest heroes, including Iron Man, Captain America, Thor, Hulk, Black Widow, and Hawkeye, must come together to stop Loki and his alien army from enslaving humanity. Directed by Joss Whedon, the film is known for its witty dialogue, intense action sequences, and the chemistry among its ensemble cast."} - } - ) - - movie14: movie_update( - id: "550e8400-e29b-41d4-a716-446655440013" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A former Roman General, Maximus Decimus Meridius, seeks vengeance against the corrupt emperor Commodus who murdered his family and sent him into slavery. Directed by Ridley Scott, the film is known for its epic scale, intense battle scenes, and Russell Crowe's powerful performance."} - } - ) - - movie15: movie_update( - id: "550e8400-e29b-41d4-a716-446655440014" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A romantic drama recounting the ill-fated voyage of the R.M.S. Titanic through the eyes of Jack Dawson, a poor artist, and Rose DeWitt Bukater, a wealthy aristocrat. Their forbidden romance unfolds aboard the luxurious ship, which tragically sinks after striking an iceberg. Directed by James Cameron, the film is known for its epic scale, emotional depth, and stunning visuals."} - } - ) - - movie16: movie_update( - id: "550e8400-e29b-41d4-a716-446655440015" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A paraplegic Marine named Jake Sully is sent on a unique mission to Pandora, an alien world, to bridge relations with the native Na'vi people. Torn between following his orders and protecting the world he feels is his home, Jake's journey becomes a battle for survival. Directed by James Cameron, 'Avatar' is renowned for its groundbreaking special effects and immersive 3D experience."} - } - ) - - movie17: movie_update( - id: "550e8400-e29b-41d4-a716-446655440016" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok. Directed by Steven Spielberg, 'Jurassic Park' is known for its groundbreaking special effects, thrilling storyline, and the suspenseful chaos unleashed by its prehistoric creatures."} - } - ) - - movie18: movie_update( - id: "550e8400-e29b-41d4-a716-446655440017" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "A young lion prince, Simba, must overcome betrayal and tragedy to reclaim his rightful place as king. 'The Lion King' is a beloved animated musical known for its memorable songs, stunning animation, and a timeless tale of courage, loyalty, and redemption."} - } - ) - - movie19: movie_update( - id: "550e8400-e29b-41d4-a716-446655440018" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee, and two droids to save the galaxy from the Empire's world-destroying battle station, the Death Star. Directed by George Lucas, 'A New Hope' revolutionized the sci-fi genre with its groundbreaking special effects and unforgettable characters."} - } - ) - - movie20: movie_update( - id: "550e8400-e29b-41d4-a716-446655440019" - data: { - descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: "In a dystopian future, synthetic humans known as replicants are created by powerful corporations. A blade runner named Rick Deckard is tasked with hunting down and 'retiring' four replicants who have escaped to Earth. Directed by Ridley Scott, 'Blade Runner' is a seminal sci-fi thriller that explores themes of humanity and identity."} - } - ) -} diff --git a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml index 7b27a6b..e12fcf9 100644 --- a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml +++ b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml @@ -1,4 +1,4 @@ -specVersion: "v1alpha" +specVersion: "v1beta" serviceId: "friendly-flix-service" location: "us-central1" schema: diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql index fdac88b..0d7545e 100644 --- a/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/mutations.gql @@ -1,22 +1,8 @@ -# Create a movie based on user input -mutation CreateMovie( - $title: String! - $releaseYear: Int! - $genre: String! - $rating: Float - $description: String - $imageUrl: String! - $tags: [String!] = [] -) @auth(level: USER_EMAIL_VERIFIED) { - movie_insert( +mutation UpsertUser($username: String!) @auth(level: USER) { + user_upsert( data: { - title: $title - releaseYear: $releaseYear - genre: $genre - rating: $rating - description: $description - imageUrl: $imageUrl - tags: $tags + id_expr: "auth.uid" + username: $username } ) } @@ -31,23 +17,10 @@ mutation DeleteFavoritedMovie($movieId: UUID!) @auth(level: USER) { favorite_movie_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) } -# Add an actor to the user's favorites list -mutation AddFavoritedActor($actorId: UUID!) @auth(level: USER) { - favorite_actor_upsert(data: { userId_expr: "auth.uid", actorId: $actorId }) -} - -# Remove an actor from the user's favorites list -mutation DeleteFavoritedActor($actorId: UUID!) @auth(level: USER) { - favorite_actor_delete(key: { userId_expr: "auth.uid", actorId: $actorId }) -} - # Add a review for a movie -mutation AddReview( - $movieId: UUID! - $rating: Int! - $reviewText: String! -) @auth(level: USER) { - review_upsert( +mutation AddReview($movieId: UUID!, $rating: Int!, $reviewText: String!) +@auth(level: USER) { + review_insert( data: { userId_expr: "auth.uid" movieId: $movieId @@ -58,57 +31,72 @@ mutation AddReview( ) } -# Delete a user's review for a movie -mutation DeleteReview( - $movieId: UUID! -) @auth(level: USER) { - review_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) -} - -# Upsert (update or insert) a user based on their username -mutation UpsertUser($username: String!) @auth(level: USER) { - user_upsert( +# Update a user's review for a movie +mutation UpdateReview($movieId: UUID!, $rating: Int!, $reviewText: String!) +@auth(level: USER) { + review_update( + key: { userId_expr: "auth.uid", movieId: $movieId } data: { - id_expr: "auth.uid" - username: $username + userId_expr: "auth.uid" + movieId: $movieId + rating: $rating + reviewText: $reviewText + reviewDate_date: { today: true } } ) } +# Delete a user's review for a movie +mutation DeleteReview($movieId: UUID!) @auth(level: USER) { + review_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) +} + # The mutations below are unused by the application, but are useful examples for more complex cases +# Create a movie based on user input +# mutation CreateMovie( +# $title: String! +# $releaseYear: Int! +# $genre: String! +# $rating: Float +# $description: String +# $imageUrl: String! +# $tags: [String!] = [] +# ) @auth(expr: "auth.token.isAdmin == true") { + +# } # Update movie information based on the provided ID -mutation UpdateMovie( - $id: UUID! - $title: String - $releaseYear: Int - $genre: String - $rating: Float - $description: String - $imageUrl: String - $tags: [String!] = [] -) @auth(level: USER_EMAIL_VERIFIED) { - movie_update( - id: $id - data: { - title: $title - releaseYear: $releaseYear - genre: $genre - rating: $rating - description: $description - imageUrl: $imageUrl - tags: $tags - } - ) -} +# mutation UpdateMovie( +# $id: UUID! +# $title: String +# $releaseYear: Int +# $genre: String +# $rating: Float +# $description: String +# $imageUrl: String +# $tags: [String!] = [] +# ) @auth(level: USER_EMAIL_VERIFIED) { +# movie_update( +# id: $id +# data: { +# title: $title +# releaseYear: $releaseYear +# genre: $genre +# rating: $rating +# description: $description +# imageUrl: $imageUrl +# tags: $tags +# } +# ) +# } # Delete a movie by its ID -mutation DeleteMovie($id: UUID!) @auth(level: USER_EMAIL_VERIFIED) { - movie_delete(id: $id) -} +# mutation DeleteMovie($id: UUID!) @auth(level: USER_EMAIL_VERIFIED) { +# movie_delete(id: $id) +# } # Delete movies with a rating lower than the specified minimum rating -mutation DeleteUnpopularMovies($minRating: Float!) @auth(level: USER_EMAIL_VERIFIED) { - movie_deleteMany(where: { rating: { le: $minRating } }) -} +# mutation DeleteUnpopularMovies($minRating: Float!) @auth(level: USER_EMAIL_VERIFIED) { +# movie_deleteMany(where: { rating: { le: $minRating } }) +# } # End of example mutations \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql index ca3257f..28bf389 100644 --- a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -1,24 +1,10 @@ # List subset of fields for movies -# query ListMovies($orderByRating: OrderDirection, $orderByReleaseYear: OrderDirection, $limit: Int) @auth(level: PUBLIC) { -# movies ( -# orderBy: [ -# { rating: $orderByRating }, -# { releaseYear: $orderByReleaseYear }] -# limit: $limit -# ) { -# id -# title -# imageUrl -# releaseYear -# genre -# rating -# tags -# description -# } -# } - -query ListMovies($limit: Int) @auth(level: PUBLIC) { - movies ( +query ListMovies($orderByRating: OrderDirection, $orderByReleaseYear: OrderDirection, $limit: Int) @auth(level: PUBLIC) { + movies( + orderBy: [ + { rating: $orderByRating }, + { releaseYear: $orderByReleaseYear } + ] limit: $limit ) { id @@ -32,34 +18,9 @@ query ListMovies($limit: Int) @auth(level: PUBLIC) { } } -# List movies of a certain genre -query ListMoviesByGenre($genre: String!) @auth(level: PUBLIC) { - mostPopular: movies( - where: { genre: { eq: $genre } } - orderBy: { rating: DESC } - limit: 10 - ) { - id - title - imageUrl - rating - tags - } - mostRecent: movies( - where: { genre: { eq: $genre } } - orderBy: { releaseYear: DESC } - ) { - id - title - imageUrl - rating - tags - } -} - # Get movie by id query GetMovieById($id: UUID!) @auth(level: PUBLIC) { - movie(id: $id) { + movie(id: $id) { id title imageUrl @@ -94,7 +55,7 @@ query GetMovieById($id: UUID!) @auth(level: PUBLIC) { } } } -} + } # Get actor by id query GetActorById($id: UUID!) @auth(level: PUBLIC) { @@ -121,9 +82,10 @@ query GetActorById($id: UUID!) @auth(level: PUBLIC) { } } + # Get user by ID query GetCurrentUser @auth(level: USER) { - user(key: {id_expr: "auth.uid"}) { + user(key: { id_expr: "auth.uid" }) { id username reviews: reviews_on_user { @@ -151,30 +113,15 @@ query GetCurrentUser @auth(level: USER) { } } } - favoriteActors: favorite_actors_on_user { - actor { - id - name - imageUrl - } - } } } -# Check if a movie is favorited by user query GetIfFavoritedMovie($movieId: UUID!) @auth(level: USER) { favorite_movie(key: { userId_expr: "auth.uid", movieId: $movieId }) { movieId } } -# Check if an actor is favorited by user -query GetIfFavoritedActor($actorId: UUID!) @auth(level: USER) { - favorite_actor(key: { userId_expr: "auth.uid", actorId: $actorId }) { - actorId - } -} - # Search for movies, actors, and reviews query SearchAll( $input: String @@ -242,138 +189,141 @@ query SearchAll( } # Search movie descriptions using L2 similarity with Vertex AI -query SearchMovieDescriptionUsingL2Similarity($query: String!) -@auth(level: PUBLIC) { - movies_descriptionEmbedding_similarity( - compare_embed: { model: "textembedding-gecko@003", text: $query } - method: L2 - within: 2 - limit: 5 - ) { - id - title - description - tags - rating - imageUrl - } -} -# The queries below are unused by the application, but are useful examples for more complex cases +# query SearchMovieDescriptionUsingL2Similarity($query: String!) +# @auth(level: PUBLIC) { +# movies_descriptionEmbedding_similarity( +# compare_embed: { model: "textembedding-gecko@003", text: $query } +# method: L2 +# within: 2 +# limit: 5 +# ) { +# id +# title +# description +# tags +# rating +# imageUrl +# } +# } -# List movies by partial title match -query ListMoviesByPartialTitle($input: String!) @auth(level: PUBLIC) { - movies(where: { title: { contains: $input } }) { - id - title - genre - rating - imageUrl - } -} -# List movies by tag -query ListMoviesByTag($tag: String!) @auth(level: PUBLIC) { - movies(where: { tags: { includes: $tag } }) { - id - title - imageUrl - genre - rating - } -} -# List movies by release year range -query MoviesByReleaseYear($min: Int, $max: Int) @auth(level: PUBLIC) { - movies( - where: { releaseYear: { le: $max, ge: $min } } - orderBy: { releaseYear: ASC } - ) { - id - rating - title - imageUrl - } -} +# # The queries below are unused by the application, but are useful examples for more complex cases -# List movies by rating and genre with OR filters -query SearchMovieOr( - $minRating: Float - $maxRating: Float - $genre: String - $tag: String - $input: String -) @auth(level: PUBLIC) { - movies( - where: { - _or: [ - { rating: { ge: $minRating } } - { rating: { le: $maxRating } } - { genre: { eq: $genre } } - { tags: { includes: $tag } } - { title: { contains: $input } } - ] - } - ) { - id - rating - title - imageUrl - } -} +# # List movies by partial title match +# query ListMoviesByPartialTitle($input: String!) @auth(level: PUBLIC) { +# movies(where: { title: { contains: $input } }) { +# id +# title +# genre +# rating +# imageUrl +# } +# } -# List movies by rating and genre with AND filters -query SearchMovieAnd( - $minRating: Float - $maxRating: Float - $genre: String - $tag: String - $input: String -) @auth(level: PUBLIC) { - movies( - where: { - _and: [ - { rating: { ge: $minRating } } - { rating: { le: $maxRating } } - { genre: { eq: $genre } } - { tags: { includes: $tag } } - { title: { contains: $input } } - ] - } - ) { - id - rating - title - imageUrl - } -} +# # List movies by tag +# query ListMoviesByTag($tag: String!) @auth(level: PUBLIC) { +# movies(where: { tags: { includes: $tag } }) { +# id +# title +# imageUrl +# genre +# rating +# } +# } -# Get favorite actors by user ID -query GetFavoriteActors @auth(level: USER) { - user(key: {id_expr: "auth.uid"}) { - favorite_actors_on_user { - actor { - id - name - imageUrl - } - } - } -} +# # List movies by release year range +# query MoviesByReleaseYear($min: Int, $max: Int) @auth(level: PUBLIC) { +# movies( +# where: { releaseYear: { le: $max, ge: $min } } +# orderBy: { releaseYear: ASC } +# ) { +# id +# rating +# title +# imageUrl +# } +# } -# Get favorite movies by user ID -query GetUserFavoriteMovies @auth(level: USER) { - user(id_expr: "auth.uid") { - favorite_movies_on_user { - movie { - id - title - genre - imageUrl - releaseYear - rating - description - } - } - } -} -# end of example queries +# # List movies by rating and genre with OR filters +# query SearchMovieOr( +# $minRating: Float +# $maxRating: Float +# $genre: String +# $tag: String +# $input: String +# ) @auth(level: PUBLIC) { +# movies( +# where: { +# _or: [ +# { rating: { ge: $minRating } } +# { rating: { le: $maxRating } } +# { genre: { eq: $genre } } +# { tags: { includes: $tag } } +# { title: { contains: $input } } +# ] +# } +# ) { +# id +# rating +# title +# imageUrl +# } +# } + +# # List movies by rating and genre with AND filters +# query SearchMovieAnd( +# $minRating: Float +# $maxRating: Float +# $genre: String +# $tag: String +# $input: String +# ) @auth(level: PUBLIC) { +# movies( +# where: { +# _and: [ +# { rating: { ge: $minRating } } +# { rating: { le: $maxRating } } +# { genre: { eq: $genre } } +# { tags: { includes: $tag } } +# { title: { contains: $input } } +# ] +# } +# ) { +# id +# rating +# title +# imageUrl +# } +# } + +# # Get favorite actors by user ID +# query GetFavoriteActors @auth(level: USER) { +# user(key: {id_expr: "auth.uid"}) { +# favorite_actors_on_user { +# actor { +# id +# name +# imageUrl +# } +# } +# } +# } + +# # Get favorite movies by user ID +# query GetUserFavoriteMovies @auth(level: USER) { +# user(id_expr: "auth.uid") { +# favorite_movies_on_user { +# movie { +# id +# title +# genre +# imageUrl +# releaseYear +# rating +# description +# } +# } +# } +# } +# # end of example queries \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/moviedata_insert.gql b/Examples/FriendlyFlix/dataconnect/moviedata_insert.gql new file mode 100644 index 0000000..8b6dc7f --- /dev/null +++ b/Examples/FriendlyFlix/dataconnect/moviedata_insert.gql @@ -0,0 +1,687 @@ +mutation { + movie_insertMany( + data: [ + { + id: "550e8400-e29b-41d4-a716-446655440000" + title: "Quantum Paradox" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fquantum_paradox.jpeg?alt=media&token=4142e2a1-bf43-43b5-b7cf-6616be3fd4e3" + releaseYear: 2025 + genre: "sci-fi" + rating: 7.9 + description: "A group of scientists accidentally open a portal to a parallel universe, causing a rift in time. As the team races to close the portal, they encounter alternate versions of themselves, leading to shocking revelations." + tags: ["thriller", "adventure"] + } + { + id: "550e8400-e29b-41d4-a716-446655440001" + title: "The Lone Outlaw" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Flone_outlaw.jpeg?alt=media&token=15525ffc-208f-4b59-b506-ae8348e06e85" + releaseYear: 2023 + genre: "western" + rating: 8.2 + description: "In the lawless Wild West, a mysterious gunslinger with a hidden past takes on a corrupt sheriff and his band of outlaws to bring justice to a small town." + tags: ["action", "drama"] + } + { + id: "550e8400-e29b-41d4-a716-446655440002" + title: "Celestial Harmony" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fcelestial_harmony.jpeg?alt=media&token=3edf1cf9-c2f5-4c75-9819-36ff6a734c9a" + releaseYear: 2024 + genre: "romance" + rating: 7.5 + description: "Two astronauts, stationed on a remote space station, fall in love amidst the isolation of deep space. But when a mysterious signal disrupts their communication, they must find a way to reconnect and survive." + tags: ["romance", "sci-fi"] + } + { + id: "550e8400-e29b-41d4-a716-446655440003" + title: "Noir Mystique" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fnoir_mystique.jpeg?alt=media&token=3299adba-cb98-4302-8b23-aeb679a4f913" + releaseYear: 2022 + genre: "mystery" + rating: 8.0 + description: "A private detective gets caught up in a web of lies, deception, and betrayal while investigating the disappearance of a famous actress in 1940s Hollywood." + tags: ["crime", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440004" + title: "The Forgotten Island" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fforgotten_island.jpeg?alt=media&token=bc2b16e1-caed-4649-952c-73b6113f205c" + releaseYear: 2025 + genre: "adventure" + rating: 7.6 + description: "An explorer leads an expedition to a remote island rumored to be home to mythical creatures. As the team ventures deeper into the island, they uncover secrets that change the course of history." + tags: ["adventure", "fantasy"] + } + { + id: "550e8400-e29b-41d4-a716-446655440005" + title: "Digital Nightmare" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fdigital_nightmare.jpeg?alt=media&token=335ec842-1ca4-4b09-abd1-e96d9f5c0c2f" + releaseYear: 2024 + genre: "horror" + rating: 6.9 + description: "A tech-savvy teenager discovers a cursed app that brings nightmares to life. As the horrors of the digital world cross into reality, she must find a way to break the curse before it's too late." + tags: ["horror", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440006" + title: "Eclipse of Destiny" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Feclipse_destiny.jpeg?alt=media&token=346649b3-cb5c-4d7e-b0d4-6f02e3df5959" + releaseYear: 2026 + genre: "fantasy" + rating: 8.1 + description: "In a kingdom on the brink of war, a prophecy speaks of an eclipse that will grant power to the rightful ruler. As factions vie for control, a young warrior must decide where his true loyalty lies." + tags: ["fantasy", "adventure"] + } + { + id: "550e8400-e29b-41d4-a716-446655440007" + title: "Heart of Steel" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fheart_steel.jpeg?alt=media&token=17883d71-329b-415a-86f8-dd4d9e941d7f" + releaseYear: 2023 + genre: "sci-fi" + rating: 7.7 + description: "A brilliant scientist creates a robot with a human heart. As the robot struggles to understand emotions, it becomes entangled in a plot that could change the fate of humanity." + tags: ["sci-fi", "drama"] + } + { + id: "550e8400-e29b-41d4-a716-446655440008" + title: "Rise of the Crimson Empire" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Frise_crimson_empire.jpeg?alt=media&token=6faa73ad-7504-4146-8f3a-50b90f607f33" + releaseYear: 2025 + genre: "action" + rating: 8.4 + description: "A legendary warrior rises to challenge the tyrannical rule of a powerful empire. As rebellion brews, the warrior must unite different factions to lead an uprising." + tags: ["action", "adventure"] + } + { + id: "550e8400-e29b-41d4-a716-446655440009" + title: "Silent Waves" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fsilent_waves.jpeg?alt=media&token=bd626bf1-ec60-4e57-aa07-87ba14e35bb7" + releaseYear: 2024 + genre: "drama" + rating: 8.2 + description: "A talented pianist, who loses his hearing in a tragic accident, must rediscover his passion for music with the help of a young music teacher who believes in him." + tags: ["drama", "music"] + } + { + id: "550e8400-e29b-41d4-a716-446655440010" + title: "Echoes of the Past" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fecho_of_past.jpeg?alt=media&token=d866aa27-8534-4d72-8988-9da4a1b9e452" + releaseYear: 2023 + genre: "historical" + rating: 7.8 + description: "A historian stumbles upon an ancient artifact that reveals hidden truths about an empire long forgotten. As she deciphers the clues, a shadowy organization tries to stop her from unearthing the past." + tags: ["drama", "mystery"] + } + { + id: "550e8400-e29b-41d4-a716-446655440011" + title: "Beyond the Horizon" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fbeyond_horizon.jpeg?alt=media&token=31493973-0692-4e6e-8b88-afb1aaea17ee" + releaseYear: 2026 + genre: "sci-fi" + rating: 8.5 + description: "In the future, Earth's best pilots are sent on a mission to explore a mysterious planet beyond the solar system. What they find changes humanity's understanding of the universe forever." + tags: ["sci-fi", "adventure"] + } + { + id: "550e8400-e29b-41d4-a716-446655440012" + title: "Shadows and Lies" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fshadows_lies.jpeg?alt=media&token=01afb80d-caee-47f8-a00e-aea8b9e459a2" + releaseYear: 2022 + genre: "crime" + rating: 7.9 + description: "A young detective with a dark past investigates a series of mysterious murders in a city plagued by corruption. As she digs deeper, she realizes nothing is as it seems." + tags: ["crime", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440013" + title: "The Last Symphony" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Flast_symphony.jpeg?alt=media&token=f9bf80cd-3d8e-4e24-8503-7feb11f4e397" + releaseYear: 2024 + genre: "drama" + rating: 8.0 + description: "An aging composer struggling with memory loss attempts to complete his final symphony. With the help of a young prodigy, he embarks on an emotional journey through his memories and legacy." + tags: ["drama", "music"] + } + { + id: "550e8400-e29b-41d4-a716-446655440014" + title: "Moonlit Crusade" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fmoonlit_crusade.jpeg?alt=media&token=b13241f5-d7d0-4370-b651-07847ad99dc2" + releaseYear: 2025 + genre: "fantasy" + rating: 8.3 + description: "A knight is chosen by an ancient order to embark on a quest under the light of the full moon. Facing mythical beasts and treacherous landscapes, he seeks a relic that could save his kingdom." + tags: ["fantasy", "adventure"] + } + { + id: "550e8400-e29b-41d4-a716-446655440015" + title: "Abyss of the Deep" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fabyss_deep.jpeg?alt=media&token=2417321d-2451-4ec0-9ed6-6297042170e6" + releaseYear: 2023 + genre: "horror" + rating: 7.2 + description: "When a group of marine biologists descends into the unexplored depths of the ocean, they encounter a terrifying and ancient force. Now, they must survive as the abyss comes alive." + tags: ["horror", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440016" + title: "Phoenix Rising" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fpheonix_rising.jpeg?alt=media&token=7298b1fd-833c-471c-a55d-e8fc798b4ab2" + releaseYear: 2025 + genre: "action" + rating: 8.6 + description: "A special forces operative, presumed dead, returns to avenge his fallen comrades. With nothing to lose, he faces a powerful enemy in a relentless pursuit for justice." + tags: ["action", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440017" + title: "The Infinite Knot" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Finfinite_knot.jpeg?alt=media&token=93d54d93-d933-4663-a6fe-26b707ef823e" + releaseYear: 2026 + genre: "romance" + rating: 7.4 + description: "Two souls destined to meet across multiple lifetimes struggle to find each other in a chaotic world. With each incarnation, they get closer, but time itself becomes their greatest obstacle." + tags: ["romance", "fantasy"] + } + { + id: "550e8400-e29b-41d4-a716-446655440018" + title: "Parallel Justice" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fparalel_justice.jpeg?alt=media&token=4544b5e2-7a1d-46ca-a97f-eb6a490d4288" + releaseYear: 2024 + genre: "crime" + rating: 8.1 + description: "A lawyer who can see the outcomes of different timelines must choose between justice and personal gain. When a high-stakes case arises, he faces a moral dilemma that could alter his life forever." + tags: ["crime", "thriller"] + } + { + id: "550e8400-e29b-41d4-a716-446655440019" + title: "Veil of Illusion" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fveil_illusion.jpeg?alt=media&token=7bf09a3c-c531-478a-9d02-5d99fca9393b" + releaseYear: 2022 + genre: "mystery" + rating: 7.8 + description: "A magician-turned-detective uses his skills in illusion to solve crimes. When a series of murders leaves the city in fear, he must reveal the truth hidden behind a veil of deceit." + tags: ["mystery", "crime"] + } + ] + ) + actor_insertMany( + data: [ + { + id: "123e4567-e89b-12d3-a456-426614174020" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Foliver_blackwood.jpeg?alt=media&token=79cdbc29-c2c6-4dc3-b87f-f6dc4f1a8208" + name: "Oliver Blackwood" + } + { + id: "123e4567-e89b-12d3-a456-426614174021" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Femma_westfield.jpeg?alt=media&token=2991c3c9-cfa8-4067-8b26-c5239b6894c4" + name: "Emma Westfield" + } + { + id: "123e4567-e89b-12d3-a456-426614174022" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fjack_stone.jpeg?alt=media&token=74a564aa-d840-4bdd-a8a6-c6b17bbde608" + name: "Jack Stone" + } + { + id: "123e4567-e89b-12d3-a456-426614174023" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fclara_woods.jpeg?alt=media&token=b4ff2a15-ef6d-4f20-86c9-07d67015fb29" + name: "Clara Woods" + } + { + id: "123e4567-e89b-12d3-a456-426614174024" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fnoah_frost.jpeg?alt=media&token=0d08179a-7778-405e-9501-feac43b77a99" + name: "Noah Frost" + } + { + id: "123e4567-e89b-12d3-a456-426614174025" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fisabelle_hart.jpeg?alt=media&token=d4fdf896-0f5b-4c32-91a4-7a541a95e77d" + name: "Isabella Hart" + } + { + id: "123e4567-e89b-12d3-a456-426614174026" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fliam_hale.jpeg?alt=media&token=08e8eeee-b8ef-4e7b-8f97-a1e0b59321cc" + name: "Liam Hale" + } + { + id: "123e4567-e89b-12d3-a456-426614174027" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fsophia_knight.jpeg?alt=media&token=7a79ef21-93e0-46f9-934c-6bbef7b5d430" + name: "Sophia Knight" + } + { + id: "123e4567-e89b-12d3-a456-426614174028" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Falex_clay.jpeg?alt=media&token=2a798cdb-f44f-48d5-91bc-9d26a758944e" + name: "Alexander Clay" + } + { + id: "123e4567-e89b-12d3-a456-426614174029" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Famelia_stone.jpeg?alt=media&token=34f21ba9-9e28-4708-9e55-f123634ab506" + name: "Amelia Stone" + } + { + id: "123e4567-e89b-12d3-a456-426614174030" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fethan_blake.jpeg?alt=media&token=41352170-a5cd-4088-b8fd-1c4ee0d52cad" + name: "Ethan Blake" + } + { + id: "123e4567-e89b-12d3-a456-426614174031" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fmia_gray.jpeg?alt=media&token=1ba1831a-3ada-485a-b5c9-2d018bf1862b" + name: "Mia Gray" + } + { + id: "123e4567-e89b-12d3-a456-426614174032" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Flucas_reed.jpeg?alt=media&token=c74f44f3-ae98-4208-8e67-18c2db65a5c1" + name: "Lucas Reed" + } + { + id: "123e4567-e89b-12d3-a456-426614174033" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fevelyn_harper.jpeg?alt=media&token=b138b308-9589-4dfe-8c50-a6d70f06dfb1" + name: "Evelyn Harper" + } + { + id: "123e4567-e89b-12d3-a456-426614174034" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Foscar_smith.jpeg?alt=media&token=d493da85-644d-4d45-a09d-ecb5416645e4" + name: "Oscar Smith" + } + { + id: "123e4567-e89b-12d3-a456-426614174035" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fava_winter.jpeg?alt=media&token=757e4b11-0372-401e-8fa0-61797e90312a" + name: "Ava Winter" + } + { + id: "123e4567-e89b-12d3-a456-426614174036" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fleo_hunt.jpeg?alt=media&token=2cb14738-b39b-47b1-87f9-b45f38245179" + name: "Leo Hunt" + } + { + id: "123e4567-e89b-12d3-a456-426614174037" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Flucy_walsh.jpeg?alt=media&token=016a216c-f329-4c10-bbe8-b31425f73c69" + name: "Lucy Walsh" + } + { + id: "123e4567-e89b-12d3-a456-426614174038" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Fmason_ford.jpeg?alt=media&token=55388be9-fdc8-483f-8352-c29755ed3574" + name: "Mason Ford" + } + { + id: "123e4567-e89b-12d3-a456-426614174039" + imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/actor%2Flily_moore.jpeg?alt=media&token=19538aa6-1baf-4033-8fd7-d2a62aa79f51" + name: "Lily Moore" + } + ] + ) + movieMetadata_insertMany( + data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000" + director: "Henry Caldwell" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440001" + director: "Juliana Mason, Clark Avery" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440002" + director: "Diana Rivers" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440003" + director: "Liam Thatcher" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440004" + director: "Evelyn Hart" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440005" + director: "Grayson Brooks" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440006" + director: "Isabella Quinn" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440007" + director: "Vincent Hale" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440008" + director: "Amelia Sutton" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440009" + director: "Lucas Stone" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440010" + director: "Sophia Langford" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440011" + director: "Noah Bennett" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440012" + director: "Chloe Armstrong" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440013" + director: "Sebastian Crane" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440014" + director: "Isla Fitzgerald" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440015" + director: "Oliver Hayes" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440016" + director: "Mila Donovan" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440017" + director: "Carter Monroe, Elise Turner" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440018" + director: "Adrian Blake" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440019" + director: "Hazel Carter" + } + ] + ) +movieActor_insertMany( + data: [ + { + movieId: "550e8400-e29b-41d4-a716-446655440000" + actorId: "123e4567-e89b-12d3-a456-426614174020" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440000" + actorId: "123e4567-e89b-12d3-a456-426614174021" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440001" + actorId: "123e4567-e89b-12d3-a456-426614174021" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440001" + actorId: "123e4567-e89b-12d3-a456-426614174022" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440002" + actorId: "123e4567-e89b-12d3-a456-426614174022" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440002" + actorId: "123e4567-e89b-12d3-a456-426614174023" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440003" + actorId: "123e4567-e89b-12d3-a456-426614174023" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440003" + actorId: "123e4567-e89b-12d3-a456-426614174024" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440004" + actorId: "123e4567-e89b-12d3-a456-426614174024" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440004" + actorId: "123e4567-e89b-12d3-a456-426614174025" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440005" + actorId: "123e4567-e89b-12d3-a456-426614174025" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440005" + actorId: "123e4567-e89b-12d3-a456-426614174026" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440006" + actorId: "123e4567-e89b-12d3-a456-426614174026" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440006" + actorId: "123e4567-e89b-12d3-a456-426614174027" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440007" + actorId: "123e4567-e89b-12d3-a456-426614174027" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440007" + actorId: "123e4567-e89b-12d3-a456-426614174028" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440008" + actorId: "123e4567-e89b-12d3-a456-426614174028" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440008" + actorId: "123e4567-e89b-12d3-a456-426614174029" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440009" + actorId: "123e4567-e89b-12d3-a456-426614174029" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440009" + actorId: "123e4567-e89b-12d3-a456-426614174030" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440010" + actorId: "123e4567-e89b-12d3-a456-426614174030" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440010" + actorId: "123e4567-e89b-12d3-a456-426614174031" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440011" + actorId: "123e4567-e89b-12d3-a456-426614174031" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440011" + actorId: "123e4567-e89b-12d3-a456-426614174032" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440012" + actorId: "123e4567-e89b-12d3-a456-426614174032" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440012" + actorId: "123e4567-e89b-12d3-a456-426614174033" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440013" + actorId: "123e4567-e89b-12d3-a456-426614174033" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440013" + actorId: "123e4567-e89b-12d3-a456-426614174034" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440014" + actorId: "123e4567-e89b-12d3-a456-426614174034" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440014" + actorId: "123e4567-e89b-12d3-a456-426614174035" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440015" + actorId: "123e4567-e89b-12d3-a456-426614174035" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440015" + actorId: "123e4567-e89b-12d3-a456-426614174036" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440016" + actorId: "123e4567-e89b-12d3-a456-426614174036" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440016" + actorId: "123e4567-e89b-12d3-a456-426614174037" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440017" + actorId: "123e4567-e89b-12d3-a456-426614174037" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440017" + actorId: "123e4567-e89b-12d3-a456-426614174038" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440018" + actorId: "123e4567-e89b-12d3-a456-426614174038" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440018" + actorId: "123e4567-e89b-12d3-a456-426614174039" + role: "supporting" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440019" + actorId: "123e4567-e89b-12d3-a456-426614174039" + role: "main" + } + { + movieId: "550e8400-e29b-41d4-a716-446655440019" + actorId: "123e4567-e89b-12d3-a456-426614174020" + role: "supporting" + } + ] +) + user_insertMany( + data: [ + { id: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", username: "sherlock_h" } + { id: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", username: "hercule_p" } + { id: "TBedjwCX0Jf955Uuoxk6k74sY0l1", username: "jane_d" } + ] + ) + + review_insertMany( + data: [ + { + id: "345e4567-e89b-12d3-a456-426614174000" + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2" + movieId: "550e8400-e29b-41d4-a716-446655440000" + rating: 5 + reviewText: "An incredible movie with a mind-blowing plot!" + reviewDate_date: { today: true } + } + { + id: "345e4567-e89b-12d3-a456-426614174001" + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2" + movieId: "550e8400-e29b-41d4-a716-446655440001" + rating: 5 + reviewText: "A revolutionary film that changed cinema forever." + reviewDate_date: { today: true } + } + { + id: "345e4567-e89b-12d3-a456-426614174002" + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1" + movieId: "550e8400-e29b-41d4-a716-446655440002" + rating: 5 + reviewText: "A visually stunning and emotionally impactful movie." + reviewDate_date: { today: true } + } + { + id: "345e4567-e89b-12d3-a456-426614174003" + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2" + movieId: "550e8400-e29b-41d4-a716-446655440003" + rating: 4 + reviewText: "A fantastic superhero film with great performances." + reviewDate_date: { today: true } + } + { + id: "345e4567-e89b-12d3-a456-426614174004" + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2" + movieId: "550e8400-e29b-41d4-a716-446655440004" + rating: 5 + reviewText: "An amazing film that keeps you on the edge of your seat." + reviewDate_date: { today: true } + } + { + id: "345e4567-e89b-12d3-a456-426614174005" + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1" + movieId: "550e8400-e29b-41d4-a716-446655440005" + rating: 5 + reviewText: "An absolute classic with unforgettable dialogue." + reviewDate_date: { today: true } + } + ] + ) + + favorite_movie_insertMany( + data: [ + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2" + movieId: "550e8400-e29b-41d4-a716-446655440000" + } + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2" + movieId: "550e8400-e29b-41d4-a716-446655440001" + } + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1" + movieId: "550e8400-e29b-41d4-a716-446655440002" + } + { + userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2" + movieId: "550e8400-e29b-41d4-a716-446655440003" + } + { + userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2" + movieId: "550e8400-e29b-41d4-a716-446655440004" + } + { + userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1" + movieId: "550e8400-e29b-41d4-a716-446655440005" + } + ] + ) +} \ No newline at end of file diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql index f25a8a1..edbebe5 100644 --- a/Examples/FriendlyFlix/dataconnect/schema/schema.gql +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -1,10 +1,10 @@ # Movies +# TODO: Fill out Movie table type Movie # The below parameter values are generated by default with @table, and can be edited manually. @table { # implicitly calls @col to generates a column name. ex: @col(name: "movie_id") - # for UUID fields, @default(expr: "uuidV4()") is implicitly called - id: UUID! + id: UUID! @default(expr: "uuidV4()") title: String! imageUrl: String! releaseYear: Int @@ -12,15 +12,16 @@ type Movie rating: Float description: String tags: [String] - # Vectors -- uncomment the line below to enable vector search - descriptionEmbedding: Vector @col(size:768) + # descriptionEmbedding: Vector @col(size:768) # Enables vector search } # Movie Metadata # Movie - MovieMetadata is a one-to-one relationship +# TODO: Fill out MovieMetadata table type MovieMetadata @table { - # @ref creates a field in the current table (MovieMetadata) that holds the primary key of the referenced type + # @ref creates a field in the current table (MovieMetadata) + # It is a reference that holds the primary key of the referenced type # In this case, @ref(fields: "movieId", references: "id") is implied movie: Movie! @ref # movieId: UUID <- this is created by the above @ref @@ -30,25 +31,28 @@ type MovieMetadata # Actors # Suppose an actor can participate in multiple movies and movies can have multiple actors # Movie - Actors (or vice versa) is a many to many relationship +# TODO: Fill out Actor table type Actor @table { id: UUID! - imageUrl: String! + imageUrl: String! name: String! @col(name: "name", dataType: "varchar(30)") } # Users # Suppose a user can leave reviews for movies # user-reviews is a one to many relationship, movie-reviews is a one to many relationship, movie:user is a many to many relationship +# TODO: Fill out User table type User @table { id: String! @col(name: "user_auth") username: String! @col(name: "username", dataType: "varchar(50)") # The following are generated from the @ref in the Review table - # reviews_on_user + # reviews_on_user # movies_via_Review } # Reviews +# TODO: Fill out Review table type Review @table(name: "Reviews", key: ["movie", "user"]) { id: UUID! @default(expr: "uuidV4()") user: User! @@ -61,6 +65,7 @@ type Review @table(name: "Reviews", key: ["movie", "user"]) { # Join table for many-to-many relationship for movies and actors # The 'key' param signifies the primary key(s) of this table # In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor] +# TODO: Fill out MovieActor table type MovieActor @table(key: ["movie", "actor"]) { # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type # In this case, @ref(fields: "id") is implied @@ -74,16 +79,10 @@ type MovieActor @table(key: ["movie", "actor"]) { } # Join table for many-to-many relationship for users and favorite movies +# TODO: Fill out FavoriteMovie table type FavoriteMovie @table(name: "FavoriteMovies", singular: "favorite_movie", plural: "favorite_movies", key: ["user", "movie"]) { # @ref is implicit user: User! movie: Movie! -} - -# Join table for many-to-many relationship for users and favorite actors -type FavoriteActor - @table(name: "FavoriteActors", singular: "favorite_actor", plural: "favorite_actors", key: ["user", "actor"]) { - user: User! - actor: Actor! -} +} \ No newline at end of file From 49c55066e5658fa10ae21f80f23dbdc0b6c68b0f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 8 Oct 2024 19:09:04 +0100 Subject: [PATCH 06/50] =?UTF-8?q?=F0=9F=8E=A8=20=20Fix=20formating?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../Sources/FriendlyFlixClient.swift | 79 +- .../Sources/FriendlyFlixKeys.swift | 334 +- .../Sources/FriendlyFlixOperations.swift | 3926 ++++++----------- 4 files changed, 1642 insertions(+), 2750 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 52016e3..e0619f4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,31 +4,30 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") - ], - path: "Sources" - ) - ] -) + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"] + ), + ], + dependencies: [ + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), + ], + path: "Sources" + ), + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index d0b2143..c11e739 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,63 +1,60 @@ -import Foundation import FirebaseDataConnect - - - - - - +import Foundation public extension DataConnect { - static var friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) + let dc = DataConnect.dataConnect( + connectorConfig: FriendlyFlixConnector.connectorConfig, + callerSDKType: .generated + ) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "friendly-flix-service", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - + // init operations + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let upsertUserMutation: UpsertUserMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addReviewMutation: AddReviewMutation -public let updateReviewMutation: UpdateReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let listMoviesQuery: ListMoviesQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let searchAllQuery: SearchAllQuery - + public let upsertUserMutation: UpsertUserMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addReviewMutation: AddReviewMutation + public let updateReviewMutation: UpdateReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let listMoviesQuery: ListMoviesQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let searchAllQuery: SearchAllQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index ba7810c..045f4d1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,430 +2,324 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } - - public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 4350f6f..2eb3861 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,44 +1,16 @@ import FirebaseDataConnect import Foundation - - - - - - - - - - - - - - - - - - - // MARK: Common Enums public enum OrderDirection: String, Codable { - case ASC = "ASC" - case DESC = "DESC" - } + case ASC + case DESC +} // End enum definitions - - - - - - - - -public class UpsertUserMutation{ - +public class UpsertUserMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -47,104 +19,69 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - + public var + username: String - - - - public init ( - -username: String - - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -153,104 +90,76 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -259,104 +168,75 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -365,148 +245,109 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable { + public var + review_insert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_insert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class UpdateReviewMutation{ + return try await ref.execute() + } +} +public class UpdateReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -515,148 +356,110 @@ public class UpdateReviewMutation{ public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable { + public var + review_update: ReviewKey? + } + public func ref(movieId: UUID, + rating: Int, -public var -review_update: ReviewKey? + reviewText: String) + -> MutationRef { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws + -> OperationResult { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -665,104 +468,69 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -771,271 +539,200 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -orderByRating: OrderDirection? + @OptionalVariable + public var + orderByRating: OrderDirection? - - @OptionalVariable - public var -orderByReleaseYear: OrderDirection? + @OptionalVariable + public var + orderByReleaseYear: OrderDirection? - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - -} + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case orderByRating - + case orderByReleaseYear - + case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + + if $orderByReleaseYear.isSet { + try codecHelper.encode( + orderByReleaseYear, + forKey: .orderByReleaseYear, + container: &container + ) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public var + genre: String? + public var + rating: Double? + public var + tags: [String]? -public var -title: String + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -imageUrl: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -releaseYear: Int? + case imageUrl + case releaseYear + case genre -public var -genre: String? + case rating + case tags + case description + } -public var -rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - + public var + movies: [Movie] } - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation } - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - + public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class GetMovieByIdQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class GetMovieByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1044,579 +741,395 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable { + public var + director: String? -public var -title: String + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -imageUrl: String + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -releaseYear: Int? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -genre: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -description: String? + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [ActorMainActors] -public var -tags: [String]? + public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct MovieMetadataMetadata: Decodable { - + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -director: String? + case name + case imageUrl + } - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - enum CodingKeys: String, CodingKey { - - case director - - } + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + reviewText: String? + public var + reviewDate: LocalDate -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { - + public var + rating: Int? + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String -public var -id: UUID + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -name: String + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] - - - - - -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case reviewText + case reviewDate -public var -name: String + case rating + case user + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] -public struct ReviewReviews: Decodable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -reviewText: String? + case imageUrl + case releaseYear + case genre -public var -reviewDate: LocalDate + case rating + case description + case tags -public var -rating: Int? + case metadata + case mainActors + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -username: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + public var + movie: Movie? } -} -public var -reviews: [ReviewReviews] + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1625,382 +1138,257 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Actor: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + title: String + public var + genre: String? -public var -name: String + public var + tags: [String]? + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -imageUrl: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { - + case tags + case imageUrl + } -public var -id: UUID + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -title: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -genre: String? + public var + mainActors: [MovieMainActors] + public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public var -tags: [String]? + public var + genre: String? + public var + tags: [String]? + public var + imageUrl: String -public var -imageUrl: String + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } + enum CodingKeys: String, CodingKey { + case id - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } + case title - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -id: UUID + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [MovieSupportingActors] -public var -title: String + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } -public var -genre: String? + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl -public var -tags: [String]? + case mainActors + case supportingActors + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() } } -public var -actor: Actor? - - } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetCurrentUserQuery{ +public class GetCurrentUserQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2009,465 +1397,333 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable { + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String + public var + reviewDate: LocalDate + public var + reviewText: String? + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviews: Decodable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewDate -public var -reviewText: String? + case reviewText + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -id: UUID + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -title: String + public var + title: String + public var + genre: String? - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + imageUrl: String - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public var + releaseYear: Int? - + public var + rating: Double? - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + public var + description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } + public var + tags: [String]? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + public struct MovieMetadataMetadata: Decodable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] -public struct FavoriteMovieFavoriteMovies: Decodable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + case title + case genre -public var -id: UUID + case imageUrl + case releaseYear + case rating -public var -title: String + case description + case tags + case metadata + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -rating: Double? + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } -public var -description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] -public var -tags: [String]? + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public struct MovieMetadataMetadata: Decodable { - + case reviews + case favoriteMovies + } -public var -director: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - enum CodingKeys: String, CodingKey { - - case director - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - + public var + user: User? } -} -public var -metadata: [MovieMetadataMetadata] - - - public var movieKey: MovieKey { - return MovieKey( - - id: id + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - - } -} -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetIfFavoritedMovieQuery{ - +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2476,836 +1732,582 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { + public struct FavoriteMovie: Decodable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable { - + public var + favorite_movie: FavoriteMovie? + } + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) -public var -movieId: UUID + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) - - enum CodingKeys: String, CodingKey { - - case movieId - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } +} - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public class SearchAllQuery { + let dataConnect: DataConnect - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } -} -public var -favorite_movie: FavoriteMovie? - } + public static let OperationName = "SearchAll" - public func ref( - -movieId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public typealias Ref = QueryRefObservation + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double -public class SearchAllQuery{ + public var + genre: String - let dataConnect: DataConnect + public init(minYear: Int, - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxYear: Int, - public static let OperationName = "SearchAll" + minRating: Double, - public typealias Ref = QueryRefObservation + maxRating: Double, - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + genre: String, - - - public var -minYear: Int + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - - - public var -maxYear: Int + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minRating: Double + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxRating: Double + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minYear) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable { + public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { - - + public var + imageUrl: String -public var -id: UUID + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } + public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } + public var + title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + public var + genre: String? + public var + rating: Double? + public var + imageUrl: String + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case title + case genre + case rating -public var -title: String + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -genre: String? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -imageUrl: String + public var + name: String + public var + imageUrl: String - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { - + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable { + public var + id: UUID + public var + rating: Int? -public var -name: String + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -imageUrl: String + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } + enum CodingKeys: String, CodingKey { + case id - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public struct ReviewReviewsMatchingText: Decodable { - + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String -public var -id: UUID + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } -public var -rating: Int? + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -reviewText: String? + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewText + case reviewDate + case movie -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + case user + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -id: UUID + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -title: String + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - + public var + reviewsMatchingText: [ReviewReviewsMatchingText] } - + public func ref(minYear: Int, - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + maxYear: Int, + minRating: Double, + maxRating: Double, + genre: String, + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } -public var -id: String + public func execute(minYear: Int, + maxYear: Int, + minRating: Double, -public var -username: String + maxRating: Double, + genre: String, - - public var userKey: UserKey { - return UserKey( - - id: id + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } + if let optionalVars { + optionalVars(&variables) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation + return try await refCast.execute() } - - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - From 2675a437f07f42d38d215bc4ac031487cdfbcdb5 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 8 Oct 2024 19:33:53 +0100 Subject: [PATCH 07/50] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=20Re-generate=20cod?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../Sources/FriendlyFlixClient.swift | 79 +- .../Sources/FriendlyFlixKeys.swift | 334 +- .../Sources/FriendlyFlixOperations.swift | 3926 +++++++++++------ .../.dataconnect/schema/main/implicit.gql | 24 + .../.dataconnect/schema/main/input.gql | 858 +++- .../.dataconnect/schema/main/mutation.gql | 923 +++- .../.dataconnect/schema/main/query.gql | 291 +- .../.dataconnect/schema/main/relation.gql | 312 +- .../.dataconnect/schema/prelude.gql | 1227 ++++-- .../dataconnect/schema/schema.gql | 2 +- 11 files changed, 5836 insertions(+), 2193 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index e0619f4..52016e3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,30 +4,31 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17), - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"] - ), - ], - dependencies: [ - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), - ], - path: "Sources" - ), - ] + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") + ], + path: "Sources" + ) + ] ) + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index c11e739..d0b2143 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,60 +1,63 @@ -import FirebaseDataConnect import Foundation +import FirebaseDataConnect + + + + + + public extension DataConnect { + static var friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect( - connectorConfig: FriendlyFlixConnector.connectorConfig, - callerSDKType: .generated - ) + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() + } public class FriendlyFlixConnector { + var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig( - serviceId: "friendly-flix-service", - location: "us-central1", - connector: "friendly-flix" - ) + public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + // init operations + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, - port: Int = DataConnect.EmulatorDefaults.port) { - dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) } // MARK: Operations +public let upsertUserMutation: UpsertUserMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addReviewMutation: AddReviewMutation +public let updateReviewMutation: UpdateReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let listMoviesQuery: ListMoviesQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let searchAllQuery: SearchAllQuery + - public let upsertUserMutation: UpsertUserMutation - public let addFavoritedMovieMutation: AddFavoritedMovieMutation - public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation - public let addReviewMutation: AddReviewMutation - public let updateReviewMutation: UpdateReviewMutation - public let deleteReviewMutation: DeleteReviewMutation - public let listMoviesQuery: ListMoviesQuery - public let getMovieByIdQuery: GetMovieByIdQuery - public let getActorByIdQuery: GetActorByIdQuery - public let getCurrentUserQuery: GetCurrentUserQuery - public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery - public let searchAllQuery: SearchAllQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 045f4d1..ba7810c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,324 +2,430 @@ import Foundation import FirebaseDataConnect + + public struct ActorKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension ActorKey: Codable { +extension ActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension ActorKey: Equatable { +extension ActorKey : Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey: Hashable { +extension ActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct FavoriteMovieKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension FavoriteMovieKey: Codable { +extension FavoriteMovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension FavoriteMovieKey: Equatable { +extension FavoriteMovieKey : Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey: Hashable { +extension FavoriteMovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct MovieActorKey { + public private(set) var movieId: UUID - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case movieId - - case actorId + + case movieId + + case actorId + } } -extension MovieActorKey: Codable { +extension MovieActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension MovieActorKey: Equatable { +extension MovieActorKey : Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey: Hashable { +extension MovieActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(actorId) + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + } } + + public struct MovieMetadataKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieMetadataKey: Codable { +extension MovieMetadataKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieMetadataKey: Equatable { +extension MovieMetadataKey : Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey: Hashable { +extension MovieMetadataKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct MovieKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieKey: Codable { +extension MovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieKey: Equatable { +extension MovieKey : Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey: Hashable { +extension MovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct ReviewKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension ReviewKey: Codable { +extension ReviewKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension ReviewKey: Equatable { +extension ReviewKey : Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey: Hashable { +extension ReviewKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct UserKey { + public private(set) var id: String + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension UserKey: Codable { +extension UserKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension UserKey: Equatable { +extension UserKey : Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension UserKey: Hashable { +extension UserKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 2eb3861..4350f6f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,16 +1,44 @@ import FirebaseDataConnect import Foundation + + + + + + + + + + + + + + + + + + + // MARK: Common Enums public enum OrderDirection: String, Codable { - case ASC - case DESC -} + case ASC = "ASC" + case DESC = "DESC" + } // End enum definitions -public class UpsertUserMutation { + + + + + + + + +public class UpsertUserMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -19,69 +47,104 @@ public class UpsertUserMutation { public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - username: String + + + public var +username: String + - public init(username: String) { - self.username = username + + + + public init ( + +username: String + + + ) { + self.username = username + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.username == rhs.username + + return lhs.username == rhs.username + } - public func hash(into hasher: inout Hasher) { - hasher.combine(username) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} enum CodingKeys: String, CodingKey { + case username + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(username, forKey: .username, container: &container) + + } - } - public struct Data: Decodable { - public var - user_upsert: UserKey } - public func ref(username: String) -> MutationRef< - UpsertUserMutation.Data, - UpsertUserMutation.Variables - > { - var variables = UpsertUserMutation.Variables(username: username) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) - return ref as MutationRef - } - public func execute(username: String) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) +public var +user_upsert: UserKey - return try await ref.execute() } + + public func ref( + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } } -public class AddFavoritedMovieMutation { + + + + + +public class AddFavoritedMovieMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -90,76 +153,104 @@ public class AddFavoritedMovieMutation { public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_upsert: FavoriteMovieKey } - public func ref(movieId: UUID) -> MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_upsert: FavoriteMovieKey - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedMovieMutation { + + + + + +public class DeleteFavoritedMovieMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -168,75 +259,104 @@ public class DeleteFavoritedMovieMutation { public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + - public init(movieId: UUID) { - self.movieId = movieId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_delete: FavoriteMovieKey? } - public func ref(movieId: UUID) - -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_delete: FavoriteMovieKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class AddReviewMutation { + + + + + +public class AddReviewMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -245,109 +365,148 @@ public class AddReviewMutation { public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + public var +rating: Int - public var - rating: Int + + + public var +reviewText: String - public var - reviewText: String - public init(movieId: UUID, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - rating: Int, + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable { - public var - review_insert: ReviewKey - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_insert: ReviewKey - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return ref as MutationRef } - public func execute(movieId: UUID, + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} - rating: Int, - reviewText: String) async throws -> OperationResult { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class UpdateReviewMutation { + +public class UpdateReviewMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -356,110 +515,148 @@ public class UpdateReviewMutation { public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable { - public var - review_update: ReviewKey? - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_update: ReviewKey? - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return ref as MutationRef } - public func execute(movieId: UUID, + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws - -> OperationResult { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteReviewMutation { +public class DeleteReviewMutation{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -468,69 +665,104 @@ public class DeleteReviewMutation { public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - review_delete: ReviewKey? } - public func ref(movieId: UUID) -> MutationRef< - DeleteReviewMutation.Data, - DeleteReviewMutation.Variables - > { - var variables = DeleteReviewMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) - return ref as MutationRef - } - public func execute(movieId: UUID) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) +public var +review_delete: ReviewKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } } -public class ListMoviesQuery { + + + + + +public class ListMoviesQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -539,200 +771,271 @@ public class ListMoviesQuery { public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - orderByRating: OrderDirection? - - @OptionalVariable - public var - orderByReleaseYear: OrderDirection? + + @OptionalVariable + public var +orderByRating: OrderDirection? - @OptionalVariable - public var - limit: Int? + + @OptionalVariable + public var +orderByReleaseYear: OrderDirection? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - } + + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + +} enum CodingKeys: String, CodingKey { + case orderByRating - + case orderByReleaseYear - + case limit + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode( - orderByReleaseYear, - forKey: .orderByReleaseYear, - container: &container - ) + + if $orderByReleaseYear.isSet { + try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - - public var - title: String - - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? - public var - rating: Double? - public var - tags: [String]? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +id: UUID - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +title: String - case title - case imageUrl - case releaseYear +public var +imageUrl: String - case genre - case rating - case tags +public var +releaseYear: Int? - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +tags: [String]? - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - ListMoviesQuery.Data, - ListMoviesQuery.Variables - > { - var variables = ListMoviesQuery.Variables() +public var +description: String? - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - if let optionalVars { - optionalVars(&variables) - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation - return try await refCast.execute() } + + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetMovieByIdQuery { + + + + + +public class GetMovieByIdQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -741,395 +1044,579 @@ public class GetMovieByIdQuery { public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + - public init(id: UUID) { - self.id = id + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } +public var +title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - } - } - public var - metadata: [MovieMetadataMetadata] +public var +imageUrl: String - public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +releaseYear: Int? - public var actorMainActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +genre: String? - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public var +rating: Double? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +description: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [ActorMainActors] - public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +tags: [String]? - public var - name: String - public var - imageUrl: String - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - return lhs.id == rhs.id - } +public struct MovieMetadataMetadata: Decodable { + - enum CodingKeys: String, CodingKey { - case id - case name +public var +director: String? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + enum CodingKeys: String, CodingKey { + + case director + + } - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - public var - supportingActors: [ActorSupportingActors] - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - reviewText: String? - public var - reviewDate: LocalDate - public var - rating: Int? +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +id: UUID - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +imageUrl: String - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var - user: User + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } - enum CodingKeys: String, CodingKey { - case id + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - case reviewText + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] - case reviewDate - case rating - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +id: UUID - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviews: [ReviewReviews] +public var +name: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +imageUrl: String - enum CodingKeys: String, CodingKey { - case id - case title + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - case imageUrl + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } - case releaseYear + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - case genre + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] - case rating - case description - case tags - case metadata - case mainActors +public struct ReviewReviews: Decodable { + - case supportingActors - case reviews - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +reviewText: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +reviewDate: LocalDate - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +rating: Int? - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - mainActors = try codecHelper.decode( - [ActorMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [ActorSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - } - } - public var - movie: Movie? - } +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - public func ref(id: UUID) -> QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > { - var variables = GetMovieByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id: id) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - let refCast = ref as! QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetActorByIdQuery { + + + + + +public class GetActorByIdQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1138,257 +1625,382 @@ public class GetActorByIdQuery { public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + - public init(id: UUID) { - self.id = id + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Actor: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String - public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - tags: [String]? +public var +id: UUID - public var - imageUrl: String - public var movieMainActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +name: String - public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case genre - case tags - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +id: UUID - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [MovieMainActors] +public var +title: String - public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? +public var +genre: String? - public var - tags: [String]? - public var - imageUrl: String - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +tags: [String]? - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +imageUrl: String - case title - case genre + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - case tags + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } - case imageUrl - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - public var - supportingActors: [MovieSupportingActors] - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } +public var +id: UUID - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +title: String - case name - case imageUrl - case mainActors +public var +genre: String? - case supportingActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +tags: [String]? - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - mainActors = try codecHelper.decode( - [MovieMainActors].self, - forKey: .mainActors, - container: &container - ) +public var +imageUrl: String - supportingActors = try codecHelper.decode( - [MovieSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - } - } - public var - actor: Actor? + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) } - public func ref(id: UUID) -> QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > { - var variables = GetActorByIdQuery.Variables(id: id) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + } - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id: id) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [MovieSupportingActors] + - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) + } - let refCast = ref as! QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > - return try await refCast.execute() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + } } +public var +actor: Actor? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetCurrentUserQuery{ -public class GetCurrentUserQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1397,333 +2009,465 @@ public class GetCurrentUserQuery { public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable { - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - rating: Int? - public var - reviewDate: LocalDate +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - public var - reviewText: String? - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +id: String - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +username: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ReviewReviews: Decodable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case reviewDate +public var +rating: Int? - case reviewText - case movie - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +reviewText: String? - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - reviews: [ReviewReviews] - public struct FavoriteMovieFavoriteMovies: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - imageUrl: String +public var +id: UUID - public var - releaseYear: Int? - public var - rating: Double? - public var - description: String? +public var +title: String - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable { - public var - director: String? + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case director - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - director = try codecHelper.decode( - String?.self, - forKey: .director, - container: &container - ) - } - } + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - public var - metadata: [MovieMetadataMetadata] + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct FavoriteMovieFavoriteMovies: Decodable { + - case imageUrl - case releaseYear - case rating - case description +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - case tags - case metadata - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +title: String - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +imageUrl: String - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +description: String? - enum CodingKeys: String, CodingKey { - case id - case username - case reviews +public var +tags: [String]? - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) +public struct MovieMetadataMetadata: Decodable { + + + +public var +director: String? - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } - public var - user: User? + + + + enum CodingKeys: String, CodingKey { + + case director + } - public func ref( - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute( - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } - let refCast = ref as! QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetIfFavoritedMovieQuery { + + + + + +public class GetIfFavoritedMovieQuery{ + let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1732,582 +2476,836 @@ public class GetIfFavoritedMovieQuery { public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + - public init(movieId: UUID) { - self.movieId = movieId + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable { - public struct FavoriteMovie: Decodable { - public var - movieId: UUID - enum CodingKeys: String, CodingKey { - case movieId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } - } - public var - favorite_movie: FavoriteMovie? - } +public struct FavoriteMovie: Decodable { + - public func ref(movieId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - } +public var +movieId: UUID - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) + - let refCast = ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - return try await refCast.execute() + + enum CodingKeys: String, CodingKey { + + case movieId + } -} -public class SearchAllQuery { - let dataConnect: DataConnect + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } +} +public var +favorite_movie: FavoriteMovie? - public static let OperationName = "SearchAll" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - @OptionalVariable - public var - input: String? - - public var - minYear: Int - - public var - maxYear: Int + } - public var - minRating: Double + public func ref( + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - public var - maxRating: Double - public var - genre: String - public init(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, +public class SearchAllQuery{ - genre: String, + let dataConnect: DataConnect - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } - if let optionalVars { - optionalVars(&self) - } - } + public static let OperationName = "SearchAll" - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - } + public typealias Ref = QueryRefObservation - public func hash(into hasher: inout Hasher) { - hasher.combine(input) + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? - hasher.combine(minYear) + + + public var +minYear: Int - hasher.combine(maxYear) + + + public var +maxYear: Int - hasher.combine(minRating) + + + public var +minRating: Double - hasher.combine(maxRating) + + + public var +maxRating: Double - hasher.combine(genre) + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + enum CodingKeys: String, CodingKey { + case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable { - public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case genre - case rating - case imageUrl - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - title: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } - public var - genre: String? + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } - public var - rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public var - imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieMoviesMatchingDescription, - rhs: MovieMoviesMatchingDescription) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + - case title - case genre +public var +id: UUID - case rating - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - moviesMatchingDescription: [MovieMoviesMatchingDescription] +public var +rating: Double? - public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +imageUrl: String - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } - public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - return lhs.id == rhs.id - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } - enum CodingKeys: String, CodingKey { - case id + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } - case name + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + - public var - actorsMatchingName: [ActorActorsMatchingName] - public struct ReviewReviewsMatchingText: Decodable { - public var - id: UUID +public var +id: UUID - public var - rating: Int? - public var - reviewText: String? - public var - reviewDate: LocalDate +public var +name: String - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +imageUrl: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case id + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } - case title - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public struct ReviewReviewsMatchingText: Decodable { + - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case username - } +public var +rating: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } +public var +reviewText: String? - public var - user: User - enum CodingKeys: String, CodingKey { - case id - case rating +public var +reviewDate: LocalDate - case reviewText - case reviewDate - case movie - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +id: UUID - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) +public var +title: String - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviewsMatchingText: [ReviewReviewsMatchingText] + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) } - public func ref(minYear: Int, + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - maxYear: Int, + - minRating: Double, + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - maxRating: Double, + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie - genre: String, - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchAllQuery.Data, - SearchAllQuery.Variables - > { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation - } - public func execute(minYear: Int, +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - maxYear: Int, - minRating: Double, +public var +id: String - maxRating: Double, - genre: String, - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) +public var +username: String - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } - let refCast = ref as! QueryRefObservation - return try await refCast.execute() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + } } +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } + + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql index 6a8d92c..c7944ef 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/implicit.gql @@ -1,16 +1,40 @@ extend type FavoriteMovie { + """ + ✨ Implicit foreign key field based on `FavoriteMovie`.`user`. It must match the value of `User`.`id`. See `@ref` for how to customize it. + """ userId: String! @fdc_generated(from: "FavoriteMovie.user", purpose: IMPLICIT_REF_FIELD) + """ + ✨ Implicit foreign key field based on `FavoriteMovie`.`movie`. It must match the value of `Movie`.`id`. See `@ref` for how to customize it. + """ movieId: UUID! @fdc_generated(from: "FavoriteMovie.movie", purpose: IMPLICIT_REF_FIELD) } extend type MovieActor { + """ + ✨ Implicit foreign key field based on `MovieActor`.`movie`. It must match the value of `Movie`.`id`. See `@ref` for how to customize it. + """ movieId: UUID! @fdc_generated(from: "MovieActor.movie", purpose: IMPLICIT_REF_FIELD) + """ + ✨ Implicit foreign key field based on `MovieActor`.`actor`. It must match the value of `Actor`.`id`. See `@ref` for how to customize it. + """ actorId: UUID! @fdc_generated(from: "MovieActor.actor", purpose: IMPLICIT_REF_FIELD) } extend type MovieMetadata { + """ + ✨ Implicit primary key field. It's a UUID column default to a generated new value. See `@table` for how to customize it. + """ id: UUID! @default(expr: "uuidV4()") @fdc_generated(from: "MovieMetadata", purpose: IMPLICIT_KEY_FIELD) + """ + ✨ Implicit foreign key field based on `MovieMetadata`.`movie`. It must match the value of `Movie`.`id`. See `@ref` for how to customize it. + """ movieId: UUID! @fdc_generated(from: "MovieMetadata.movie", purpose: IMPLICIT_REF_FIELD) } extend type Review { + """ + ✨ Implicit foreign key field based on `Review`.`movie`. It must match the value of `Movie`.`id`. See `@ref` for how to customize it. + """ movieId: UUID! @fdc_generated(from: "Review.movie", purpose: IMPLICIT_REF_FIELD) + """ + ✨ Implicit foreign key field based on `Review`.`user`. It must match the value of `User`.`id`. See `@ref` for how to customize it. + """ userId: String! @fdc_generated(from: "Review.user", purpose: IMPLICIT_REF_FIELD) } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql index bbbbc10..c904887 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/input.gql @@ -1,236 +1,1080 @@ -scalar Actor_Key -scalar FavoriteMovie_Key -scalar Movie_Key -scalar MovieActor_Key -scalar MovieMetadata_Key -scalar Review_Key -scalar User_Key +""" +✨ `Actor_KeyOutput` returns the primary key fields of table type `Actor`. + +It has the same format as `Actor_Key`, but is only used as mutation return value. +""" +scalar Actor_KeyOutput +""" +✨ `FavoriteMovie_KeyOutput` returns the primary key fields of table type `FavoriteMovie`. + +It has the same format as `FavoriteMovie_Key`, but is only used as mutation return value. +""" +scalar FavoriteMovie_KeyOutput +""" +✨ `Movie_KeyOutput` returns the primary key fields of table type `Movie`. + +It has the same format as `Movie_Key`, but is only used as mutation return value. +""" +scalar Movie_KeyOutput +""" +✨ `MovieActor_KeyOutput` returns the primary key fields of table type `MovieActor`. + +It has the same format as `MovieActor_Key`, but is only used as mutation return value. +""" +scalar MovieActor_KeyOutput +""" +✨ `MovieMetadata_KeyOutput` returns the primary key fields of table type `MovieMetadata`. + +It has the same format as `MovieMetadata_Key`, but is only used as mutation return value. +""" +scalar MovieMetadata_KeyOutput +""" +✨ `Review_KeyOutput` returns the primary key fields of table type `Review`. + +It has the same format as `Review_Key`, but is only used as mutation return value. +""" +scalar Review_KeyOutput +""" +✨ `User_KeyOutput` returns the primary key fields of table type `User`. + +It has the same format as `User_Key`, but is only used as mutation return value. +""" +scalar User_KeyOutput +""" +✨ Generated data input type for table 'Actor'. It includes all necessary fields for creating or upserting rows into table. +""" input Actor_Data { + """ + ✨ Generated from Field `Actor`.`id` of type `UUID!` + """ id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `Actor`.`id` of type `UUID!`) + """ id_expr: UUID_Expr + """ + ✨ Generated from Field `Actor`.`imageUrl` of type `String!` + """ imageUrl: String + """ + ✨ `_expr` server value variant of `imageUrl` (✨ Generated from Field `Actor`.`imageUrl` of type `String!`) + """ imageUrl_expr: String_Expr + """ + ✨ Generated from Field `Actor`.`name` of type `String!` + """ name: String + """ + ✨ `_expr` server value variant of `name` (✨ Generated from Field `Actor`.`name` of type `String!`) + """ name_expr: String_Expr } +""" +✨ Generated filter input type for table 'Actor'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input Actor_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [Actor_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: Actor_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [Actor_Filter!] + """ + ✨ Generated from Field `Actor`.`id` of type `UUID!` + """ id: UUID_Filter + """ + ✨ Generated from Field `Actor`.`imageUrl` of type `String!` + """ imageUrl: String_Filter + """ + ✨ Generated from Field `Actor`.`name` of type `String!` + """ name: String_Filter + """ + ✨ Generated from Field `Actor`.`movieActors_on_actor` of type `[MovieActor!]!` + """ movieActors_on_actor: MovieActor_ListFilter + """ + ✨ Generated from Field `Actor`.`movies_via_MovieActor` of type `[Movie!]!` + """ movies_via_MovieActor: Movie_ListFilter } +""" +✨ Generated first-row input type for table 'Actor'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input Actor_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [Actor_Order!] + """ + Filters rows based on the specified conditions. + """ + where: Actor_Filter +} +""" +✨ Generated key input type for table 'Actor'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input Actor_Key { + """ + ✨ Generated from Field `Actor`.`id` of type `UUID!` + """ + id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `Actor`.`id` of type `UUID!`) + """ + id_expr: UUID_Expr +} +""" +✨ Generated list filter input type for table 'Actor'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input Actor_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: Actor_Filter } +""" +✨ Generated order input type for table 'Actor'. This input defines the sorting order of rows in query results based on one or more fields. +""" input Actor_Order { + """ + ✨ Generated from Field `Actor`.`id` of type `UUID!` + """ id: OrderDirection + """ + ✨ Generated from Field `Actor`.`imageUrl` of type `String!` + """ imageUrl: OrderDirection + """ + ✨ Generated from Field `Actor`.`name` of type `String!` + """ name: OrderDirection } +""" +✨ Generated data input type for table 'FavoriteMovie'. It includes all necessary fields for creating or upserting rows into table. +""" input FavoriteMovie_Data { + """ + ✨ Generated from Field `FavoriteMovie`.`userId` of type `String!` + """ userId: String + """ + ✨ `_expr` server value variant of `userId` (✨ Generated from Field `FavoriteMovie`.`userId` of type `String!`) + """ userId_expr: String_Expr + """ + ✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!` + """ movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!`) + """ movieId_expr: UUID_Expr + """ + ✨ Generated from Field `FavoriteMovie`.`movie` of type `Movie!` + """ movie: Movie_Key + """ + ✨ Generated from Field `FavoriteMovie`.`user` of type `User!` + """ user: User_Key } +""" +✨ Generated filter input type for table 'FavoriteMovie'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input FavoriteMovie_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [FavoriteMovie_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: FavoriteMovie_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [FavoriteMovie_Filter!] + """ + ✨ Generated from Field `FavoriteMovie`.`userId` of type `String!` + """ userId: String_Filter + """ + ✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!` + """ movieId: UUID_Filter + """ + ✨ Generated from Field `FavoriteMovie`.`movie` of type `Movie!` + """ movie: Movie_Filter + """ + ✨ Generated from Field `FavoriteMovie`.`user` of type `User!` + """ user: User_Filter } +""" +✨ Generated first-row input type for table 'FavoriteMovie'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input FavoriteMovie_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [FavoriteMovie_Order!] + """ + Filters rows based on the specified conditions. + """ + where: FavoriteMovie_Filter +} +""" +✨ Generated key input type for table 'FavoriteMovie'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input FavoriteMovie_Key { + """ + ✨ Generated from Field `FavoriteMovie`.`userId` of type `String!` + """ + userId: String + """ + ✨ `_expr` server value variant of `userId` (✨ Generated from Field `FavoriteMovie`.`userId` of type `String!`) + """ + userId_expr: String_Expr + """ + ✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!` + """ + movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!`) + """ + movieId_expr: UUID_Expr +} +""" +✨ Generated list filter input type for table 'FavoriteMovie'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input FavoriteMovie_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: FavoriteMovie_Filter } +""" +✨ Generated order input type for table 'FavoriteMovie'. This input defines the sorting order of rows in query results based on one or more fields. +""" input FavoriteMovie_Order { + """ + ✨ Generated from Field `FavoriteMovie`.`userId` of type `String!` + """ userId: OrderDirection + """ + ✨ Generated from Field `FavoriteMovie`.`movieId` of type `UUID!` + """ movieId: OrderDirection + """ + ✨ Generated from Field `FavoriteMovie`.`movie` of type `Movie!` + """ movie: Movie_Order + """ + ✨ Generated from Field `FavoriteMovie`.`user` of type `User!` + """ user: User_Order } +""" +✨ Generated data input type for table 'Movie'. It includes all necessary fields for creating or upserting rows into table. +""" input Movie_Data { + """ + ✨ Generated from Field `Movie`.`id` of type `UUID!` + """ id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `Movie`.`id` of type `UUID!`) + """ id_expr: UUID_Expr + """ + ✨ Generated from Field `Movie`.`description` of type `String` + """ description: String + """ + ✨ `_expr` server value variant of `description` (✨ Generated from Field `Movie`.`description` of type `String`) + """ description_expr: String_Expr + """ + ✨ Generated from Field `Movie`.`genre` of type `String` + """ genre: String + """ + ✨ `_expr` server value variant of `genre` (✨ Generated from Field `Movie`.`genre` of type `String`) + """ genre_expr: String_Expr + """ + ✨ Generated from Field `Movie`.`imageUrl` of type `String!` + """ imageUrl: String + """ + ✨ `_expr` server value variant of `imageUrl` (✨ Generated from Field `Movie`.`imageUrl` of type `String!`) + """ imageUrl_expr: String_Expr + """ + ✨ Generated from Field `Movie`.`rating` of type `Float` + """ rating: Float + """ + ✨ Generated from Field `Movie`.`releaseYear` of type `Int` + """ releaseYear: Int + """ + ✨ Generated from Field `Movie`.`tags` of type `[String]` + """ tags: [String!] + """ + ✨ Generated from Field `Movie`.`title` of type `String!` + """ title: String + """ + ✨ `_expr` server value variant of `title` (✨ Generated from Field `Movie`.`title` of type `String!`) + """ title_expr: String_Expr } +""" +✨ Generated filter input type for table 'Movie'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input Movie_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [Movie_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: Movie_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [Movie_Filter!] + """ + ✨ Generated from Field `Movie`.`id` of type `UUID!` + """ id: UUID_Filter + """ + ✨ Generated from Field `Movie`.`description` of type `String` + """ description: String_Filter + """ + ✨ Generated from Field `Movie`.`genre` of type `String` + """ genre: String_Filter + """ + ✨ Generated from Field `Movie`.`imageUrl` of type `String!` + """ imageUrl: String_Filter + """ + ✨ Generated from Field `Movie`.`rating` of type `Float` + """ rating: Float_Filter + """ + ✨ Generated from Field `Movie`.`releaseYear` of type `Int` + """ releaseYear: Int_Filter + """ + ✨ Generated from Field `Movie`.`tags` of type `[String]` + """ tags: String_ListFilter + """ + ✨ Generated from Field `Movie`.`title` of type `String!` + """ title: String_Filter + """ + ✨ Generated from Field `Movie`.`favorite_movies_on_movie` of type `[FavoriteMovie!]!` + """ favorite_movies_on_movie: FavoriteMovie_ListFilter + """ + ✨ Generated from Field `Movie`.`movieActors_on_movie` of type `[MovieActor!]!` + """ movieActors_on_movie: MovieActor_ListFilter + """ + ✨ Generated from Field `Movie`.`movieMetadatas_on_movie` of type `[MovieMetadata!]!` + """ movieMetadatas_on_movie: MovieMetadata_ListFilter + """ + ✨ Generated from Field `Movie`.`reviews_on_movie` of type `[Review!]!` + """ reviews_on_movie: Review_ListFilter + """ + ✨ Generated from Field `Movie`.`actors_via_MovieActor` of type `[Actor!]!` + """ actors_via_MovieActor: Actor_ListFilter + """ + ✨ Generated from Field `Movie`.`users_via_FavoriteMovie` of type `[User!]!` + """ users_via_FavoriteMovie: User_ListFilter + """ + ✨ Generated from Field `Movie`.`users_via_Review` of type `[User!]!` + """ users_via_Review: User_ListFilter } +""" +✨ Generated first-row input type for table 'Movie'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input Movie_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [Movie_Order!] + """ + Filters rows based on the specified conditions. + """ + where: Movie_Filter +} +""" +✨ Generated key input type for table 'Movie'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input Movie_Key { + """ + ✨ Generated from Field `Movie`.`id` of type `UUID!` + """ + id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `Movie`.`id` of type `UUID!`) + """ + id_expr: UUID_Expr +} +""" +✨ Generated list filter input type for table 'Movie'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input Movie_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: Movie_Filter } +""" +✨ Generated order input type for table 'Movie'. This input defines the sorting order of rows in query results based on one or more fields. +""" input Movie_Order { + """ + ✨ Generated from Field `Movie`.`id` of type `UUID!` + """ id: OrderDirection + """ + ✨ Generated from Field `Movie`.`description` of type `String` + """ description: OrderDirection + """ + ✨ Generated from Field `Movie`.`genre` of type `String` + """ genre: OrderDirection + """ + ✨ Generated from Field `Movie`.`imageUrl` of type `String!` + """ imageUrl: OrderDirection + """ + ✨ Generated from Field `Movie`.`rating` of type `Float` + """ rating: OrderDirection + """ + ✨ Generated from Field `Movie`.`releaseYear` of type `Int` + """ releaseYear: OrderDirection + """ + ✨ Generated from Field `Movie`.`title` of type `String!` + """ title: OrderDirection } +""" +✨ Generated data input type for table 'MovieActor'. It includes all necessary fields for creating or upserting rows into table. +""" input MovieActor_Data { + """ + ✨ Generated from Field `MovieActor`.`movieId` of type `UUID!` + """ movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `MovieActor`.`movieId` of type `UUID!`) + """ movieId_expr: UUID_Expr + """ + ✨ Generated from Field `MovieActor`.`actorId` of type `UUID!` + """ actorId: UUID + """ + ✨ `_expr` server value variant of `actorId` (✨ Generated from Field `MovieActor`.`actorId` of type `UUID!`) + """ actorId_expr: UUID_Expr + """ + ✨ Generated from Field `MovieActor`.`actor` of type `Actor!` + """ actor: Actor_Key + """ + ✨ Generated from Field `MovieActor`.`movie` of type `Movie!` + """ movie: Movie_Key + """ + ✨ Generated from Field `MovieActor`.`role` of type `String!` + """ role: String + """ + ✨ `_expr` server value variant of `role` (✨ Generated from Field `MovieActor`.`role` of type `String!`) + """ role_expr: String_Expr } +""" +✨ Generated filter input type for table 'MovieActor'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input MovieActor_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [MovieActor_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: MovieActor_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [MovieActor_Filter!] + """ + ✨ Generated from Field `MovieActor`.`movieId` of type `UUID!` + """ movieId: UUID_Filter + """ + ✨ Generated from Field `MovieActor`.`actorId` of type `UUID!` + """ actorId: UUID_Filter + """ + ✨ Generated from Field `MovieActor`.`actor` of type `Actor!` + """ actor: Actor_Filter + """ + ✨ Generated from Field `MovieActor`.`movie` of type `Movie!` + """ movie: Movie_Filter + """ + ✨ Generated from Field `MovieActor`.`role` of type `String!` + """ role: String_Filter } +""" +✨ Generated first-row input type for table 'MovieActor'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input MovieActor_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [MovieActor_Order!] + """ + Filters rows based on the specified conditions. + """ + where: MovieActor_Filter +} +""" +✨ Generated key input type for table 'MovieActor'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input MovieActor_Key { + """ + ✨ Generated from Field `MovieActor`.`movieId` of type `UUID!` + """ + movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `MovieActor`.`movieId` of type `UUID!`) + """ + movieId_expr: UUID_Expr + """ + ✨ Generated from Field `MovieActor`.`actorId` of type `UUID!` + """ + actorId: UUID + """ + ✨ `_expr` server value variant of `actorId` (✨ Generated from Field `MovieActor`.`actorId` of type `UUID!`) + """ + actorId_expr: UUID_Expr +} +""" +✨ Generated list filter input type for table 'MovieActor'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input MovieActor_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: MovieActor_Filter } +""" +✨ Generated order input type for table 'MovieActor'. This input defines the sorting order of rows in query results based on one or more fields. +""" input MovieActor_Order { + """ + ✨ Generated from Field `MovieActor`.`movieId` of type `UUID!` + """ movieId: OrderDirection + """ + ✨ Generated from Field `MovieActor`.`actorId` of type `UUID!` + """ actorId: OrderDirection + """ + ✨ Generated from Field `MovieActor`.`actor` of type `Actor!` + """ actor: Actor_Order + """ + ✨ Generated from Field `MovieActor`.`movie` of type `Movie!` + """ movie: Movie_Order + """ + ✨ Generated from Field `MovieActor`.`role` of type `String!` + """ role: OrderDirection } +""" +✨ Generated data input type for table 'MovieMetadata'. It includes all necessary fields for creating or upserting rows into table. +""" input MovieMetadata_Data { + """ + ✨ Generated from Field `MovieMetadata`.`id` of type `UUID!` + """ id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `MovieMetadata`.`id` of type `UUID!`) + """ id_expr: UUID_Expr + """ + ✨ Generated from Field `MovieMetadata`.`movieId` of type `UUID!` + """ movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `MovieMetadata`.`movieId` of type `UUID!`) + """ movieId_expr: UUID_Expr + """ + ✨ Generated from Field `MovieMetadata`.`movie` of type `Movie!` + """ movie: Movie_Key + """ + ✨ Generated from Field `MovieMetadata`.`director` of type `String` + """ director: String + """ + ✨ `_expr` server value variant of `director` (✨ Generated from Field `MovieMetadata`.`director` of type `String`) + """ director_expr: String_Expr } +""" +✨ Generated filter input type for table 'MovieMetadata'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input MovieMetadata_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [MovieMetadata_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: MovieMetadata_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [MovieMetadata_Filter!] + """ + ✨ Generated from Field `MovieMetadata`.`id` of type `UUID!` + """ id: UUID_Filter + """ + ✨ Generated from Field `MovieMetadata`.`movieId` of type `UUID!` + """ movieId: UUID_Filter + """ + ✨ Generated from Field `MovieMetadata`.`movie` of type `Movie!` + """ movie: Movie_Filter + """ + ✨ Generated from Field `MovieMetadata`.`director` of type `String` + """ director: String_Filter } +""" +✨ Generated first-row input type for table 'MovieMetadata'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input MovieMetadata_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [MovieMetadata_Order!] + """ + Filters rows based on the specified conditions. + """ + where: MovieMetadata_Filter +} +""" +✨ Generated key input type for table 'MovieMetadata'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input MovieMetadata_Key { + """ + ✨ Generated from Field `MovieMetadata`.`id` of type `UUID!` + """ + id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `MovieMetadata`.`id` of type `UUID!`) + """ + id_expr: UUID_Expr +} +""" +✨ Generated list filter input type for table 'MovieMetadata'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input MovieMetadata_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: MovieMetadata_Filter } +""" +✨ Generated order input type for table 'MovieMetadata'. This input defines the sorting order of rows in query results based on one or more fields. +""" input MovieMetadata_Order { + """ + ✨ Generated from Field `MovieMetadata`.`id` of type `UUID!` + """ id: OrderDirection + """ + ✨ Generated from Field `MovieMetadata`.`movieId` of type `UUID!` + """ movieId: OrderDirection + """ + ✨ Generated from Field `MovieMetadata`.`movie` of type `Movie!` + """ movie: Movie_Order + """ + ✨ Generated from Field `MovieMetadata`.`director` of type `String` + """ director: OrderDirection } +""" +✨ Generated data input type for table 'Review'. It includes all necessary fields for creating or upserting rows into table. +""" input Review_Data { + """ + ✨ Generated from Field `Review`.`movieId` of type `UUID!` + """ movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `Review`.`movieId` of type `UUID!`) + """ movieId_expr: UUID_Expr + """ + ✨ Generated from Field `Review`.`userId` of type `String!` + """ userId: String + """ + ✨ `_expr` server value variant of `userId` (✨ Generated from Field `Review`.`userId` of type `String!`) + """ userId_expr: String_Expr + """ + ✨ Generated from Field `Review`.`movie` of type `Movie!` + """ movie: Movie_Key + """ + ✨ Generated from Field `Review`.`user` of type `User!` + """ user: User_Key + """ + ✨ Generated from Field `Review`.`id` of type `UUID!` + """ id: UUID + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `Review`.`id` of type `UUID!`) + """ id_expr: UUID_Expr + """ + ✨ Generated from Field `Review`.`rating` of type `Int` + """ rating: Int + """ + ✨ Generated from Field `Review`.`reviewDate` of type `Date!` + """ reviewDate: Date + """ + ✨ `_date` server value variant of `reviewDate` (✨ Generated from Field `Review`.`reviewDate` of type `Date!`) + """ reviewDate_date: Date_Relative + """ + ✨ `_expr` server value variant of `reviewDate` (✨ Generated from Field `Review`.`reviewDate` of type `Date!`) + """ reviewDate_expr: Date_Expr + """ + ✨ Generated from Field `Review`.`reviewText` of type `String` + """ reviewText: String + """ + ✨ `_expr` server value variant of `reviewText` (✨ Generated from Field `Review`.`reviewText` of type `String`) + """ reviewText_expr: String_Expr } +""" +✨ Generated filter input type for table 'Review'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input Review_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [Review_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: Review_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [Review_Filter!] + """ + ✨ Generated from Field `Review`.`movieId` of type `UUID!` + """ movieId: UUID_Filter + """ + ✨ Generated from Field `Review`.`userId` of type `String!` + """ userId: String_Filter + """ + ✨ Generated from Field `Review`.`movie` of type `Movie!` + """ movie: Movie_Filter + """ + ✨ Generated from Field `Review`.`user` of type `User!` + """ user: User_Filter + """ + ✨ Generated from Field `Review`.`id` of type `UUID!` + """ id: UUID_Filter + """ + ✨ Generated from Field `Review`.`rating` of type `Int` + """ rating: Int_Filter + """ + ✨ Generated from Field `Review`.`reviewDate` of type `Date!` + """ reviewDate: Date_Filter + """ + ✨ Generated from Field `Review`.`reviewText` of type `String` + """ reviewText: String_Filter } +""" +✨ Generated first-row input type for table 'Review'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input Review_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [Review_Order!] + """ + Filters rows based on the specified conditions. + """ + where: Review_Filter +} +""" +✨ Generated key input type for table 'Review'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input Review_Key { + """ + ✨ Generated from Field `Review`.`movieId` of type `UUID!` + """ + movieId: UUID + """ + ✨ `_expr` server value variant of `movieId` (✨ Generated from Field `Review`.`movieId` of type `UUID!`) + """ + movieId_expr: UUID_Expr + """ + ✨ Generated from Field `Review`.`userId` of type `String!` + """ + userId: String + """ + ✨ `_expr` server value variant of `userId` (✨ Generated from Field `Review`.`userId` of type `String!`) + """ + userId_expr: String_Expr +} +""" +✨ Generated list filter input type for table 'Review'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input Review_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: Review_Filter } +""" +✨ Generated order input type for table 'Review'. This input defines the sorting order of rows in query results based on one or more fields. +""" input Review_Order { + """ + ✨ Generated from Field `Review`.`movieId` of type `UUID!` + """ movieId: OrderDirection + """ + ✨ Generated from Field `Review`.`userId` of type `String!` + """ userId: OrderDirection + """ + ✨ Generated from Field `Review`.`movie` of type `Movie!` + """ movie: Movie_Order + """ + ✨ Generated from Field `Review`.`user` of type `User!` + """ user: User_Order + """ + ✨ Generated from Field `Review`.`id` of type `UUID!` + """ id: OrderDirection + """ + ✨ Generated from Field `Review`.`rating` of type `Int` + """ rating: OrderDirection + """ + ✨ Generated from Field `Review`.`reviewDate` of type `Date!` + """ reviewDate: OrderDirection + """ + ✨ Generated from Field `Review`.`reviewText` of type `String` + """ reviewText: OrderDirection } +""" +✨ Generated data input type for table 'User'. It includes all necessary fields for creating or upserting rows into table. +""" input User_Data { + """ + ✨ Generated from Field `User`.`id` of type `String!` + """ id: String + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `User`.`id` of type `String!`) + """ id_expr: String_Expr + """ + ✨ Generated from Field `User`.`username` of type `String!` + """ username: String + """ + ✨ `_expr` server value variant of `username` (✨ Generated from Field `User`.`username` of type `String!`) + """ username_expr: String_Expr } +""" +✨ Generated filter input type for table 'User'. This input allows filtering objects using various conditions. Use `_or`, `_and`, and `_not` to compose complex filters. +""" input User_Filter { + """ + Apply multiple filter conditions using `AND` logic. + """ _and: [User_Filter!] + """ + Negate the result of the provided filter condition. + """ _not: User_Filter + """ + Apply multiple filter conditions using `OR` logic. + """ _or: [User_Filter!] + """ + ✨ Generated from Field `User`.`id` of type `String!` + """ id: String_Filter + """ + ✨ Generated from Field `User`.`username` of type `String!` + """ username: String_Filter + """ + ✨ Generated from Field `User`.`favorite_movies_on_user` of type `[FavoriteMovie!]!` + """ favorite_movies_on_user: FavoriteMovie_ListFilter + """ + ✨ Generated from Field `User`.`reviews_on_user` of type `[Review!]!` + """ reviews_on_user: Review_ListFilter + """ + ✨ Generated from Field `User`.`movies_via_FavoriteMovie` of type `[Movie!]!` + """ movies_via_FavoriteMovie: Movie_ListFilter + """ + ✨ Generated from Field `User`.`movies_via_Review` of type `[Movie!]!` + """ movies_via_Review: Movie_ListFilter } +""" +✨ Generated first-row input type for table 'User'. This input selects the first row matching the filter criteria, ordered according to the specified conditions. +""" +input User_FirstRow { + """ + Order the result by the specified fields. + """ + orderBy: [User_Order!] + """ + Filters rows based on the specified conditions. + """ + where: User_Filter +} +""" +✨ Generated key input type for table 'User'. It represents the primary key fields used to uniquely identify a row in the table. +""" +input User_Key { + """ + ✨ Generated from Field `User`.`id` of type `String!` + """ + id: String + """ + ✨ `_expr` server value variant of `id` (✨ Generated from Field `User`.`id` of type `String!`) + """ + id_expr: String_Expr +} +""" +✨ Generated list filter input type for table 'User'. This input applies filtering logic based on the count or existence of related objects that matches certain criteria. +""" input User_ListFilter { + """ + The desired number of objects that match the condition (defaults to at least one). + """ count: Int_Filter = {gt:0} + """ + Condition of the related objects to filter for. + """ exist: User_Filter } +""" +✨ Generated order input type for table 'User'. This input defines the sorting order of rows in query results based on one or more fields. +""" input User_Order { + """ + ✨ Generated from Field `User`.`id` of type `String!` + """ id: OrderDirection + """ + ✨ Generated from Field `User`.`username` of type `String!` + """ username: OrderDirection } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql index 5594f01..1f60122 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql @@ -1,226 +1,703 @@ extend type Mutation { """ - Insert a single Actor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - actor_insert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: INSERT_SINGLE) - """ - Insert a single FavoriteMovie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - favorite_movie_insert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_SINGLE) - """ - Insert a single Movie into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movie_insert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: INSERT_SINGLE) - """ - Insert a single MovieActor into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movieActor_insert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: INSERT_SINGLE) - """ - Insert a single MovieMetadata into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movieMetadata_insert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: INSERT_SINGLE) - """ - Insert a single Review into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - review_insert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: INSERT_SINGLE) - """ - Insert a single User into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - user_insert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: INSERT_SINGLE) - """ - Insert Actor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - actor_insertMany(data: [Actor_Data!]!): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: INSERT_MULTIPLE) - """ - Insert FavoriteMovie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - favorite_movie_insertMany(data: [FavoriteMovie_Data!]!): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_MULTIPLE) - """ - Insert Movie entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movie_insertMany(data: [Movie_Data!]!): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: INSERT_MULTIPLE) - """ - Insert MovieActor entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movieActor_insertMany(data: [MovieActor_Data!]!): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: INSERT_MULTIPLE) - """ - Insert MovieMetadata entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - movieMetadata_insertMany(data: [MovieMetadata_Data!]!): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: INSERT_MULTIPLE) - """ - Insert Review entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - review_insertMany(data: [Review_Data!]!): [Review_Key!]! @fdc_generated(from: "Review", purpose: INSERT_MULTIPLE) - """ - Insert User entries into the table. Columns not specified in `data` will receive defaults (e.g. `null`). - """ - user_insertMany(data: [User_Data!]!): [User_Key!]! @fdc_generated(from: "User", purpose: INSERT_MULTIPLE) - """ - Insert or update a single Actor into the table, based on the primary key. Returns the key of the newly inserted Actor. - """ - actor_upsert(data: Actor_Data!): Actor_Key! @fdc_generated(from: "Actor", purpose: UPSERT_SINGLE) - """ - Insert or update a single FavoriteMovie into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. - """ - favorite_movie_upsert(data: FavoriteMovie_Data!): FavoriteMovie_Key! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_SINGLE) - """ - Insert or update a single Movie into the table, based on the primary key. Returns the key of the newly inserted Movie. - """ - movie_upsert(data: Movie_Data!): Movie_Key! @fdc_generated(from: "Movie", purpose: UPSERT_SINGLE) - """ - Insert or update a single MovieActor into the table, based on the primary key. Returns the key of the newly inserted MovieActor. - """ - movieActor_upsert(data: MovieActor_Data!): MovieActor_Key! @fdc_generated(from: "MovieActor", purpose: UPSERT_SINGLE) - """ - Insert or update a single MovieMetadata into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. - """ - movieMetadata_upsert(data: MovieMetadata_Data!): MovieMetadata_Key! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_SINGLE) - """ - Insert or update a single Review into the table, based on the primary key. Returns the key of the newly inserted Review. - """ - review_upsert(data: Review_Data!): Review_Key! @fdc_generated(from: "Review", purpose: UPSERT_SINGLE) - """ - Insert or update a single User into the table, based on the primary key. Returns the key of the newly inserted User. - """ - user_upsert(data: User_Data!): User_Key! @fdc_generated(from: "User", purpose: UPSERT_SINGLE) - """ - Insert or update Actor entries into the table, based on the primary key. Returns the key of the newly inserted Actor. - """ - actor_upsertMany(data: [Actor_Data!]): [Actor_Key!]! @fdc_generated(from: "Actor", purpose: UPSERT_MULTIPLE) - """ - Insert or update FavoriteMovie entries into the table, based on the primary key. Returns the key of the newly inserted FavoriteMovie. - """ - favorite_movie_upsertMany(data: [FavoriteMovie_Data!]): [FavoriteMovie_Key!]! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_MULTIPLE) - """ - Insert or update Movie entries into the table, based on the primary key. Returns the key of the newly inserted Movie. - """ - movie_upsertMany(data: [Movie_Data!]): [Movie_Key!]! @fdc_generated(from: "Movie", purpose: UPSERT_MULTIPLE) - """ - Insert or update MovieActor entries into the table, based on the primary key. Returns the key of the newly inserted MovieActor. - """ - movieActor_upsertMany(data: [MovieActor_Data!]): [MovieActor_Key!]! @fdc_generated(from: "MovieActor", purpose: UPSERT_MULTIPLE) - """ - Insert or update MovieMetadata entries into the table, based on the primary key. Returns the key of the newly inserted MovieMetadata. - """ - movieMetadata_upsertMany(data: [MovieMetadata_Data!]): [MovieMetadata_Key!]! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_MULTIPLE) - """ - Insert or update Review entries into the table, based on the primary key. Returns the key of the newly inserted Review. - """ - review_upsertMany(data: [Review_Data!]): [Review_Key!]! @fdc_generated(from: "Review", purpose: UPSERT_MULTIPLE) - """ - Insert or update User entries into the table, based on the primary key. Returns the key of the newly inserted User. - """ - user_upsertMany(data: [User_Data!]): [User_Key!]! @fdc_generated(from: "User", purpose: UPSERT_MULTIPLE) - """ - Update a single Actor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - actor_update(id: UUID, key: Actor_Key, data: Actor_Data!): Actor_Key @fdc_generated(from: "Actor", purpose: UPDATE_SINGLE) - """ - Update a single FavoriteMovie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - favorite_movie_update(key: FavoriteMovie_Key, data: FavoriteMovie_Data!): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_SINGLE) - """ - Update a single Movie based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - movie_update(id: UUID, key: Movie_Key, data: Movie_Data!): Movie_Key @fdc_generated(from: "Movie", purpose: UPDATE_SINGLE) - """ - Update a single MovieActor based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - movieActor_update(key: MovieActor_Key, data: MovieActor_Data!): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: UPDATE_SINGLE) - """ - Update a single MovieMetadata based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - movieMetadata_update(id: UUID, key: MovieMetadata_Key, data: MovieMetadata_Data!): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: UPDATE_SINGLE) - """ - Update a single Review based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - review_update(key: Review_Key, data: Review_Data!): Review_Key @fdc_generated(from: "Review", purpose: UPDATE_SINGLE) - """ - Update a single User based on `id` or `key`, setting columns specified in `data`. Returns `null` if not found. - """ - user_update(id: String, id_expr: String_Expr, key: User_Key, data: User_Data!): User_Key @fdc_generated(from: "User", purpose: UPDATE_SINGLE) - """ - Update Actor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - actor_updateMany(where: Actor_Filter, all: Boolean = false, data: Actor_Data!): Int! @fdc_generated(from: "Actor", purpose: UPDATE_MULTIPLE) - """ - Update FavoriteMovie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - favorite_movie_updateMany(where: FavoriteMovie_Filter, all: Boolean = false, data: FavoriteMovie_Data!): Int! @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_MULTIPLE) - """ - Update Movie entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - movie_updateMany(where: Movie_Filter, all: Boolean = false, data: Movie_Data!): Int! @fdc_generated(from: "Movie", purpose: UPDATE_MULTIPLE) - """ - Update MovieActor entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - movieActor_updateMany(where: MovieActor_Filter, all: Boolean = false, data: MovieActor_Data!): Int! @fdc_generated(from: "MovieActor", purpose: UPDATE_MULTIPLE) - """ - Update MovieMetadata entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - movieMetadata_updateMany(where: MovieMetadata_Filter, all: Boolean = false, data: MovieMetadata_Data!): Int! @fdc_generated(from: "MovieMetadata", purpose: UPDATE_MULTIPLE) - """ - Update Review entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - review_updateMany(where: Review_Filter, all: Boolean = false, data: Review_Data!): Int! @fdc_generated(from: "Review", purpose: UPDATE_MULTIPLE) - """ - Update User entries matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. - """ - user_updateMany(where: User_Filter, all: Boolean = false, data: User_Data!): Int! @fdc_generated(from: "User", purpose: UPDATE_MULTIPLE) - """ - Delete a single Actor based on `id` or `key` and return its key (or `null` if not found). - """ - actor_delete(id: UUID, key: Actor_Key): Actor_Key @fdc_generated(from: "Actor", purpose: DELETE_SINGLE) - """ - Delete a single FavoriteMovie based on `id` or `key` and return its key (or `null` if not found). - """ - favorite_movie_delete(key: FavoriteMovie_Key): FavoriteMovie_Key @fdc_generated(from: "FavoriteMovie", purpose: DELETE_SINGLE) - """ - Delete a single Movie based on `id` or `key` and return its key (or `null` if not found). - """ - movie_delete(id: UUID, key: Movie_Key): Movie_Key @fdc_generated(from: "Movie", purpose: DELETE_SINGLE) - """ - Delete a single MovieActor based on `id` or `key` and return its key (or `null` if not found). - """ - movieActor_delete(key: MovieActor_Key): MovieActor_Key @fdc_generated(from: "MovieActor", purpose: DELETE_SINGLE) - """ - Delete a single MovieMetadata based on `id` or `key` and return its key (or `null` if not found). - """ - movieMetadata_delete(id: UUID, key: MovieMetadata_Key): MovieMetadata_Key @fdc_generated(from: "MovieMetadata", purpose: DELETE_SINGLE) - """ - Delete a single Review based on `id` or `key` and return its key (or `null` if not found). - """ - review_delete(key: Review_Key): Review_Key @fdc_generated(from: "Review", purpose: DELETE_SINGLE) - """ - Delete a single User based on `id` or `key` and return its key (or `null` if not found). - """ - user_delete(id: String, id_expr: String_Expr, key: User_Key): User_Key @fdc_generated(from: "User", purpose: DELETE_SINGLE) - """ - Delete Actor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - actor_deleteMany(where: Actor_Filter, all: Boolean = false): Int! @fdc_generated(from: "Actor", purpose: DELETE_MULTIPLE) - """ - Delete FavoriteMovie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - favorite_movie_deleteMany(where: FavoriteMovie_Filter, all: Boolean = false): Int! @fdc_generated(from: "FavoriteMovie", purpose: DELETE_MULTIPLE) - """ - Delete Movie entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - movie_deleteMany(where: Movie_Filter, all: Boolean = false): Int! @fdc_generated(from: "Movie", purpose: DELETE_MULTIPLE) - """ - Delete MovieActor entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - movieActor_deleteMany(where: MovieActor_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieActor", purpose: DELETE_MULTIPLE) - """ - Delete MovieMetadata entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - movieMetadata_deleteMany(where: MovieMetadata_Filter, all: Boolean = false): Int! @fdc_generated(from: "MovieMetadata", purpose: DELETE_MULTIPLE) - """ - Delete Review entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - review_deleteMany(where: Review_Filter, all: Boolean = false): Int! @fdc_generated(from: "Review", purpose: DELETE_MULTIPLE) - """ - Delete User entries matching `where` conditions (or `all`, if true). Returns the number of rows deleted. - """ - user_deleteMany(where: User_Filter, all: Boolean = false): Int! @fdc_generated(from: "User", purpose: DELETE_MULTIPLE) + ✨ Insert a single `Actor` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insert( + """ + Data object to insert into the table. + """ + data: Actor_Data! + ): Actor_KeyOutput! @fdc_generated(from: "Actor", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `FavoriteMovie` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insert( + """ + Data object to insert into the table. + """ + data: FavoriteMovie_Data! + ): FavoriteMovie_KeyOutput! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `Movie` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insert( + """ + Data object to insert into the table. + """ + data: Movie_Data! + ): Movie_KeyOutput! @fdc_generated(from: "Movie", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `MovieActor` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insert( + """ + Data object to insert into the table. + """ + data: MovieActor_Data! + ): MovieActor_KeyOutput! @fdc_generated(from: "MovieActor", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `MovieMetadata` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insert( + """ + Data object to insert into the table. + """ + data: MovieMetadata_Data! + ): MovieMetadata_KeyOutput! @fdc_generated(from: "MovieMetadata", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `Review` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insert( + """ + Data object to insert into the table. + """ + data: Review_Data! + ): Review_KeyOutput! @fdc_generated(from: "Review", purpose: INSERT_SINGLE) + """ + ✨ Insert a single `User` into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insert( + """ + Data object to insert into the table. + """ + data: User_Data! + ): User_KeyOutput! @fdc_generated(from: "User", purpose: INSERT_SINGLE) + """ + ✨ Insert `Actor` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + actor_insertMany( + """ + List of data objects to insert into the table. + """ + data: [Actor_Data!]! + ): [Actor_KeyOutput!]! @fdc_generated(from: "Actor", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `FavoriteMovie` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + favorite_movie_insertMany( + """ + List of data objects to insert into the table. + """ + data: [FavoriteMovie_Data!]! + ): [FavoriteMovie_KeyOutput!]! @fdc_generated(from: "FavoriteMovie", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `Movie` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movie_insertMany( + """ + List of data objects to insert into the table. + """ + data: [Movie_Data!]! + ): [Movie_KeyOutput!]! @fdc_generated(from: "Movie", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `MovieActor` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieActor_insertMany( + """ + List of data objects to insert into the table. + """ + data: [MovieActor_Data!]! + ): [MovieActor_KeyOutput!]! @fdc_generated(from: "MovieActor", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `MovieMetadata` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + movieMetadata_insertMany( + """ + List of data objects to insert into the table. + """ + data: [MovieMetadata_Data!]! + ): [MovieMetadata_KeyOutput!]! @fdc_generated(from: "MovieMetadata", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `Review` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + review_insertMany( + """ + List of data objects to insert into the table. + """ + data: [Review_Data!]! + ): [Review_KeyOutput!]! @fdc_generated(from: "Review", purpose: INSERT_MULTIPLE) + """ + ✨ Insert `User` objects into the table. Columns not specified in `data` will receive defaults (e.g. `null`). + """ + user_insertMany( + """ + List of data objects to insert into the table. + """ + data: [User_Data!]! + ): [User_KeyOutput!]! @fdc_generated(from: "User", purpose: INSERT_MULTIPLE) + """ + ✨ Insert or update a single `Actor` into the table, based on the primary key. Returns the key of the newly inserted `Actor`. + """ + actor_upsert( + """ + Data object to insert or update if it already exists. + """ + data: Actor_Data! + ): Actor_KeyOutput! @fdc_generated(from: "Actor", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `FavoriteMovie` into the table, based on the primary key. Returns the key of the newly inserted `FavoriteMovie`. + """ + favorite_movie_upsert( + """ + Data object to insert or update if it already exists. + """ + data: FavoriteMovie_Data! + ): FavoriteMovie_KeyOutput! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `Movie` into the table, based on the primary key. Returns the key of the newly inserted `Movie`. + """ + movie_upsert( + """ + Data object to insert or update if it already exists. + """ + data: Movie_Data! + ): Movie_KeyOutput! @fdc_generated(from: "Movie", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `MovieActor` into the table, based on the primary key. Returns the key of the newly inserted `MovieActor`. + """ + movieActor_upsert( + """ + Data object to insert or update if it already exists. + """ + data: MovieActor_Data! + ): MovieActor_KeyOutput! @fdc_generated(from: "MovieActor", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `MovieMetadata` into the table, based on the primary key. Returns the key of the newly inserted `MovieMetadata`. + """ + movieMetadata_upsert( + """ + Data object to insert or update if it already exists. + """ + data: MovieMetadata_Data! + ): MovieMetadata_KeyOutput! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `Review` into the table, based on the primary key. Returns the key of the newly inserted `Review`. + """ + review_upsert( + """ + Data object to insert or update if it already exists. + """ + data: Review_Data! + ): Review_KeyOutput! @fdc_generated(from: "Review", purpose: UPSERT_SINGLE) + """ + ✨ Insert or update a single `User` into the table, based on the primary key. Returns the key of the newly inserted `User`. + """ + user_upsert( + """ + Data object to insert or update if it already exists. + """ + data: User_Data! + ): User_KeyOutput! @fdc_generated(from: "User", purpose: UPSERT_SINGLE) + """ + ✨ Update a single `Actor` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + actor_update( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Actor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Actor_FirstRow + + """ + Data object containing fields to be updated. + """ + data: Actor_Data! + ): Actor_KeyOutput @fdc_generated(from: "Actor", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `FavoriteMovie` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + favorite_movie_update( + """ + The key used to identify the object. + """ + key: FavoriteMovie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: FavoriteMovie_FirstRow + + """ + Data object containing fields to be updated. + """ + data: FavoriteMovie_Data! + ): FavoriteMovie_KeyOutput @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `Movie` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + movie_update( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Movie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Movie_FirstRow + + """ + Data object containing fields to be updated. + """ + data: Movie_Data! + ): Movie_KeyOutput @fdc_generated(from: "Movie", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `MovieActor` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + movieActor_update( + """ + The key used to identify the object. + """ + key: MovieActor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieActor_FirstRow + + """ + Data object containing fields to be updated. + """ + data: MovieActor_Data! + ): MovieActor_KeyOutput @fdc_generated(from: "MovieActor", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `MovieMetadata` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + movieMetadata_update( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: MovieMetadata_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieMetadata_FirstRow + + """ + Data object containing fields to be updated. + """ + data: MovieMetadata_Data! + ): MovieMetadata_KeyOutput @fdc_generated(from: "MovieMetadata", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `Review` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + review_update( + """ + The key used to identify the object. + """ + key: Review_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Review_FirstRow + + """ + Data object containing fields to be updated. + """ + data: Review_Data! + ): Review_KeyOutput @fdc_generated(from: "Review", purpose: UPDATE_SINGLE) + """ + ✨ Update a single `User` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. + """ + user_update( + """ + The unique ID of the object. + """ + id: String + + """ + ✨ `_expr` server value variant of `id` (The unique ID of the object.) + """ + id_expr: String_Expr + + """ + The key used to identify the object. + """ + key: User_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: User_FirstRow + + """ + Data object containing fields to be updated. + """ + data: User_Data! + ): User_KeyOutput @fdc_generated(from: "User", purpose: UPDATE_SINGLE) + """ + ✨ Update `Actor` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + actor_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: Actor_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: Actor_Data! + ): Int! @fdc_generated(from: "Actor", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `FavoriteMovie` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + favorite_movie_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: FavoriteMovie_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: FavoriteMovie_Data! + ): Int! @fdc_generated(from: "FavoriteMovie", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `Movie` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movie_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: Movie_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: Movie_Data! + ): Int! @fdc_generated(from: "Movie", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `MovieActor` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieActor_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: MovieActor_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: MovieActor_Data! + ): Int! @fdc_generated(from: "MovieActor", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `MovieMetadata` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + movieMetadata_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: MovieMetadata_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: MovieMetadata_Data! + ): Int! @fdc_generated(from: "MovieMetadata", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `Review` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + review_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: Review_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: Review_Data! + ): Int! @fdc_generated(from: "Review", purpose: UPDATE_MULTIPLE) + """ + ✨ Update `User` objects matching `where` conditions (or `all`, if true) according to `data`. Returns the number of rows updated. + """ + user_updateMany( + """ + Filter condition to specify which rows to update. + """ + where: User_Filter + + """ + Set to true to update all rows. + """ + all: Boolean = false + + """ + Data object containing fields to update. + """ + data: User_Data! + ): Int! @fdc_generated(from: "User", purpose: UPDATE_MULTIPLE) + """ + ✨ Delete a single `Actor` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + actor_delete( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Actor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Actor_FirstRow + ): Actor_KeyOutput @fdc_generated(from: "Actor", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `FavoriteMovie` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + favorite_movie_delete( + """ + The key used to identify the object. + """ + key: FavoriteMovie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: FavoriteMovie_FirstRow + ): FavoriteMovie_KeyOutput @fdc_generated(from: "FavoriteMovie", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `Movie` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + movie_delete( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Movie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Movie_FirstRow + ): Movie_KeyOutput @fdc_generated(from: "Movie", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `MovieActor` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + movieActor_delete( + """ + The key used to identify the object. + """ + key: MovieActor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieActor_FirstRow + ): MovieActor_KeyOutput @fdc_generated(from: "MovieActor", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `MovieMetadata` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + movieMetadata_delete( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: MovieMetadata_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieMetadata_FirstRow + ): MovieMetadata_KeyOutput @fdc_generated(from: "MovieMetadata", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `Review` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + review_delete( + """ + The key used to identify the object. + """ + key: Review_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Review_FirstRow + ): Review_KeyOutput @fdc_generated(from: "Review", purpose: DELETE_SINGLE) + """ + ✨ Delete a single `User` based on `id`, `key` or `first` and return its key (or `null` if not found). + """ + user_delete( + """ + The unique ID of the object. + """ + id: String + + """ + ✨ `_expr` server value variant of `id` (The unique ID of the object.) + """ + id_expr: String_Expr + + """ + The key used to identify the object. + """ + key: User_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: User_FirstRow + ): User_KeyOutput @fdc_generated(from: "User", purpose: DELETE_SINGLE) + """ + ✨ Delete `Actor` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + actor_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: Actor_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "Actor", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `FavoriteMovie` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + favorite_movie_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: FavoriteMovie_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "FavoriteMovie", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `Movie` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movie_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: Movie_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "Movie", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `MovieActor` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieActor_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: MovieActor_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "MovieActor", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `MovieMetadata` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + movieMetadata_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: MovieMetadata_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "MovieMetadata", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `Review` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + review_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: Review_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "Review", purpose: DELETE_MULTIPLE) + """ + ✨ Delete `User` objects matching `where` conditions (or `all`, if true). Returns the number of rows deleted. + """ + user_deleteMany( + """ + Filter condition to specify which rows to delete. + """ + where: User_Filter + + """ + Set to true to delete all rows. + """ + all: Boolean = false + ): Int! @fdc_generated(from: "User", purpose: DELETE_MULTIPLE) } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql index d4dcfca..cbbc257 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/query.gql @@ -1,58 +1,293 @@ extend type Query { """ - Look up a single Actor based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `Actor` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - actor(id: UUID, key: Actor_Key): Actor @fdc_generated(from: "Actor", purpose: QUERY_SINGLE) + actor( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Actor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Actor_FirstRow + ): Actor @fdc_generated(from: "Actor", purpose: QUERY_SINGLE) """ - Look up a single FavoriteMovie based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `FavoriteMovie` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - favorite_movie(key: FavoriteMovie_Key): FavoriteMovie @fdc_generated(from: "FavoriteMovie", purpose: QUERY_SINGLE) + favorite_movie( + """ + The key used to identify the object. + """ + key: FavoriteMovie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: FavoriteMovie_FirstRow + ): FavoriteMovie @fdc_generated(from: "FavoriteMovie", purpose: QUERY_SINGLE) """ - Look up a single Movie based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `Movie` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - movie(id: UUID, key: Movie_Key): Movie @fdc_generated(from: "Movie", purpose: QUERY_SINGLE) + movie( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: Movie_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Movie_FirstRow + ): Movie @fdc_generated(from: "Movie", purpose: QUERY_SINGLE) """ - Look up a single MovieActor based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `MovieActor` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - movieActor(key: MovieActor_Key): MovieActor @fdc_generated(from: "MovieActor", purpose: QUERY_SINGLE) + movieActor( + """ + The key used to identify the object. + """ + key: MovieActor_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieActor_FirstRow + ): MovieActor @fdc_generated(from: "MovieActor", purpose: QUERY_SINGLE) """ - Look up a single MovieMetadata based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `MovieMetadata` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - movieMetadata(id: UUID, key: MovieMetadata_Key): MovieMetadata @fdc_generated(from: "MovieMetadata", purpose: QUERY_SINGLE) + movieMetadata( + """ + The unique ID of the object. + """ + id: UUID + + """ + The key used to identify the object. + """ + key: MovieMetadata_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: MovieMetadata_FirstRow + ): MovieMetadata @fdc_generated(from: "MovieMetadata", purpose: QUERY_SINGLE) """ - Look up a single Review based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `Review` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - review(key: Review_Key): Review @fdc_generated(from: "Review", purpose: QUERY_SINGLE) + review( + """ + The key used to identify the object. + """ + key: Review_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: Review_FirstRow + ): Review @fdc_generated(from: "Review", purpose: QUERY_SINGLE) """ - Look up a single User based on `id` or `key` and return selected fields (or `null` if not found). + ✨ Look up a single `User` based on `id`, `key` or `first` and return selected fields (or `null` if not found). """ - user(id: String, id_expr: String_Expr, key: User_Key): User @fdc_generated(from: "User", purpose: QUERY_SINGLE) + user( + """ + The unique ID of the object. + """ + id: String + + """ + ✨ `_expr` server value variant of `id` (The unique ID of the object.) + """ + id_expr: String_Expr + + """ + The key used to identify the object. + """ + key: User_Key + + """ + Fetch the first row based on the filters and ordering. + """ + first: User_FirstRow + ): User @fdc_generated(from: "User", purpose: QUERY_SINGLE) """ - List Actor entries in the table, optionally filtered by `where` conditions. + ✨ List `Actor` objects in the table, optionally filtered by `where` conditions. """ - actors(where: Actor_Filter, orderBy: [Actor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "Actor", purpose: QUERY_MULTIPLE) + actors( + """ + Filter condition to narrow down the query results. + """ + where: Actor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Actor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Actor!]! @fdc_generated(from: "Actor", purpose: QUERY_MULTIPLE) """ - List FavoriteMovie entries in the table, optionally filtered by `where` conditions. + ✨ List `FavoriteMovie` objects in the table, optionally filtered by `where` conditions. """ - favorite_movies(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE) + favorite_movies( + """ + Filter condition to narrow down the query results. + """ + where: FavoriteMovie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [FavoriteMovie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE) """ - List Movie entries in the table, optionally filtered by `where` conditions. + ✨ List `Movie` objects in the table, optionally filtered by `where` conditions. """ - movies(where: Movie_Filter, orderBy: [Movie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Movie", purpose: QUERY_MULTIPLE) + movies( + """ + Filter condition to narrow down the query results. + """ + where: Movie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Movie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Movie!]! @fdc_generated(from: "Movie", purpose: QUERY_MULTIPLE) """ - List MovieActor entries in the table, optionally filtered by `where` conditions. + ✨ List `MovieActor` objects in the table, optionally filtered by `where` conditions. """ - movieActors(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE) + movieActors( + """ + Filter condition to narrow down the query results. + """ + where: MovieActor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieActor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [MovieActor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE) """ - List MovieMetadata entries in the table, optionally filtered by `where` conditions. + ✨ List `MovieMetadata` objects in the table, optionally filtered by `where` conditions. """ - movieMetadatas(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata", purpose: QUERY_MULTIPLE) + movieMetadatas( + """ + Filter condition to narrow down the query results. + """ + where: MovieMetadata_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieMetadata_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata", purpose: QUERY_MULTIPLE) """ - List Review entries in the table, optionally filtered by `where` conditions. + ✨ List `Review` objects in the table, optionally filtered by `where` conditions. """ - reviews(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE) + reviews( + """ + Filter condition to narrow down the query results. + """ + where: Review_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Review_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Review!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE) """ - List User entries in the table, optionally filtered by `where` conditions. + ✨ List `User` objects in the table, optionally filtered by `where` conditions. """ - users(where: User_Filter, orderBy: [User_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "User", purpose: QUERY_MULTIPLE) + users( + """ + Filter condition to narrow down the query results. + """ + where: User_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [User_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [User!]! @fdc_generated(from: "User", purpose: QUERY_MULTIPLE) } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql index a739e10..5b1d779 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/relation.gql @@ -1,58 +1,318 @@ extend type Actor { """ - ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.actor` equals this object). + ✨ List `MovieActor` objects in a one-to-many relationship (where `MovieActor`.`actor` is this object). """ - movieActors_on_actor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + movieActors_on_actor( + """ + Filter condition to narrow down the query results. + """ + where: MovieActor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieActor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [MovieActor!]! @fdc_generated(from: "MovieActor.actor", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List related Movie entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `actor` == this and `movie` == that). + ✨ List `Movie` objects using `MovieActor` as the join table (a `MovieActor` object exists where its `actor` is this and its `movie` is that). """ - movies_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + movies_via_MovieActor( + """ + Filter condition to narrow down the query results. + """ + where: MovieActor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieActor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Movie!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) } extend type Movie { """ - ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.movie` equals this object). + ✨ List `FavoriteMovie` objects in a one-to-many relationship (where `FavoriteMovie`.`movie` is this object). """ - favorite_movies_on_movie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + favorite_movies_on_movie( + """ + Filter condition to narrow down the query results. + """ + where: FavoriteMovie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [FavoriteMovie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List MovieActor entries in a one-to-many relationship with this object (i.e. where `MovieActor.movie` equals this object). + ✨ List `MovieActor` objects in a one-to-many relationship (where `MovieActor`.`movie` is this object). """ - movieActors_on_movie(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [MovieActor!]! @fdc_generated(from: "MovieActor.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + movieActors_on_movie( + """ + Filter condition to narrow down the query results. + """ + where: MovieActor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieActor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [MovieActor!]! @fdc_generated(from: "MovieActor.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List MovieMetadata entries in a one-to-many relationship with this object (i.e. where `MovieMetadata.movie` equals this object). + ✨ List `MovieMetadata` objects in a one-to-many relationship (where `MovieMetadata`.`movie` is this object). """ - movieMetadatas_on_movie(where: MovieMetadata_Filter, orderBy: [MovieMetadata_Order!], offset: Int, limit: Int = 100): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + movieMetadatas_on_movie( + """ + Filter condition to narrow down the query results. + """ + where: MovieMetadata_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieMetadata_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [MovieMetadata!]! @fdc_generated(from: "MovieMetadata.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.movie` equals this object). + ✨ List `Review` objects in a one-to-many relationship (where `Review`.`movie` is this object). """ - reviews_on_movie(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + reviews_on_movie( + """ + Filter condition to narrow down the query results. + """ + where: Review_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Review_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Review!]! @fdc_generated(from: "Review.movie", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List related Actor entries using MovieActor as a join table (i.e. where an entry of MovieActor exists whose `movie` == this and `actor` == that). + ✨ List `Actor` objects using `MovieActor` as the join table (a `MovieActor` object exists where its `movie` is this and its `actor` is that). """ - actors_via_MovieActor(where: MovieActor_Filter, orderBy: [MovieActor_Order!], offset: Int, limit: Int = 100): [Actor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + actors_via_MovieActor( + """ + Filter condition to narrow down the query results. + """ + where: MovieActor_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [MovieActor_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Actor!]! @fdc_generated(from: "MovieActor", purpose: QUERY_MULTIPLE_MANY_TO_MANY) """ - ✨ List related User entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `movie` == this and `user` == that). + ✨ List `User` objects using `FavoriteMovie` as the join table (a `FavoriteMovie` object exists where its `movie` is this and its `user` is that). """ - users_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + users_via_FavoriteMovie( + """ + Filter condition to narrow down the query results. + """ + where: FavoriteMovie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [FavoriteMovie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [User!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) """ - ✨ List related User entries using Review as a join table (i.e. where an entry of Review exists whose `movie` == this and `user` == that). + ✨ List `User` objects using `Review` as the join table (a `Review` object exists where its `movie` is this and its `user` is that). """ - users_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [User!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + users_via_Review( + """ + Filter condition to narrow down the query results. + """ + where: Review_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Review_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [User!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) } extend type User { """ - ✨ List FavoriteMovie entries in a one-to-many relationship with this object (i.e. where `FavoriteMovie.user` equals this object). + ✨ List `FavoriteMovie` objects in a one-to-many relationship (where `FavoriteMovie`.`user` is this object). """ - favorite_movies_on_user(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + favorite_movies_on_user( + """ + Filter condition to narrow down the query results. + """ + where: FavoriteMovie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [FavoriteMovie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [FavoriteMovie!]! @fdc_generated(from: "FavoriteMovie.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List Review entries in a one-to-many relationship with this object (i.e. where `Review.user` equals this object). + ✨ List `Review` objects in a one-to-many relationship (where `Review`.`user` is this object). """ - reviews_on_user(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Review!]! @fdc_generated(from: "Review.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) + reviews_on_user( + """ + Filter condition to narrow down the query results. + """ + where: Review_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Review_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Review!]! @fdc_generated(from: "Review.user", purpose: QUERY_MULTIPLE_ONE_TO_MANY) """ - ✨ List related Movie entries using FavoriteMovie as a join table (i.e. where an entry of FavoriteMovie exists whose `user` == this and `movie` == that). + ✨ List `Movie` objects using `FavoriteMovie` as the join table (a `FavoriteMovie` object exists where its `user` is this and its `movie` is that). """ - movies_via_FavoriteMovie(where: FavoriteMovie_Filter, orderBy: [FavoriteMovie_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + movies_via_FavoriteMovie( + """ + Filter condition to narrow down the query results. + """ + where: FavoriteMovie_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [FavoriteMovie_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Movie!]! @fdc_generated(from: "FavoriteMovie", purpose: QUERY_MULTIPLE_MANY_TO_MANY) """ - ✨ List related Movie entries using Review as a join table (i.e. where an entry of Review exists whose `user` == this and `movie` == that). + ✨ List `Movie` objects using `Review` as the join table (a `Review` object exists where its `user` is this and its `movie` is that). """ - movies_via_Review(where: Review_Filter, orderBy: [Review_Order!], offset: Int, limit: Int = 100): [Movie!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) + movies_via_Review( + """ + Filter condition to narrow down the query results. + """ + where: Review_Filter + + """ + Order the query results by specific fields. + """ + orderBy: [Review_Order!] + + """ + Number of rows to skip before starting to return the results. + """ + offset: Int + + """ + Maximum number of rows to return (defaults to 100 rows). + """ + limit: Int = 100 + ): [Movie!]! @fdc_generated(from: "Review", purpose: QUERY_MULTIPLE_MANY_TO_MANY) } diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql index c75ac52..d6867cc 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql @@ -1,51 +1,80 @@ "AccessLevel specifies coarse access policies for common situations." enum AccessLevel { """ - This operation can be executed by anyone with or without authentication. - Equivalent to @auth(expr: "true") + This operation is accessible to anyone, with or without authentication. + Equivalent to: @auth(expr: "true") """ PUBLIC """ - This operation can only be executed with a valid Firebase Auth ID token. - Note: it allows anonymous auth and unverified accounts, so may be subjected to abuses. - It’s equivalent to @auth(expr: "auth.uid != nil") + This operation can be executed only with a valid Firebase Auth ID token. + **Note:** This access level allows anonymous and unverified accounts, + which may present security and abuse risks. + Equivalent to: `@auth(expr: "auth.uid != nil")` """ USER_ANON """ - This operation can only be executed by a non-anonymous Firebase Auth account. - It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.firebase.sign_in_provider != 'anonymous'")" + This operation is restricted to non-anonymous Firebase Auth accounts. + Equivalent to: `@auth(expr: "auth.uid != nil && auth.token.firebase.sign_in_provider != 'anonymous'")` """ USER """ - This operation can only be executed by a verified Firebase Auth account. - It’s equivalent to @auth(expr: "auth.uid != nil && auth.token.email_verified")" + This operation is restricted to Firebase Auth accounts with verified email addresses. + Equivalent to: `@auth(expr: "auth.uid != nil && auth.token.email_verified")` """ USER_EMAIL_VERIFIED """ - This operation can not be executed with no IAM credentials. - It’s equivalent to @auth(expr: "false") + This operation cannot be executed by anyone. The operation can only be performed + by using the Admin SDK from a privileged environment. + Equivalent to: `@auth(expr: "false")` """ NO_ACCESS } """ -Defines the auth policy for a query or mutation. This directive must be added to -any operation you wish to be accessible from a client application. If left -unspecified, defaults to `@auth(level: NO_ACCESS)`. +The `@auth` directive defines the authentication policy for a query or mutation. + +It must be added to any operation that you wish to be accessible from a client +application. If not specified, the operation defaults to `@auth(level: NO_ACCESS)`. + +Refer to [Data Connect Auth Guide](https://firebase.google.com/docs/data-connect/authorization-and-security) for the best practices. """ directive @auth( - "The minimal level of access required to perform this operation." + """ + The minimal level of access required to perform this operation. + Exactly one of `level` and `expr` should be specified. + """ level: AccessLevel @fdc_oneOf(required: true) """ - A CEL expression that allows access to this operation if the expression + A CEL expression that grants access to this operation if the expression evaluates to `true`. + Exactly one of `level` and `expr` should be specified. """ expr: Boolean_Expr @fdc_oneOf(required: true) ) on QUERY | MUTATION + + +""" +Require that this mutation always run in a DB transaction. + +Mutations with `@transaction` are guaranteed to either fully succeed or fully +fail. If any of the fields within the transaction fails, the entire transaction +is rolled back. From a client standpoint, any failure behaves as if the entire +request had failed with a request error and execution had not begun. + +Mutations without `@transaction` would execute each root field one after +another in sequence. It surfaces any errors as partial [field errors](https://spec.graphql.org/October2021/#sec-Errors.Field-errors), +but not impacts the subsequent executions. + +The `@transaction` directive cannot be added to queries for now. +Currently, queries cannot fail partially, the response data is not guaranteed +to be a consistent snapshot. +""" +directive @transaction on MUTATION + "Query filter criteria for `String` scalar fields." input String_Filter { "When true, match if field `IS NULL`. When false, match if field is `NOT NULL`." @@ -304,6 +333,7 @@ input Any_ListFilter { "Match if list field does not contain any of the provided values as members." excludesAll: [Any!] } + """ (Internal) A string that uniquely identifies a type, field, and so on. @@ -358,64 +388,21 @@ directive @fdc_generated( | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION -""" -Defines a database index to optimize query performance. - -Given `type TableName @table @index(fields: [“fieldName”, “secondFieldName”])`, -`table_name_field_name_second_field_name_aa_idx` is the SQL index id. -`table_name_field_name_second_field_name_ad_idx` if `order: [ASC DESC]`. -`table_name_field_name_second_field_name_dd_idx` if `order: [DESC DESC]`. - -Given `type TableName @table { fieldName: Int @index } ` -`table_name_field_name_idx` is the SQL index id. -`order` matters less for single field indexes because they can be scanned in both ways. - -Override with `@index(name)` in case of index name conflicts. -""" -directive @index( - "The SQL database index id. Defaults to __idx." - name: String - """ - Only allowed and required when used on OBJECT. - The fields to create an index on. - """ - fields: [String!] - """ - Only allowed when used on OBJECT and BTREE index. - Index order of each column. Default to all ASC. - """ - order: [IndexFieldOrder!] - """ - For array field, default to `GIN`. - For Vector field, default to `HNSW`. - """ - type: IndexType - """ - Only allowed when used on vector field. - The vector similarity method. Default to `INNER_PRODUCT`. - """ - vector_method: VectorSimilarityMethod -) repeatable on FIELD_DEFINITION | OBJECT - -enum IndexFieldOrder { ASC DESC } - -enum IndexType { - BTREE - GIN - HNSW - IVFFLAT -} -type Query { - _service: _Service! -} - -type Mutation { - # This is just a dummy field so that Mutation is always non-empty. - _firebase: Void @fdc_deprecated(reason: "dummy field -- does nothing useful") -} type _Service { + "Full Service Definition Language of the Frebase Data Connect Schema, including normalized schema, predefined and generated types." sdl: String! + "Orignal Schema Sources in the service." + schema: String! + "Generated documentation from the schema of the Firebase Data Connect Service." + docs: [_Doc!]! +} + +type _Doc { + "Name of the Doc Page." + page: String! + "The markdown content of the doc page." + markdown: String! } "(Internal) Added to things that may be removed from FDC and will soon be no longer usable in schema or operations." @@ -465,49 +452,73 @@ directive @fdc_oneOf( "If true, exactly one field / argument in the group must be specified." required: Boolean! = false ) repeatable on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION + +type Mutation { + # This is just a dummy field so that Mutation is always non-empty. + _firebase: Void @fdc_deprecated(reason: "dummy field -- does nothing useful") +} + """ -UUID is a string with hex digits representing an RFC4122 value. +`UUID` is a string of hexadecimal digits representing an RFC4122-compliant UUID. -Outputs will always be 32 lower-case hex digits with no delimiters or curly -braces. Inputs in the following formats are also accepted (case insensitive): +UUIDs are always output as 32 lowercase hexadecimal digits without delimiters or +curly braces. +Inputs in the following formats are also accepted (case insensitive): - xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} +- `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` +- `urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` +- `{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}` + +In the PostgreSQL table, it's stored as [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html). """ scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122") + +""" +`Int64` is a scalar that represents a 64-bit signed integer. + +In the PostgreSQL table, it's stored as [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html). + +On the wire, it's encoded as string because 64-bit integer exceeds the range of JSON number. +""" scalar Int64 -scalar Any +""" +The `Any` scalar represents any valid [JSON value](https://www.json.org/json-en.html). +It can be an object, array, string, number, or boolean. + +Caution: JSON doesn't distinguish Int and Float. + +In the PostgreSQL table, it's stored as [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html). +""" +scalar Any @specifiedBy(url: "https://www.json.org/json-en.html") + +""" +The `Void` scalar type represents the absence of any value. It is typically used +in operations where no value is expected in return. +""" scalar Void + """ -The `True` scalar type only accepts the boolean `true`. +The `True` scalar type only accepts the boolean value `true`. -An optional field / argument typed `True` may either be set to `true` or omitted -(not provided at all). `false` or `null` is not accepted. +An optional field/argument typed as `True` may either be set +to `true` or omitted (not provided at all). The values `false` or `null` are not +accepted. """ scalar True @fdc_forbiddenAsFieldType @fdc_forbiddenAsVariableType @fdc_example(value: true, description: "The only allowed value.") -"Define the intervals used in timestamps and dates (subset)" -enum TimestampInterval @fdc_deprecated { - second - minute - hour - day - week - month - year -} + """ A Common Expression Language (CEL) expression that returns a boolean at runtime. -The expression can reference the `auth` variable, which is null if Firebase Auth -is not used. Otherwise, it contains the following fields: +This expression can reference the `auth` variable, which is null when Firebase +Auth is not used. When Firebase Auth is used, the following fields are available: + + - `auth.uid`: The current user ID. + - `auth.token`: A map containing all token fields (e.g., claims). - - `auth.uid`: The current user ID. - - `auth.token`: A map of all token fields (i.e. "claims"). """ scalar Boolean_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -519,8 +530,7 @@ scalar Boolean_Expr """ A Common Expression Language (CEL) expression that returns a string at runtime. -Limitation: Right now, only a few expressions are supported. Those are listed -using the @fdc_example directive on this scalar. +**Limitation**: Currently, only a limited set of expressions are supported. """ scalar String_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -533,8 +543,7 @@ scalar String_Expr """ A Common Expression Language (CEL) expression that returns a UUID string at runtime. -Limitation: Right now, only a few expressions are supported. Those are listed -using the @fdc_example directive on this scalar. +**Limitation**: Currently, only a limited set of expressions are supported. """ scalar UUID_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -546,8 +555,8 @@ scalar UUID_Expr """ A Common Expression Language (CEL) expression whose return type is unspecified. -Limitation: Only a limited set of expressions are supported for now for each -type. For type XXX, see the @fdc_example directives on XXX_Expr for a full list. +**Limitation**: Only a limited set of expressions are currently supported for each +type. """ scalar Any_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -566,197 +575,686 @@ scalar Any_SQL @fdc_sqlExpression @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType + """ Defines a relational database table. -Given `type TableName @table`, +In this example, we defined one table with a field named `myField`. + +```graphql +type TableName @table { + myField: String +} +``` +Data Connect adds an implicit `id` primary key column. So the above schema is equivalent to: + +```graphql +type TableName @table(key: "id") { + id: String @default(expr: "uuidV4()") + myField: String +} +``` + +Data Connect generates the following SQL table and CRUD operations to use it. - - `TableName` is the GQL type name. - - `tableName` is the singular name. Override with `@table(singular)`. - - `tableNames` is the plural name. Override with `@table(plural)`. - - `table_name` is the SQL table id. Override with `@table(name)`. +```sql +CREATE TABLE "public"."table_name" ( + "id" uuid NOT NULL DEFAULT uuid_generate_v4(), + "my_field" text NULL, + PRIMARY KEY ("id") +) +``` -Only a table type can be configured further with: + * You can lookup a row: `query ($id: UUID!) { tableName(id: $id) { myField } } ` + * You can find rows using: `query tableNames(limit: 20) { myField }` + * You can insert a row: `mutation { tableName_insert(data: {myField: "foo"}) }` + * You can update a row: `mutation ($id: UUID!) { tableName_update(id: $id, data: {myField: "bar"}) }` + * You can delete a row: `mutation ($id: UUID!) { tableName_delete(id: $id) }` - - Customized data types. See `@col`. - - Index. See `@index` - - Unique constraint. See `@unqiue` - - Relation. See `@ref` - - Embedded Json. See `@embed` +##### Customizations -A scalar field map to a SQL database column. -An object field (like `type TableName @table { field: AnotherType }`) are either +- `@table(singular)` and `@table(plural)` can customize the singular and plural name. +- `@table(name)` can customize the Postgres table name. +- `@table(key)` can customize the primary key field name and type. - - a relation reference field if `AnotherType` is annotated with `@table`. - - an embedded json field if `field` is annotated with `@embed`. +For example, the `User` table often has a `uid` as its primary key. + +```graphql +type User @table(key: "uid") { + uid: String! + name: String +} +``` + + * You can securely lookup a row: `query { user(key: {uid_expr: "auth.uid"}) { name } } ` + * You can securely insert a row: `mutation { user_insert(data: {uid_expr: "auth.uid" name: "Fred"}) }` + * You can securely update a row: `mutation { user_update(key: {uid_expr: "auth.uid"}, data: {name: "New Name"}) }` + * You can securely delete a row: `mutation { user_delete(key: {uid_expr: "auth.uid"}) }` + +`@table` type can be configured further with: + + - Custom SQL data types for columns. See `@col`. + - Add SQL indexes. See `@index`. + - Add SQL unique constraints. See `@unique`. + - Add foreign key constraints to define relations. See `@ref`. """ directive @table( - "Override the SQL database table name. Defaults to ." + """ + Configures the SQL database table name. Defaults to snake_case like `table_name`. + """ name: String - "Override the singular name. Default is the camel case of the type name." + """ + Configures the singular name. Defaults to the camelCase like `tableName`. + """ singular: String - "Override the plural name. Default is generated based on English patterns." + """ + Configures the plural name. Defaults to infer based on English plural pattern like `tableNames`. + """ plural: String - "The primary key of the table. Defaults to a single field `id: UUID!`. Generate if missing." + """ + Defines the primary key of the table. Defaults to a single field named `id`. + If not present already, Data Connect adds an implicit field `id: UUID! @default(expr: "uuidV4()")`. + """ key: [String!] ) on OBJECT """ -Defines a relational database view. +Defines a relational database Raw SQLview. + +Data Connect generates GraphQL queries with WHERE and ORDER BY clauses. +However, not all SQL features has native GraphQL equivalent. + +You can write **an arbitrary SQL SELECT statement**. Data Connect +would map Graphql fields on `@view` type to columns in your SELECT statement. + +* Scalar GQL fields (camelCase) should match a SQL column (snake_case) + in the SQL SELECT statement. +* Reference GQL field can point to another `@table` type. Similar to foreign key + defined with `@ref` on a `@table` type, a `@view` type establishes a relation + when `@ref(fields)` match `@ref(references)` on the target table. + +In this example, you can use `@view(sql)` to define an aggregation view on existing +table. + +```graphql +type User @table { + name: String + score: Int +} +type UserAggregation @view(sql: ''' + SELECT + COUNT(*) as count, + SUM(score) as sum, + AVG(score) as average, + PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY score) AS median, + (SELECT id FROM "user" LIMIT 1) as example_id + FROM "user" +''') { + count: Int + sum: Int + average: Float + median: Float + example: User + exampleId: UUID +} +``` + +###### Example: Query Raw SQL View + +```graphql +query { + userAggregations { + count sum average median + exampleId example { id } + } +} +``` + +##### One-to-One View + +An one-to-one companion `@view` can be handy if you want to argument a `@table` +with additional implied content. + +```graphql +type Restaurant @table { + name: String! +} +type Review @table { + restaurant: Restaurant! + rating: Int! +} +type RestaurantStats @view(sql: ''' + SELECT + restaurant_id, + COUNT(*) AS review_count, + AVG(rating) AS average_rating + FROM review + GROUP BY restaurant_id +''') { + restaurant: Restaurant @unique + reviewCount: Int + averageRating: Float +} +``` + +In this example, `@unique` convey the assumption that each `Restaurant` should +have only one `RestaurantStats` object. + +###### Example: Query One-to-One View + +```graphql +query ListRestaurants { + restaurants { + name + stats: restaurantStats_on_restaurant { + reviewCount + averageRating + } + } +} +``` + +###### Example: Filter based on One-to-One View + +```graphql +query BestRestaurants($minAvgRating: Float, $minReviewCount: Int) { + restaurants(where: { + restaurantStats_on_restaurant: { + averageRating: {ge: $minAvgRating} + reviewCount: {ge: $minReviewCount} + } + }) { name } +} +``` + +##### Customizations + +- One of `@view(sql)` or `@view(name)` should be defined. + `@view(name)` can refer to a persisted SQL view in the Postgres schema. +- `@view(singular)` and `@view(plural)` can customize the singular and plural name. + +`@view` type can be configured further: + + - `@unique` lets you define one-to-one relation. + - `@col` lets you customize SQL column mapping. For example, `@col(name: "column_in_select")`. + +##### Limitations + +Raw SQL view doesn't have a primary key, so it doesn't support lookup. Other +`@table` or `@view` cannot have `@ref` to a view either. -Given `type ViewName @view`, - - `ViewName` is the GQL type name. - - `viewName` is the singular name. Override with `@view(singular)`. - - `viewNames` is the plural name. Override with `@view(plural)`. - - `view_name` is the SQL view id. Override with `@view(name)`. - When `@view(sql)` is defined, it uses the given raw SQL as the view instead. +View cannot be mutated. You can perform CRUD operations on the underlying +table to alter its content. -A view type can be used just as a table type with queries. -A view type may have a nullable `@ref` field to another table, but cannot be -referenced in a `@ref`. +**Important: Data Connect doesn't parse and validate SQL** -WARNING: Firebase Data Connect does not validate the SQL of the view or -evaluate whether it matches the defined fields. +- If the SQL view is invalid or undefined, related requests may fail. +- If the SQL view return incompatible types. Firebase Data Connect may surface + errors. +- If a field doesn't have a corresponding column in the SQL SELECT statement, + it will always be `null`. +- There is no way to ensure VIEW to TABLE `@ref` constraint. +- All fields must be nullable in case they aren't found in the SELECT statement + or in the referenced table. + +**Important: You should always test `@view`!** -If the SQL view is invalid or undefined, related requests may fail. -If the SQL view return incompatible types. Firebase Data Connect will surface -an error in the response. """ directive @view( """ - The SQL view name. If no `name` or `sql` are provided, defaults to + The SQL view name. If neither `name` nor `sql` are provided, defaults to the snake_case of the singular type name. + `name` and `sql` cannot be specified at the same time. """ name: String @fdc_oneOf """ - SQL SELECT statement to use as the basis for this type. Note that all SQL - identifiers should be snake_case and all GraphQL identifiers should be - camelCase. + SQL `SELECT` statement used as the basis for this type. + SQL SELECT columns should use snake_case. GraphQL fields should use camelCase. + `name` and `sql` cannot be specified at the same time. """ sql: String @fdc_oneOf - "Override the singular name. Default is the camel case of the type name." + """ + Configures the singular name. Defaults to the camelCase like `viewName`. + """ singular: String - "Override the plural name. Default is generated based on English patterns." + """ + Configures the plural name. Defaults to infer based on English plural pattern like `viewNames`. + """ plural: String ) on OBJECT """ -Specify additional column options. +Customizes a field that represents a SQL database table column. -Given `type TableName @table { fieldName: Int } ` +Data Connect maps scalar Fields on `@table` type to a SQL column of +corresponding data type. - - `field_name` is the SQL column name. Override with `@col(name)`. +- scalar `UUID`: [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html). +- scalar `String`: [`text`](https://www.postgresql.org/docs/current/datatype-character.html) +- scalar `Int`: [`int`](https://www.postgresql.org/docs/current/datatype-numeric.html) +- scalar `Int64`: [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html) +- scalar `Float`: [`double precision`](https://www.postgresql.org/docs/current/datatype-numeric.html) +- scalar `Boolean`: [`boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html) +- scalar `Date`: [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html) +- scalar `Timestamp`: [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html) +- scalar `Any`: [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html) +- scalar `Vector`: [`pgvector`](https://github.com/pgvector/pgvector) + +Array scalar fields are mapped to [Postgres arrays](https://www.postgresql.org/docs/current/arrays.html). + +###### Example: Serial Primary Key + +For example, you can define auto-increment primary key. + +```graphql +type Post @table { + id: Int! @col(name: "post_id", dataType: "serial") +} +``` + +Data Connect converts it to the following SQL table schema. + +```sql +CREATE TABLE "public"."post" ( + "post_id" serial NOT NULL, + PRIMARY KEY ("id") +) +``` + +###### Example: Vector + +```graphql +type Post @table { + content: String! @col(name: "post_content") + contentEmbedding: Vector! @col(size:768) +} +``` """ directive @col( - "The SQL database column name. Defaults to ." + """ + The SQL database column name. Defaults to snake_case of the field name. + """ name: String """ - Override SQL columns data type. - Each GraphQL type could map to many SQL data types. - Refer to Postgres supported data types and mappings to GQL. + Configures the custom SQL data type. + + Each GraphQL type can map to multiple SQL data types. + Refer to [Postgres supported data types](https://www.postgresql.org/docs/current/datatype.html). """ dataType: String """ - Defines a fixed column size for certain scalar types. - - - For Vector, size is required. It establishes the length of the vector. - - For String, size converts `text` type to `varchar(size)`. + Required on `Vector` columns. It specifies the length of the Vector. + `textembedding-gecko@003` model generates `Vector` of `@col(size:768)`. """ size: Int ) on FIELD_DEFINITION """ -Define a reference field to another table. +Defines a foreign key reference to another table. -Given `type TableName @table { refField: AnotherTableName }`, it defines a foreign-key constraint +For example, we can define a many-to-one relation. - - with id `table_name_ref_field_fkey` (override with `@ref(constraintName)`) - - from `table_name.ref_field` (override with `@ref(fields)`) - - to `another_table_name.id` (override with `@ref(references)`) +```graphql +type ManyTable @table { + refField: OneTable! +} +type OneTable @table { + someField: String! +} +``` +Data Connect adds implicit foreign key column and relation query field. So the +above schema is equivalent to the following schema. + +```graphql +type ManyTable @table { + id: UUID! @default(expr: "uuidV4()") + refField: OneTable! @ref(fields: "refFieldId", references: "id") + refFieldId: UUID! +} +type OneTable @table { + id: UUID! @default(expr: "uuidV4()") + someField: UUID! + manyTables_on_refField: [ManyTable!]! +} +``` +Data Connect generates the necessary foreign key constraint. + +```graphql +CREATE TABLE "public"."many_table" ( + "id" uuid NOT NULL DEFAULT uuid_generate_v4(), + "ref_field_id" uuid NOT NULL, + PRIMARY KEY ("id"), + CONSTRAINT "many_table_ref_field_id_fkey" FOREIGN KEY ("ref_field_id") REFERENCES "public"."one_table" ("id") ON DELETE CASCADE +) +``` + +###### Example: Traverse the Reference Field + +```graphql +query ($id: UUID!) { + manyTable(id: $id) { + refField { id } + } +} +``` + +###### Example: Reverse Traverse the Reference field -Does not support `[AnotherTableName]` because array fields cannot have foreign-key constraints. -Nullability determines whether the reference is required. +```graphql +query ($id: UUID!) { + oneTable(id: $id) { + manyTables_on_refField { id } + } +} +``` - - `refField: AnotherTableName`: optional reference, SET_NULL on delete. - - `refField: AnotherTableName!`: required reference, CASCADE on delete. +##### Optional Many-to-One Relation -Consider all types of SQL relations: +An optional foreign key reference will be set to null if the referenced row is deleted. - - many-to-one relations involve a reference field on the many-side. - - many-to-maybe-one if `refField: AnotherTableName`. - - many-to-exactly-one if `refField: AnotherTableName!`. - - one-to-one relations involve a unique reference field on one side. - - maybe-one-to-maybe-one if `refField: AnotherTableName @unique`. - - maybe-one-to-exact-one if `refField: AnotherTableName! @unique`. - - exact-one-to-exact-one shall be represented as a single table instead. - - many-to-many relations involve a join table. - - Its primary keys must be two non-null reference fields to tables bridged together to guarantee at most one relation per pair. +In this example, if a `User` is deleted, the `assignee` and `reporter` +references will be set to null. -type TableNameToAnotherTableName @table(key: ["refField", "anotherRefField"]) { - refField: TableName! - anotherRefField: AnotherTableName! +```graphql +type Bug @table { + title: String! + assignee: User + reproter: User } +``` + +##### Required Many-to-One Relation + +A required foreign key reference will cascade delete if the referenced row is +deleted. + +In this example, if a `Post` is deleted, associated comments will also be +deleted. + +```graphql +type Comment @table { + post: Post! + content: String! +} +``` + +##### Many To Many Relation + +You can define a many-to-many relation with a join table. + +```graphql +type Membership @table(key: ["group", "user"]) { + group: Group! + user: User! + role: String! @default(value: "member") +} + +type Group @table { name: String! } +type User @table { name: String! } +``` + +When Data Connect sees a table with two reference field as its primary key, it +knows this is a join table, so expands the many-to-many query field. + +```graphql +type Group @table { + name: String! + users_via_Membership: [User!]! + memberships_on_group: [Membership!]! +} +type User @table { + name: String! + groups_via_Membership: [Group!]! + memberships_on_user: [Membership!]! +} +``` + +###### Example: Transerse the Many-To-Many Relation + +```graphql +query ($id: UUID!) { + group(id: $id) { + users: users_via_Membership { + name + } + } +} +``` + +###### Example: Transerse to the Join Table + +```graphql +query ($id: UUID!) { + group(id: $id) { + memberships: memberships_on_group { + user { name } + role + } + } +} +``` + +##### One To One Relation + +You can even define a one-to-one relation with the help of `@unique` or `@table(key)`. + +```graphql +type User @table { + name: String +} +type Account @table { + user: User! @unique +} +# Alternatively, use primary key constraint. +type Account @table(key: "user") { + user: User! +} +``` + +###### Example: Transerse the Reference Field + +```graphql +query ($id: UUID!) { + account(id: $id) { + user { id } + } +} +``` + +###### Example: Reverse Tranverse the Reference field + +```graphql +query ($id: UUID!) { + user(id: $id) { + account_on_user { id } + } +} +``` + +##### Customizations + +- `@ref(constraintName)` can customize the SQL foreign key constraint name (`table_name_ref_field_fkey` above). +- `@ref(fields)` can customize the foreign key field names. +- `@ref(references)` can customize the constraint to reference other columns. + By default, `@ref(references)` is the primary key of the `@ref` table. + Other fields with `@unique` may also be referred in the foreign key constraint. """ directive @ref( - "The SQL database foreign key constraint name. Default to __fkey." + "The SQL database foreign key constraint name. Defaults to {table_name}_{field_name}_fkey." constraintName: String """ - Foreign key fields. Default to . + Foreign key fields. Defaults to {tableName}{PrimaryIdName}. """ fields: [String!] - "The fields that the foreign key references in the other table. Default to the primary key." + "The fields that the foreign key references in the other table. Defaults to its primary key." references: [String!] ) on FIELD_DEFINITION -"Define the direction of an orderby query" +"Defines the direction of an orderby query" enum OrderDirection { +"Results are ordered in ascending order." ASC +"Results are ordered in descending order." DESC } -enum ColDefault @fdc_deprecated { - """ - Generates a random UUID (v4) as the default column value. - Compatible with String or UUID typed fields. - """ - UUID - """ - Generates an auto-incrementing sequence as the default column value. - Compatible with Int and Int64 typed fields. - """ - SEQUENCE - """ - Populates the default column value with the current date or timestamp. - Compatible with Date and Timestamp typed fields. - """ - NOW -} - """ -Specify the default column value. +Specifies the default value for a column field. + +For example: + +```graphql +type User @table(key: "uid") { + uid: String! @default(expr: "auth.uid") + number: Int! @col(dataType: "serial") + createdAt: Date! @default(expr: "request.time") + role: String! @default(value: "Member") + credit: Int! @default(value: 100) +} +``` The supported arguments vary based on the field type. """ directive @default( - "A constant value. Validated against the field GraphQL type at compile-time." + "A constant value validated against the field's GraphQL type during compilation." value: Any @fdc_oneOf(required: true) - "(Deprecated) Built-in common ways to generate initial value." - generate: ColDefault @fdc_oneOf(required: true) @deprecated - "A CEL expression, whose return value must match the field data type." + "A CEL expression whose return value must match the field's data type." expr: Any_Expr @fdc_oneOf(required: true) """ A raw SQL expression, whose SQL data type must match the underlying column. The value is any variable-free expression (in particular, cross-references to other columns in the current table are not allowed). Subqueries are not allowed either. - https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-DEFAULT + See [PostgreSQL defaults](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-DEFAULT) + for more details. """ sql: Any_SQL @fdc_oneOf(required: true) ) on FIELD_DEFINITION + +""" +Defines a database index to optimize query performance. + +```graphql +type User @table @index(fields: ["name", "phoneNumber"], order: [ASC, DESC]) { + name: String @index + phoneNumber: Int64 @index + tags: [String] @index # GIN Index +} +``` + +##### Single Field Index + +You can put `@index` on a `@col` field to create a SQL index. + +`@index(order)` matters little for single field indexes, as they can be scanned +in both directions. + +##### Composite Index + +You can put `@index(fields: [...])` on `@table` type to define composite indexes. + +`@index(order: [...])` can customize the index order to satisfy particular +filter and order requirement. + +""" +directive @index( + """ + Configure the SQL database index id. + + If not overridden, Data Connect generates the index name: + - `table_name_first_field_second_field_aa_idx` + - `table_name_only_field_name_idx` + """ + name: String + """ + Only allowed and required when used on a `@table` type. + Specifies the fields to create the index on. + """ + fields: [String!] + """ + Only allowed for `BTREE` `@index` on `@table` type. + Specifies the order for each indexed column. Defaults to all `ASC`. + """ + order: [IndexFieldOrder!] + """ + Customize the index type. + + For most index, it defaults to `BTREE`. + For array fields, only allowed `IndexType` is `GIN`. + For `Vector` fields, defaults to `HNSW`, may configure to `IVFFLAT`. + """ + type: IndexType + """ + Only allowed when used on vector field. + Defines the vector similarity method. Defaults to `INNER_PRODUCT`. + """ + vector_method: VectorSimilarityMethod +) repeatable on FIELD_DEFINITION | OBJECT + +"Specifies the sorting order for database indexes." +enum IndexFieldOrder { + "Sorts the field in ascending order (from lowest to highest)." + ASC + "Sorts the field in descending order (from highest to lowest)." + DESC +} + +"Defines the type of index to be used in the database." +enum IndexType { + "A general-purpose index type commonly used for sorting and searching." + BTREE + "Generalized Inverted Index, optimized for indexing composite values such as arrays." + GIN + "Hierarchical Navigable Small World graph, used for nearest-neighbor searches on vector fields." + HNSW + "Inverted File Index, optimized for approximate nearest-neighbor searches in vector databases." + IVFFLAT +} + +""" +Defines unique constraints on `@table`. + +For example, + +```graphql +type User @table { + phoneNumber: Int64 @unique +} +type UserProfile @table { + user: User! @unique + address: String @unique +} +``` + +- `@unique` on a `@col` field adds a single-column unique constraint. +- `@unique` on a `@table` type adds a composite unique constraint. +- `@unique` on a `@ref` defines a one-to-one relation. It adds unique constraint + on `@ref(fields)`. + +`@unique` ensures those fields can uniquely identify a row, so other `@table` +type may define `@ref(references)` to refer to fields that has a unique constraint. + +""" +directive @unique( + """ + Configures the SQL database unique constraint name. + + If not overridden, Data Connect generates the unique constraint name: + - `table_name_first_field_second_field_uidx` + - `table_name_only_field_name_uidx` + """ + indexName: String + """ + Only allowed and required when used on OBJECT, + this specifies the fields to create a unique constraint on. + """ + fields: [String!] +) repeatable on FIELD_DEFINITION | OBJECT + """ Date is a string in the YYYY-MM-DD format representing a local-only date. @@ -768,6 +1266,8 @@ words, only the part before "T" is used and the rest discarded. This effectively truncates it to the local date in the specified time-zone. Outputs will always be in the canonical YYYY-MM-DD format. + +In the PostgreSQL table, it's stored as [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html). """ scalar Date @specifiedBy(url: "https://scalars.graphql.org/andimarek/local-date.html") @@ -787,14 +1287,15 @@ FDC only supports year 1583 to 9999 (inclusive) and uses the ISO-8601 calendar system for all date-time calculations. Notably, the expanded year representation (+/-YYYYY) is rejected and Year 1582 and before may either be rejected or cause undefined behavior. + +In the PostgreSQL table, it's stored as [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html). """ scalar Timestamp @specifiedBy(url: "https://scalars.graphql.org/andimarek/date-time") """ A Common Expression Language (CEL) expression that returns a Timestamp at runtime. -Limitation: Right now, only a few expressions are supported. Those are listed -using the @fdc_example directive on this scalar. +Limitation: Right now, only a few expressions are supported. """ scalar Timestamp_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -807,8 +1308,7 @@ scalar Timestamp_Expr A Common Expression Language (CEL) expression that returns a Timestamp at runtime, which is then truncated to UTC date only. The time-of-day parts are discarded. -Limitation: Right now, only a few expressions are supported. Those are listed -using the @fdc_example directive on this scalar. +Limitation: Right now, only a few expressions are supported. """ scalar Date_Expr @specifiedBy(url: "https://github.com/google/cel-spec") @@ -817,354 +1317,549 @@ scalar Date_Expr @fdc_forbiddenAsFieldType @fdc_example(value: "request.time", description: "The UTC date on which the request is received.") -"Conditions on a Date value" +"Conditions on a `Date` value." input Date_Filter { + "Match if the field `IS NULL`." isNull: Boolean + "Match if the field is exactly equal to the provided value." eq: Date @fdc_oneOf(group: "eq") + "Match if the field equals the provided CEL expression." eq_expr: Date_Expr @fdc_oneOf(group: "eq") + "Match if the field equals the provided relative date." eq_date: Date_Relative @fdc_oneOf(group: "eq") + "Match if the field is not equal to the provided value." ne: Date @fdc_oneOf(group: "ne") + "Match if the field is not equal to the provided CEL expression." ne_expr: Date_Expr @fdc_oneOf(group: "ne") + "Match if the field is not equal to the provided relative date." ne_date: Date_Relative @fdc_oneOf(group: "ne") + "Match if the field value is among the provided list of values." in: [Date!] + "Match if the field value is not among the provided list of values." nin: [Date!] + "Match if the field value is greater than the provided value." gt: Date @fdc_oneOf(group: "gt") + "Match if the field value is greater than the provided CEL expression." gt_expr: Date_Expr @fdc_oneOf(group: "gt") + "Match if the field value is greater than the provided relative date." gt_date: Date_Relative @fdc_oneOf(group: "gt") + "Match if the field value is greater than or equal to the provided value." ge: Date @fdc_oneOf(group: "ge") + "Match if the field value is greater than or equal to the provided CEL expression." ge_expr: Date_Expr @fdc_oneOf(group: "ge") + "Match if the field value is greater than or equal to the provided relative date." ge_date: Date_Relative @fdc_oneOf(group: "ge") + "Match if the field value is less than the provided value." lt: Date @fdc_oneOf(group: "lt") + "Match if the field value is less than the provided CEL expression." lt_expr: Date_Expr @fdc_oneOf(group: "lt") + "Match if the field value is less than the provided relative date." lt_date: Date_Relative @fdc_oneOf(group: "lt") + "Match if the field value is less than or equal to the provided value." le: Date @fdc_oneOf(group: "le") + "Match if the field value is less than or equal to the provided CEL expression." le_expr: Date_Expr @fdc_oneOf(group: "le") + "Match if the field value is less than or equal to the provided relative date." le_date: Date_Relative @fdc_oneOf(group: "le") } -"Conditions on a Date list" +"Conditions on a`Date` list." input Date_ListFilter { + "Match if the list contains the provided date." includes: Date @fdc_oneOf(group: "includes") + "Match if the list contains the provided date CEL expression." includes_expr: Date_Expr @fdc_oneOf(group: "includes") + "Match if the list contains the provided relative date." includes_date: Date_Relative @fdc_oneOf(group: "includes") + "Match if the list does not contain the provided date." excludes: Date @fdc_oneOf(group: "excludes") + "Match if the list does not contain the provided date CEL expression." excludes_expr: Date_Expr @fdc_oneOf(group: "excludes") + "Match if the list does not contain the provided relative date." excludes_date: Date_Relative @fdc_oneOf(group: "excludes") + "Match if the list contains all the provided dates." includesAll: [Date!] + "Match if the list contains none of the provided dates." excludesAll: [Date!] } -"Conditions on an Timestamp value" +"Conditions on a `Timestamp` value." input Timestamp_Filter { + "Match if the field `IS NULL`." isNull: Boolean + "Match if the field is exactly equal to the provided value." eq: Timestamp @fdc_oneOf(group: "eq") + "Match if the field equals the provided CEL expression." eq_expr: Timestamp_Expr @fdc_oneOf(group: "eq") + "Match if the field equals the provided relative time." eq_time: Timestamp_Relative @fdc_oneOf(group: "eq") + "Match if the field is not equal to the provided value." ne: Timestamp @fdc_oneOf(group: "ne") + "Match if the field is not equal to the provided CEL expression." ne_expr: Timestamp_Expr @fdc_oneOf(group: "ne") + "Match if the field is not equal to the provided relative time." ne_time: Timestamp_Relative @fdc_oneOf(group: "ne") + "Match if the field value is among the provided list of values." in: [Timestamp!] + "Match if the field value is not among the provided list of values." nin: [Timestamp!] + "Match if the field value is greater than the provided value." gt: Timestamp @fdc_oneOf(group: "gt") + "Match if the field value is greater than the provided CEL expression." gt_expr: Timestamp_Expr @fdc_oneOf(group: "gt") + "Match if the field value is greater than the provided relative time." gt_time: Timestamp_Relative @fdc_oneOf(group: "gt") + "Match if the field value is greater than or equal to the provided value." ge: Timestamp @fdc_oneOf(group: "ge") + "Match if the field value is greater than or equal to the provided CEL expression." ge_expr: Timestamp_Expr @fdc_oneOf(group: "ge") + "Match if the field value is greater than or equal to the provided relative time." ge_time: Timestamp_Relative @fdc_oneOf(group: "ge") + "Match if the field value is less than the provided value." lt: Timestamp @fdc_oneOf(group: "lt") + "Match if the field value is less than the provided CEL expression." lt_expr: Timestamp_Expr @fdc_oneOf(group: "lt") + "Match if the field value is less than the provided relative time." lt_time: Timestamp_Relative @fdc_oneOf(group: "lt") + "Match if the field value is less than or equal to the provided value." le: Timestamp @fdc_oneOf(group: "le") + "Match if the field value is less than or equal to the provided CEL expression." le_expr: Timestamp_Expr @fdc_oneOf(group: "le") + "Match if the field value is less than or equal to the provided relative time." le_time: Timestamp_Relative @fdc_oneOf(group: "le") } -"Conditions on a Timestamp list" +"Conditions on a `Timestamp` list." input Timestamp_ListFilter { + "Match if the list contains the provided timestamp." includes: Timestamp @fdc_oneOf(group: "includes") + "Match if the list contains the provided timestamp CEL expression." includes_expr: Timestamp_Expr @fdc_oneOf(group: "includes") + "Match if the list contains the provided relative timestamp." includes_time: Timestamp_Relative @fdc_oneOf(group: "includes") + "Match if the list does not contain the provided timestamp." excludes: Timestamp @fdc_oneOf(group: "excludes") + "Match if the list does not contain the provided timestamp CEL expression." excludes_expr: Timestamp_Expr @fdc_oneOf(group: "excludes") + "Match if the list does not contain the provided relative timestamp." excludes_time: Timestamp_Relative @fdc_oneOf(group: "excludes") + "Match if the list contains all the provided timestamps." includesAll: [Timestamp!] + "Match if the list contains none of the provided timestamps." excludesAll: [Timestamp!] } -"Update input of a Date value" +"Update input of a `Date` value." input Date_Update { + "Set the field to the provided date." set: Date @fdc_oneOf(group: "set") + "Set the field to the provided date CEL expression." set_expr: Date_Expr @fdc_oneOf(group: "set") + "Set the field to the provided relative date." set_date: Date_Relative @fdc_oneOf(group: "set") } -"Update input of a Date list value" +"Update input of a `Date` list value." input Date_ListUpdate { + "Replace the current list with the provided list of `Date` values." set: [Date!] + "Append the provided `Date` values to the existing list." append: [Date!] + "Prepend the provided `Date` values to the existing list." prepend: [Date!] + "Remove the date value at the specified index." delete: Int + "The index of the list to perform updates." i: Int + "Update the date value at the specified index." update: Date } -"Update input of a Timestamp value" +"Update input of a `Timestamp` value." input Timestamp_Update { + "Set the field to the provided timestamp." set: Timestamp @fdc_oneOf(group: "set") + "Set the field to the provided timestamp CEL expression." set_expr: Timestamp_Expr @fdc_oneOf(group: "set") + "Set the field to the provided relative timestamp." set_time: Timestamp_Relative @fdc_oneOf(group: "set") } -"Update input of a Timestamp list value" +"Update input of an `Timestamp` list value." input Timestamp_ListUpdate { + "Replace the current list with the provided list of `Timestamp` values." set: [Timestamp!] + "Append the provided `Timestamp` values to the existing list." append: [Timestamp!] + "Prepend the provided `Timestamp` values to the existing list." prepend: [Timestamp!] + "Remove the timestamp value at the specified index." delete: Int + "The index of the list to perform updates." i: Int + "Update the timestamp value at the specified index." update: Timestamp } -"A runtime-calculated Timestamp value relative to `now` or `at`." + +"A runtime-calculated `Timestamp` value relative to `now` or `at`." input Timestamp_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + "Match for the current time." now: True @fdc_oneOf(group: "from", required: true) + "A specific timestamp for matching." at: Timestamp @fdc_oneOf(group: "from", required: true) - + "Add the provided duration to the base timestamp." add: Timestamp_Duration + "Subtract the provided duration from the base timestamp." sub: Timestamp_Duration - + "Truncate the timestamp to the provided interval." truncateTo: Timestamp_Interval } input Timestamp_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + "The number of milliseconds for the duration." milliseconds: Int! = 0 + "The number of seconds for the duration." seconds: Int! = 0 + "The number of minutes for the duration." minutes: Int! = 0 + "The number of hours for the duration." hours: Int! = 0 + "The number of days for the duration." days: Int! = 0 + "The number of weeks for the duration." weeks: Int! = 0 + "The number of months for the duration." months: Int! = 0 + "The number of years for the duration." years: Int! = 0 } enum Timestamp_Interval @fdc_forbiddenAsFieldType { + "Represents a time interval of one second." SECOND + "Represents a time interval of one minute." MINUTE + "Represents a time interval of one hour." HOUR + "Represents a time interval of one day." DAY + "Represents a time interval of one week." WEEK + "Represents a time interval of one month." MONTH + "Represents a time interval of one year." YEAR } "A runtime-calculated Date value relative to `today` or `on`." input Date_Relative @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + "Match for today’s date." today: True @fdc_oneOf(group: "from", required: true) + "A specific date for matching." on: Date @fdc_oneOf(group: "from", required: true) - + "Add the provided duration to the base date." add: Date_Duration + "Subtract the provided duration from the base date." sub: Date_Duration - + "Truncate the date to the provided interval." truncateTo: Date_Interval } input Date_Duration @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType { + "The number of days for the duration." days: Int! = 0 + "The number of weeks for the duration." weeks: Int! = 0 + "The number of months for the duration." months: Int! = 0 + "The number of years for the duration." years: Int! = 0 } enum Date_Interval @fdc_forbiddenAsFieldType { + "Represents a time interval of one week." WEEK + "Represents a time interval of one month." MONTH + "Represents a time interval of one year." YEAR } -""" -Defines a unique constraint. - -Given `type TableName @table @unique(fields: [“fieldName”, “secondFieldName”])`, -`table_name_field_name_second_field_name_uidx` is the SQL unique index id. -Given `type TableName @table { fieldName: Int @unique } ` -`table_name_field_name_uidx` is the SQL unique index id. -Override with `@unique(indexName)` in case of index name conflicts. -""" -directive @unique( - "The SQL database unique index name. Defaults to __uidx." - indexName: String - """ - Only allowed and required when used on OBJECT. - The fields to create a unique constraint on. - """ - fields: [String!] -) repeatable on FIELD_DEFINITION | OBJECT -"Update input of a String value" +"Update input of a `String` value." input String_Update { + "Set the field to a provided value." set: String @fdc_oneOf(group: "set") + "Set the field to a provided server value expression." set_expr: String_Expr @fdc_oneOf(group: "set") } -"Update input of a String list value" +"Update input of a `String` list value." input String_ListUpdate { + "Set the list with the provided values." set: [String!] + "Append the provided values to the existing list." append: [String!] + "Prepend the provided values to the existing list." prepend: [String!] } -"Update input of a UUID value" +"Update input of a `UUID` value." input UUID_Update { + "Set the field to a provided UUID." set: UUID @fdc_oneOf(group: "set") + "Set the field to a provided UUID expression." set_expr: UUID_Expr @fdc_oneOf(group: "set") } -"Update input of an ID list value" +"Update input of an `ID` list value." input UUID_ListUpdate { + "Set the list with the provided list of UUIDs." set: [UUID!] + "Append the provided UUIDs to the existing list." append: [UUID!] + "Prepend the provided UUIDs to the existing list." prepend: [UUID!] } -"Update input of an Int value" +"Update input of an `Int` value." input Int_Update { + "Set the field to a provided value." set: Int + "Increment the field by a provided value." inc: Int + "Decrement the field by a provided value." dec: Int } -"Update input of an Int list value" +"Update input of an `Int` list value." input Int_ListUpdate { + "Set the list with the provided values." set: [Int!] + "Append the provided list of values to the existing list." append: [Int!] + "Prepend the provided list of values to the existing list." prepend: [Int!] } -"Update input of an Int64 value" +"Update input of an `Int64` value." input Int64_Update { + "Set the field to a provided value." set: Int64 + "Increment the field by a provided value." inc: Int64 + "Decrement the field by a provided value." dec: Int64 } -"Update input of an Int64 list value" +"Update input of an `Int64` list value." input Int64_ListUpdate { + "Replace the list with the provided values." set: [Int64!] + "Append the provided list of values to the existing list." append: [Int64!] + "Prepend the provided list of values to the existing list." prepend: [Int64!] } -"Update input of a Float value" +"Update input of a `Float` value." input Float_Update { + "Set the field to a provided value." set: Float + "Increment the field by a provided value." inc: Float + "Decrement the field by a provided value." dec: Float } -"Update input of a Float list value" +"Update input of a `Float` list value." input Float_ListUpdate { + "Set the list with the provided values." set: [Float!] + "Append the provided list of values to the existing list." append: [Float!] + "Prepend the provided list of values to the existing list." prepend: [Float!] } -"Update input of a Boolean value" +"Update input of a `Boolean` value." input Boolean_Update { + "Set the field to a provided value." set: Boolean } -"Update input of a Boolean list value" +"Update input of a `Boolean` list value." input Boolean_ListUpdate { + "Set the list with the provided values." set: [Boolean!] + "Append the provided list of values to the existing list." append: [Boolean!] + "Prepend the provided list of values to the existing list." prepend: [Boolean!] } -"Update input of an Any value" +"Update input of an `Any` value." input Any_Update { + "Set the field to a provided value." set: Any } -"Update input of an Any list value" +"Update input of an `Any` list value." input Any_ListUpdate { + "Set the list with the provided values." set: [Any!] + "Append the provided list of values to the existing list." append: [Any!] + "Prepend the provided list of values to the existing list." prepend: [Any!] } + +type Query { + """ + _service provides customized introspection on Firebase Data Connect Sevice. + """ + _service: _Service! +} + """ Vector is an array of single-precision floating-point numbers, serialized as a JSON array. All elements must be finite (no NaN, Infinity or -Infinity). Example: [1.1, 2, 3.3] + +In the PostgreSQL table, it's stored as [`pgvector`](https://github.com/pgvector/pgvector). """ scalar Vector """ -Defines what siliarlity function to use for fetching vectors. -Details here: https://github.com/pgvector/pgvector?tab=readme-ov-file#vector-functions +Defines the similarity function to use when comparing vectors in queries. + +Defaults to `INNER_PRODUCT`. + +View [all vector functions](https://github.com/pgvector/pgvector?tab=readme-ov-file#vector-functions). """ enum VectorSimilarityMethod { + "Measures the Euclidean (L2) distance between two vectors." L2 + "Measures the cosine similarity between two vectors." COSINE + "Measures the inner product(dot product) between two vectors." INNER_PRODUCT } -"Conditions on an Vector value" +"Conditions on a Vector value." input Vector_Filter { + "Match if the field is exactly equal to the provided vector." eq: Vector + "Match if the field is not equal to the provided vector." ne: Vector + "Match if the field value is among the provided list of vectors." in: [Vector!] + "Match if the field value is not among the provided list of vectors." nin: [Vector!] + "Match if the field is `NULL`." isNull: Boolean } input Vector_ListFilter { - "When true, will match if the list includes the supplied vector." + "Match if the list includes the supplied vector." includes: Vector + "Match if the list does not include the supplied vector." excludes: Vector + "Match if the list contains all the provided vectors." includesAll: [Vector!] + "Match if the list contains none of the provided vectors." excludesAll: [Vector!] } -"Update input of an Vector value" +"Update input of a Vector value." input Vector_Update { + "Set the field to the provided vector value." set: Vector @fdc_oneOf(group: "set") + "Set the field to the vector embedding result from a text input." set_embed: Vector_Embed @fdc_oneOf(group: "set") } -"Update input of a Vector list value" + +"Update input of a Vector list value." input Vector_ListUpdate { + "Replace the current list with the provided list of Vector values." set: [Vector] + "Append the provided Vector values to the existing list." append: [Vector] + "Prepend the provided Vector values to the existing list." prepend: [Vector] + "Delete the vector at the specified index." delete: Int + "The index of the vector to be updated." i: Int + "Update the vector at the specified index." update: Vector } """ Create a vector embedding of text using the given model on Vertex AI. -Example: {text: "Hi there", model: "textembedding-gecko@003"} -See: https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings +Cloud SQL for Postgresql natively integrates with [Vertex AI Text embeddings API](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api) +to effectively generate text embeddings. + +If you uses [`Vector`](scalar.md#Vector) in your schema, Firebase Data Connect automatically installs +[`pgvector`](https://github.com/pgvector/pgvector) and [`google_ml_integration`](https://cloud.google.com/sql/docs/postgres/integrate-cloud-sql-with-vertex-ai) +Postgres extensions in your Cloud SQL database. + +Given a Post table with a `Vector` embedding field. + +```graphql +type Post @table { + content: String! + contentEmbedding: Vector @col(size:768) +} +``` + +###### Example: Insert embedding + +```graphql +mutation CreatePost($content: String!) { + post_insert(data: { + content: $content, + contentEmbedding_embed: {model: "textembedding-gecko@003", text: $content}, + }) +} +``` -Limitation: In the emulator, if Vertex AI is not configured, a pseudorandom -vector is generated from text as a fake implementation for testing only. +###### Example: Vector similarity Search + +```graphql +query SearchPost($query: String!) { + posts_contentEmbedding_similarity(compare_embed: {model: "textembedding-gecko@003", text: $query}) { + id + content + } +} +``` """ input Vector_Embed @fdc_forbiddenAsVariableType { + """ + The model to use for vector embedding. + Recommend the latest stable model: `textembedding-gecko@003`. + """ model: Vector_Embed_Model! + "The text to generate the vector embedding from." text: String! } """ -A string that specifies a Vertex AI model and version. +The Vertex AI model version that is required in input `Vector_Embed`. -It is strongly recommended to specify a stable model version (for example, -textembedding-gecko@003). The latest version of a model is in Preview and is not -General Availability (GA). Because the latest version is in Preview, it isn't -guaranteed to be production ready. +It is recommended to use the latest stable model version: `textembedding-gecko@003`. + +View all supported [Vertex AI Text embeddings APIs](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api). """ scalar Vector_Embed_Model @specifiedBy(url: "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versioning") @fdc_forbiddenAsVariableType @fdc_forbiddenAsFieldType @fdc_example(value: "textembedding-gecko@003", description: "A stable version of the textembedding-gecko model") + @fdc_example(value: "textembedding-gecko@001", description: "An older version of the textembedding-gecko model") + @fdc_example(value: "text-embedding-004", description: "Annother textembedding model") + diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql index edbebe5..00d4247 100644 --- a/Examples/FriendlyFlix/dataconnect/schema/schema.gql +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -1,5 +1,5 @@ # Movies -# TODO: Fill out Movie table +# TODO: Fill out Movie table! type Movie # The below parameter values are generated by default with @table, and can be edited manually. @table { From 6f0b87334e4fe9c1f2dab5e7507b736f2ce0ac3e Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 8 Oct 2024 19:34:49 +0100 Subject: [PATCH 08/50] =?UTF-8?q?=F0=9F=8E=A8=20=20Trim=20trailing=20white?= =?UTF-8?q?=20spaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index be7abcd..272907a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -292,7 +292,7 @@ DataConnect.friendlyFlixConnector.searchAllQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -308,7 +308,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -324,7 +324,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -342,7 +342,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -360,7 +360,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -376,7 +376,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` From 44c635dedfbc898f2fde2ae3b80ce67f4bfa6818 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 9 Oct 2024 12:15:41 +0100 Subject: [PATCH 09/50] =?UTF-8?q?=F0=9F=8E=A8=20=20Formatting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../Sources/FriendlyFlixClient.swift | 79 +- .../Sources/FriendlyFlixKeys.swift | 334 +- .../Sources/FriendlyFlixOperations.swift | 3926 ++++++----------- 4 files changed, 1642 insertions(+), 2750 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 52016e3..e0619f4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,31 +4,30 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") - ], - path: "Sources" - ) - ] -) + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"] + ), + ], + dependencies: [ + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), + ], + path: "Sources" + ), + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index d0b2143..c11e739 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,63 +1,60 @@ -import Foundation import FirebaseDataConnect - - - - - - +import Foundation public extension DataConnect { - static var friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) + let dc = DataConnect.dataConnect( + connectorConfig: FriendlyFlixConnector.connectorConfig, + callerSDKType: .generated + ) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "friendly-flix-service", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "friendly-flix-service", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - + // init operations + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let upsertUserMutation: UpsertUserMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addReviewMutation: AddReviewMutation -public let updateReviewMutation: UpdateReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let listMoviesQuery: ListMoviesQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let searchAllQuery: SearchAllQuery - + public let upsertUserMutation: UpsertUserMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addReviewMutation: AddReviewMutation + public let updateReviewMutation: UpdateReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let listMoviesQuery: ListMoviesQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let searchAllQuery: SearchAllQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index ba7810c..045f4d1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,430 +2,324 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } - - public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } - - public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } - - diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 4350f6f..2eb3861 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,44 +1,16 @@ import FirebaseDataConnect import Foundation - - - - - - - - - - - - - - - - - - - // MARK: Common Enums public enum OrderDirection: String, Codable { - case ASC = "ASC" - case DESC = "DESC" - } + case ASC + case DESC +} // End enum definitions - - - - - - - - -public class UpsertUserMutation{ - +public class UpsertUserMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -47,104 +19,69 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - + public var + username: String - - - - public init ( - -username: String - - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -153,104 +90,76 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -259,104 +168,75 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -365,148 +245,109 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable { + public var + review_insert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_insert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class UpdateReviewMutation{ + return try await ref.execute() + } +} +public class UpdateReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -515,148 +356,110 @@ public class UpdateReviewMutation{ public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable { + public var + review_update: ReviewKey? + } + public func ref(movieId: UUID, + rating: Int, -public var -review_update: ReviewKey? + reviewText: String) + -> MutationRef { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws + -> OperationResult { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -665,104 +468,69 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -771,271 +539,200 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -orderByRating: OrderDirection? + @OptionalVariable + public var + orderByRating: OrderDirection? - - @OptionalVariable - public var -orderByReleaseYear: OrderDirection? + @OptionalVariable + public var + orderByReleaseYear: OrderDirection? - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - -} + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case orderByRating - + case orderByReleaseYear - + case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + + if $orderByReleaseYear.isSet { + try codecHelper.encode( + orderByReleaseYear, + forKey: .orderByReleaseYear, + container: &container + ) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public var + genre: String? + public var + rating: Double? + public var + tags: [String]? -public var -title: String + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -imageUrl: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -releaseYear: Int? + case imageUrl + case releaseYear + case genre -public var -genre: String? + case rating + case tags + case description + } -public var -rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - + public var + movies: [Movie] } - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation } - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - + public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class GetMovieByIdQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class GetMovieByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1044,579 +741,395 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable { + public var + director: String? -public var -title: String + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -imageUrl: String + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -releaseYear: Int? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -genre: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -description: String? + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [ActorMainActors] -public var -tags: [String]? + public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct MovieMetadataMetadata: Decodable { - + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -director: String? + case name + case imageUrl + } - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - enum CodingKeys: String, CodingKey { - - case director - - } + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + reviewText: String? + public var + reviewDate: LocalDate -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { - + public var + rating: Int? + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String -public var -id: UUID + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -name: String + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] - - - - - -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case reviewText + case reviewDate -public var -name: String + case rating + case user + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] -public struct ReviewReviews: Decodable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -reviewText: String? + case imageUrl + case releaseYear + case genre -public var -reviewDate: LocalDate + case rating + case description + case tags -public var -rating: Int? + case metadata + case mainActors + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -username: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + public var + movie: Movie? } -} -public var -reviews: [ReviewReviews] + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -1625,382 +1138,257 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable { + public struct Actor: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + title: String + public var + genre: String? -public var -name: String + public var + tags: [String]? + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -imageUrl: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { - + case tags + case imageUrl + } -public var -id: UUID + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -title: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -genre: String? + public var + mainActors: [MovieMainActors] + public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public var -tags: [String]? + public var + genre: String? + public var + tags: [String]? + public var + imageUrl: String -public var -imageUrl: String + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } + enum CodingKeys: String, CodingKey { + case id - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } + case title - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { - + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -id: UUID + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [MovieSupportingActors] -public var -title: String + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } -public var -genre: String? + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl -public var -tags: [String]? + case mainActors + case supportingActors + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() } } -public var -actor: Actor? - - } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetCurrentUserQuery{ +public class GetCurrentUserQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2009,465 +1397,333 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable { + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String + public var + reviewDate: LocalDate + public var + reviewText: String? + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviews: Decodable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewDate -public var -reviewText: String? + case reviewText + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -id: UUID + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable { + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -title: String + public var + title: String + public var + genre: String? - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + imageUrl: String - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public var + releaseYear: Int? - + public var + rating: Double? - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + public var + description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } + public var + tags: [String]? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + public struct MovieMetadataMetadata: Decodable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] -public struct FavoriteMovieFavoriteMovies: Decodable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + case title + case genre -public var -id: UUID + case imageUrl + case releaseYear + case rating -public var -title: String + case description + case tags + case metadata + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -rating: Double? + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } -public var -description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] -public var -tags: [String]? + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public struct MovieMetadataMetadata: Decodable { - + case reviews + case favoriteMovies + } -public var -director: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - enum CodingKeys: String, CodingKey { - - case director - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - + public var + user: User? } -} -public var -metadata: [MovieMetadataMetadata] - - - public var movieKey: MovieKey { - return MovieKey( - - id: id + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - - } -} -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetIfFavoritedMovieQuery{ - +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect public init(dataConnect: DataConnect) { @@ -2476,836 +1732,582 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable { + public struct FavoriteMovie: Decodable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable { - + public var + favorite_movie: FavoriteMovie? + } + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) -public var -movieId: UUID + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + } + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) - - enum CodingKeys: String, CodingKey { - - case movieId - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } +} - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public class SearchAllQuery { + let dataConnect: DataConnect - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - + public init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } -} -public var -favorite_movie: FavoriteMovie? - } + public static let OperationName = "SearchAll" - public func ref( - -movieId: UUID - - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public typealias Ref = QueryRefObservation + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double -public class SearchAllQuery{ + public var + genre: String - let dataConnect: DataConnect + public init(minYear: Int, - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxYear: Int, - public static let OperationName = "SearchAll" + minRating: Double, - public typealias Ref = QueryRefObservation + maxRating: Double, - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + genre: String, - - - public var -minYear: Int + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - - - public var -maxYear: Int + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minRating: Double + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxRating: Double + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minYear) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable { + public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { - - + public var + imageUrl: String -public var -id: UUID + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } + public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } + public var + title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + public var + genre: String? + public var + rating: Double? + public var + imageUrl: String + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case title + case genre + case rating -public var -title: String + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -genre: String? + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -imageUrl: String + public var + name: String + public var + imageUrl: String - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { - + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable { + public var + id: UUID + public var + rating: Int? -public var -name: String + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -imageUrl: String + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } + enum CodingKeys: String, CodingKey { + case id - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public struct ReviewReviewsMatchingText: Decodable { - + public struct User: Decodable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String -public var -id: UUID + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } -public var -rating: Int? + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -reviewText: String? + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } + public var + user: User -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewText + case reviewDate + case movie -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { - + case user + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -id: UUID + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -title: String + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - + public var + reviewsMatchingText: [ReviewReviewsMatchingText] } - + public func ref(minYear: Int, - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + maxYear: Int, + minRating: Double, + maxRating: Double, + genre: String, + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) -public struct User: Decodable ,Hashable, Equatable, Identifiable { - + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } -public var -id: String + public func execute(minYear: Int, + maxYear: Int, + minRating: Double, -public var -username: String + maxRating: Double, + genre: String, - - public var userKey: UserKey { - return UserKey( - - id: id + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } + if let optionalVars { + optionalVars(&variables) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation + return try await refCast.execute() } - - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - From 7f79b7b5b555a8169efa4b8d52d23df3e9ffb485 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Thu, 17 Oct 2024 16:49:48 +0200 Subject: [PATCH 10/50] Add missing copyright headers Signed-off-by: Peter Friese --- .../Features/Details/DetailsSection.swift | 7 +------ .../Features/Details/MovieDetailsView.swift | 7 +------ .../Features/Details/MovieReviewCard.swift | 7 +------ .../Features/Details/StarRatingView.swift | 7 +------ .../FriendlyFlix/Features/Hero/CardView.swift | 7 +------ .../FriendlyFlix/Features/Hero/GradientView.swift | 7 +------ .../FriendlyFlix/Features/List/MovieCardView.swift | 7 +------ .../FriendlyFlix/Features/List/MoviesList.swift | 7 +------ .../FriendlyFlix/FriendlyFlixApp.swift | 7 +------ .../FriendlyFlix/Utilities/Color+Hex.swift | 7 +------ .../Utilities/String+Placeholder.swift | 7 +------ .../Utilities/String+StringInterpolation.swift | 7 +------ .../FriendlyFlix/Utilities/View+Extensions.swift | 7 +------ .../FriendlyFlixTests/FriendlyFlixTests.swift | 7 +------ .../FriendlyFlixUITests/FriendlyFlixUITests.swift | 7 +------ .../FriendlyFlixUITestsLaunchTests.swift | 7 +------ .../FriendlyFlix/app/FriendlyFlixSDK/Package.swift | 14 ++++++++++++++ .../Sources/FriendlyFlixClient.swift | 14 ++++++++++++++ .../FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift | 14 ++++++++++++++ .../Sources/FriendlyFlixOperations.swift | 14 ++++++++++++++ 20 files changed, 72 insertions(+), 96 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift index fed8cfb..42f6c16 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift @@ -1,9 +1,4 @@ -// -// DetailsSection.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift index 13cdf1e..f537ec5 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -1,9 +1,4 @@ -// -// MovieDetailsView.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift index 256ee38..bfdf553 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift @@ -1,9 +1,4 @@ -// -// MovieReviewCard.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift index 24f5c6e..789171e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift @@ -1,9 +1,4 @@ -// -// StarRatingView.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift index 8b12ca7..5801b5c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift @@ -1,9 +1,4 @@ -// -// CardView.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift index 2376cd9..b0c025f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift @@ -1,9 +1,4 @@ -// -// GradientView.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift index d9f2f60..8983ce9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift @@ -1,9 +1,4 @@ -// -// MovieCardView.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift index 2651199..c2fc7c1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift @@ -1,9 +1,4 @@ -// -// MoviesList.swift -// FriendlyFlix -// -// Created by Peter Friese on 27.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift index 2a69bd3..b3e8451 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift @@ -1,9 +1,4 @@ -// -// FriendlyFlixApp.swift -// FriendlyFlix -// -// Created by Peter Friese on 27.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index 0d79d48..36e3804 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -1,9 +1,4 @@ -// -// Color+Hex.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift index 547c0c3..9daeba9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift @@ -1,9 +1,4 @@ -// -// String+Placeholder.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift index a744357..0bcf514 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -1,9 +1,4 @@ -// -// String+StringInterpolation.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift index 475f4c0..c46ebd6 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift @@ -1,9 +1,4 @@ -// -// View+Extensions.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift index b358975..82cce47 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift @@ -1,9 +1,4 @@ -// -// FriendlyFlixTests.swift -// FriendlyFlixTests -// -// Created by Peter Friese on 27.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift index 6660d98..d4f0371 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift @@ -1,9 +1,4 @@ -// -// FriendlyFlixUITests.swift -// FriendlyFlixUITests -// -// Created by Peter Friese on 27.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift index 416b40a..620186e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift @@ -1,9 +1,4 @@ -// -// FriendlyFlixUITestsLaunchTests.swift -// FriendlyFlixUITests -// -// Created by Peter Friese on 27.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index e0619f4..05d07b1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index c11e739..7755748 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import FirebaseDataConnect import Foundation diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 045f4d1..29fb22a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseDataConnect diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 2eb3861..69a04df 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import FirebaseDataConnect import Foundation From 2602d3833b67b3e076989567e0b8bc9275786718 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Thu, 17 Oct 2024 17:20:17 +0200 Subject: [PATCH 11/50] Fix card dimensions Signed-off-by: Peter Friese --- .../FriendlyFlix/Features/Hero/CardView.swift | 1 - .../FriendlyFlix/Features/List/MovieCardView.swift | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift index 5801b5c..6bbd13a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift @@ -67,7 +67,6 @@ struct CardView: View { dismissButton heroTitle() } - .frame(height: 450) .clipShape( UnevenRoundedRectangle( cornerRadii: .init( diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift index 8983ce9..151ecac 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift @@ -28,16 +28,18 @@ struct MovieCardView: View { if let image = phase.image { image .resizable() - .aspectRatio(contentMode: .fill) - .frame(height: 450) + .scaledToFit() + .frame(maxWidth: .infinity) + .clipped() } else if phase.error != nil { Color.red .redacted(if: true) } else { Image(systemName: "photo.artframe") .resizable() - .aspectRatio(contentMode: .fit) - .frame(height: 450) + .scaledToFit() + .frame(maxWidth: .infinity) + .clipped() .redacted(reason: .placeholder) } } From 7b554bf682ef90bcc2b72255cb356fd51d5dd766 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 21 Oct 2024 17:00:14 +0200 Subject: [PATCH 12/50] Update README Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 72 ++++++++++++++++++- .../{moviedata_insert.gql => data_seed.gql} | 0 2 files changed, 71 insertions(+), 1 deletion(-) rename Examples/FriendlyFlix/dataconnect/{moviedata_insert.gql => data_seed.gql} (100%) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index 7eee8e2..92f4d41 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -1,3 +1,73 @@ # FriendlyFlix -A sample app for Firebase DataConnect \ No newline at end of file +## Introduction + +This quickstart is a movie tracker app to demonstrate the use of Firebase Data Connect + with a Cloud SQL database. + +For more information about Firebase Data Connect visit [the docs](https://firebase.google.com/docs/data-connect/). + +## Getting Started + +Follow these steps to get up and running with Firebase Data Connect. For more detailed instructions, +check out the [official documentation](https://firebase.google.com/docs/data-connect/quickstart). + +### 0. Prerequisites +- Latest version of [Xcode](https://developer.apple.com/xcode/) +- Latest version of [Visual Studio Code](https://code.visualstudio.com/) +- The [Firebase Data Connect VS Code Extension](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.firebase-dataconnect-vscode) + +### 1. Connect to your Firebase project + +1. If you haven't already, create a Firebase project. + * In the [Firebase console](https://console.firebase.google.com), click + **Add project**, then follow the on-screen instructions. + +2. Upgrade your project to the Blaze plan. This lets you create a Cloud SQL + for PostgreSQL instance. + + > Note: Though you set up billing in your Blaze upgrade, you won't be + charged for usage of Firebase Data Connect or the + [default Cloud SQL for PostgreSQL configuration](https://firebase.google.com/docs/data-connect/#pricing) during the preview. + +3. Navigate to the [Data Connect section](https://console.firebase.google.com/u/0/project/_/dataconnect) + of the Firebase console, click on the "Get Started" button and follow the setup workflow: + - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. + - Select the option to create a new Cloud SQL instance and fill in the following fields: + - Service ID: `dataconnect` + - Cloud SQL Instance ID: `fdc-sql` + - Database name: `fdcdb` +4. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance + can be managed in the [Cloud Console](https://console.cloud.google.com/sql). + +5. If you haven’t already, add an iOS app to your Firebase project, using `com.google.firebase.samples.FriendlyFlix` as the bundle ID. + Click **Download GoogleService-Info.plist** to obtain your Firebase config file. + +### 2. Cloning the repository + +1. Clone this repository to your local machine: + ```sh + git clone https://github.com/firebase/data-connect-ios-sdk.git + ``` + +2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the + `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist` directory. + +### 3. Open in Visual Studio Code (VS Code) + +1. Open the `data-connect-ios-sdk/Examples/FriendlyFlix` directory in VS Code. +2. Click on the Firebase Data Connect icon on the VS Code sidebar to load the Extension. + a. Sign in with your Google Account if you haven't already. +3. Click on "Connect a Firebase project" and choose the project where you have set up Data Connect. +4. Click on "Start Emulators" - this should generate the Swift SDK for you and start the emulators. + +### 4. Populate the database +In VS Code, open the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/data_seed.gql` file and click the + `Run (local)` button at the top of the file. + +If you’d like to confirm that the data was correctly inserted, +open `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql` and run the `ListMovies` query. + +### 5. Running the app + +Press the Run button in Xcode to run the sample app on the iOS Simulator. diff --git a/Examples/FriendlyFlix/dataconnect/moviedata_insert.gql b/Examples/FriendlyFlix/dataconnect/data_seed.gql similarity index 100% rename from Examples/FriendlyFlix/dataconnect/moviedata_insert.gql rename to Examples/FriendlyFlix/dataconnect/data_seed.gql From a9f7f951eb7126cdca20e659f3993db3e9e78b87 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 21 Oct 2024 17:02:11 +0200 Subject: [PATCH 13/50] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20trailing=20whitespac?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index 92f4d41..e3b182c 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -32,7 +32,7 @@ check out the [official documentation](https://firebase.google.com/docs/data-con 3. Navigate to the [Data Connect section](https://console.firebase.google.com/u/0/project/_/dataconnect) of the Firebase console, click on the "Get Started" button and follow the setup workflow: - - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. + - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. - Select the option to create a new Cloud SQL instance and fill in the following fields: - Service ID: `dataconnect` - Cloud SQL Instance ID: `fdc-sql` @@ -50,7 +50,7 @@ check out the [official documentation](https://firebase.google.com/docs/data-con git clone https://github.com/firebase/data-connect-ios-sdk.git ``` -2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the +2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist` directory. ### 3. Open in Visual Studio Code (VS Code) From a2b95927010a20bfee5e0639a54fc30881110f3b Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 21 Oct 2024 17:33:09 +0200 Subject: [PATCH 14/50] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20New=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../FriendlyFlix.xcodeproj/project.pbxproj | 358 ++---------------- .../xcschemes/FriendlyFlix.xcscheme | 30 +- .../FriendlyFlixApp.swift} | 39 +- .../FriendlyFlix/App/RootView.swift | 52 +++ .../hitchhiker.imageset/Contents.json | 21 + .../yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg | Bin 0 -> 150677 bytes .../interstellar.imageset/Contents.json | 21 + .../gEU2QniE6E77NI6lCU6MxlNBvIx.jpg | Bin 0 -> 434049 bytes .../login.imageset/Contents.json | 21 + .../Assets.xcassets/login.imageset/Login.png | Bin 0 -> 33698 bytes .../matrix.imageset/Contents.json | 21 + .../f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg | Bin 0 -> 111650 bytes .../slowhorses.imageset/Contents.json | 21 + .../dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg | Bin 0 -> 362505 bytes .../9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg | Bin 0 -> 565515 bytes .../titanic.imageset/Contents.json | 21 + .../tomorrowneverdies.imageset/Contents.json | 21 + .../gZm002w7q9yLOkltxT76TWGfdZX.jpg | Bin 0 -> 357910 bytes .../uncle.imageset/Contents.json | 21 + .../y5yZaForGSJbPD66Cvq9AT5WMAD.jpg | Bin 0 -> 274126 bytes .../Authentication/AccountScreen.swift | 71 ++++ .../Authentication/AuthenticationScreen.swift | 227 +++++++++++ .../AuthenticationToolbarButton.swift | 43 +++ .../Features/Categories/CategoriesView.swift | 55 +++ .../Categories/CategoryCardView.swift | 94 +++++ .../Features/Details/DetailsSection.swift | 88 ----- .../{List => Details}/MovieCardView.swift | 24 +- .../Features/Details/MovieDetailsView.swift | 157 -------- .../Features/Details/MovieReviewCard.swift | 65 ---- .../Features/Home/DetailsSection.swift | 80 ++++ .../Features/Home/HomeScreen.swift | 72 ++++ .../Features/Home/MovieTeaserView.swift | 73 ++++ .../Features/Library/LibraryScreen.swift | 70 ++++ .../Features/List/MoviesList.swift | 60 --- .../Features/MovieList/MovieListScreen.swift | 49 +++ .../Features/Search/SearchScreen.swift | 94 +++++ .../Mockable.swift} | 31 +- .../FriendlyFlix/Model/Movie.swift | 101 +++++ ...ns.swift => ButtonStyle+NoHighlight.swift} | 20 +- .../FriendlyFlix/Utilities/Color+Hex.swift | 7 +- .../Utilities/String+Placeholder.swift | 21 - .../String+StringInterpolation.swift | 7 +- .../Utilities/View+Extension.swift | 47 +++ .../{Features/Hero => Views}/CardView.swift | 10 +- .../GradienConfiguration.swift} | 7 +- .../FriendlyFlix/Views/MovieListRowView.swift | 76 ++++ .../FriendlyFlix/Views/MovieListSection.swift | 72 ++++ .../FriendlyFlix/Views/MovieTileView.swift | 80 ++++ .../FriendlyFlixTests/FriendlyFlixTests.swift | 23 -- .../FriendlyFlixUITests.swift | 52 --- .../FriendlyFlixUITestsLaunchTests.swift | 39 -- 51 files changed, 1653 insertions(+), 909 deletions(-) rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/{Features/Details/StarRatingView.swift => App/FriendlyFlixApp.swift} (50%) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/interstellar.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/interstellar.imageset/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/slowhorses.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/slowhorses.imageset/dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/uncle.imageset/Contents.json create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/uncle.imageset/y5yZaForGSJbPD66Cvq9AT5WMAD.jpg create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/{List => Details}/MovieCardView.swift (83%) delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/{FriendlyFlixApp.swift => Model/Mockable.swift} (62%) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/{View+Extensions.swift => ButtonStyle+NoHighlight.swift} (60%) delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/{Features/Hero => Views}/CardView.swift (98%) rename Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/{Features/Hero/GradientView.swift => Views/GradienConfiguration.swift} (98%) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj index c5db3f0..e7d2262 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj @@ -6,72 +6,20 @@ objectVersion = 77; objects = { -/* Begin PBXBuildFile section */ - 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */; }; - 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */; }; - 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; - remoteInfo = FriendlyFlix; - }; - 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 884EA4C42C7E0CC7009866B5 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 884EA4CB2C7E0CC7009866B5; - remoteInfo = FriendlyFlix; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ - 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FriendlyFlix.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FriendlyFlixUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FriendlyFlix.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */ = { + 88A9E6362CA834C600B3C4EF /* FriendlyFlix */ = { isa = PBXFileSystemSynchronizedRootGroup; path = FriendlyFlix; sourceTree = ""; }; - 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = FriendlyFlixTests; - sourceTree = ""; - }; - 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = FriendlyFlixUITests; - sourceTree = ""; - }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ - 884EA4C92C7E0CC7009866B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 887822772CA2EFCA00DE73A1 /* FriendlyFlixSDK in Frameworks */, - 8878227D2CA2FAB200DE73A1 /* FirebaseAuth in Frameworks */, - 8878227A2CA2F95300DE73A1 /* FriendlyFlixSDK in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4D92C7E0CC8009866B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4E32C7E0CC8009866B5 /* Frameworks */ = { + 88A9E6312CA834C600B3C4EF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -81,22 +29,18 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 884EA4C32C7E0CC7009866B5 = { + 88A9E62B2CA834C600B3C4EF = { isa = PBXGroup; children = ( - 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, - 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, - 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, - 884EA4CD2C7E0CC7009866B5 /* Products */, + 88A9E6362CA834C600B3C4EF /* FriendlyFlix */, + 88A9E6352CA834C600B3C4EF /* Products */, ); sourceTree = ""; }; - 884EA4CD2C7E0CC7009866B5 /* Products */ = { + 88A9E6352CA834C600B3C4EF /* Products */ = { isa = PBXGroup; children = ( - 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */, - 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */, - 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */, + 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */, ); name = Products; sourceTree = ""; @@ -104,141 +48,64 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */ = { + 88A9E6332CA834C600B3C4EF /* FriendlyFlix */ = { isa = PBXNativeTarget; - buildConfigurationList = 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */; + buildConfigurationList = 88A9E6422CA834C700B3C4EF /* Build configuration list for PBXNativeTarget "FriendlyFlix" */; buildPhases = ( - 884EA4C82C7E0CC7009866B5 /* Sources */, - 884EA4C92C7E0CC7009866B5 /* Frameworks */, - 884EA4CA2C7E0CC7009866B5 /* Resources */, + 88A9E6302CA834C600B3C4EF /* Sources */, + 88A9E6312CA834C600B3C4EF /* Frameworks */, + 88A9E6322CA834C600B3C4EF /* Resources */, ); buildRules = ( ); dependencies = ( ); fileSystemSynchronizedGroups = ( - 884EA4CE2C7E0CC7009866B5 /* FriendlyFlix */, + 88A9E6362CA834C600B3C4EF /* FriendlyFlix */, ); name = FriendlyFlix; packageProductDependencies = ( - 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */, - 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */, - 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */, ); productName = FriendlyFlix; - productReference = 884EA4CC2C7E0CC7009866B5 /* FriendlyFlix.app */; + productReference = 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */; productType = "com.apple.product-type.application"; }; - 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */; - buildPhases = ( - 884EA4D82C7E0CC8009866B5 /* Sources */, - 884EA4D92C7E0CC8009866B5 /* Frameworks */, - 884EA4DA2C7E0CC8009866B5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 884EA4DF2C7E0CC8009866B5 /* FriendlyFlixTests */, - ); - name = FriendlyFlixTests; - packageProductDependencies = ( - ); - productName = FriendlyFlixTests; - productReference = 884EA4DC2C7E0CC8009866B5 /* FriendlyFlixTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */; - buildPhases = ( - 884EA4E22C7E0CC8009866B5 /* Sources */, - 884EA4E32C7E0CC8009866B5 /* Frameworks */, - 884EA4E42C7E0CC8009866B5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 884EA4E92C7E0CC8009866B5 /* FriendlyFlixUITests */, - ); - name = FriendlyFlixUITests; - packageProductDependencies = ( - ); - productName = FriendlyFlixUITests; - productReference = 884EA4E62C7E0CC8009866B5 /* FriendlyFlixUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 884EA4C42C7E0CC7009866B5 /* Project object */ = { + 88A9E62C2CA834C600B3C4EF /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1600; LastUpgradeCheck = 1600; TargetAttributes = { - 884EA4CB2C7E0CC7009866B5 = { - CreatedOnToolsVersion = 16.0; - }; - 884EA4DB2C7E0CC8009866B5 = { - CreatedOnToolsVersion = 16.0; - TestTargetID = 884EA4CB2C7E0CC7009866B5; - }; - 884EA4E52C7E0CC8009866B5 = { + 88A9E6332CA834C600B3C4EF = { CreatedOnToolsVersion = 16.0; - TestTargetID = 884EA4CB2C7E0CC7009866B5; }; }; }; - buildConfigurationList = 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */; + buildConfigurationList = 88A9E62F2CA834C600B3C4EF /* Build configuration list for PBXProject "FriendlyFlix" */; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 884EA4C32C7E0CC7009866B5; + mainGroup = 88A9E62B2CA834C600B3C4EF; minimizedProjectReferenceProxies = 1; - packageReferences = ( - 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */, - 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, - ); preferredProjectObjectVersion = 77; - productRefGroup = 884EA4CD2C7E0CC7009866B5 /* Products */; + productRefGroup = 88A9E6352CA834C600B3C4EF /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */, - 884EA4DB2C7E0CC8009866B5 /* FriendlyFlixTests */, - 884EA4E52C7E0CC8009866B5 /* FriendlyFlixUITests */, + 88A9E6332CA834C600B3C4EF /* FriendlyFlix */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 884EA4CA2C7E0CC7009866B5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4DA2C7E0CC8009866B5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4E42C7E0CC8009866B5 /* Resources */ = { + 88A9E6322CA834C600B3C4EF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -248,21 +115,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 884EA4C82C7E0CC7009866B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4D82C7E0CC8009866B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 884EA4E22C7E0CC8009866B5 /* Sources */ = { + 88A9E6302CA834C600B3C4EF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -271,21 +124,8 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 884EA4DE2C7E0CC8009866B5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; - targetProxy = 884EA4DD2C7E0CC8009866B5 /* PBXContainerItemProxy */; - }; - 884EA4E82C7E0CC8009866B5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 884EA4CB2C7E0CC7009866B5 /* FriendlyFlix */; - targetProxy = 884EA4E72C7E0CC8009866B5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ - 884EA4EE2C7E0CC8009866B5 /* Debug */ = { + 88A9E6402CA834C700B3C4EF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -348,7 +188,7 @@ }; name = Debug; }; - 884EA4EF2C7E0CC8009866B5 /* Release */ = { + 88A9E6412CA834C700B3C4EF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -404,7 +244,7 @@ }; name = Release; }; - 884EA4F12C7E0CC8009866B5 /* Debug */ = { + 88A9E6432CA834C700B3C4EF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -420,16 +260,11 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "-Xlinker", - "-interposable", - ); PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlix; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -438,7 +273,7 @@ }; name = Debug; }; - 884EA4F22C7E0CC8009866B5 /* Release */ = { + 88A9E6442CA834C700B3C4EF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -454,7 +289,6 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -468,152 +302,28 @@ }; name = Release; }; - 884EA4F42C7E0CC8009866B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = YGAZHQXHH4; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; - }; - name = Debug; - }; - 884EA4F52C7E0CC8009866B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = YGAZHQXHH4; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FriendlyFlix.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FriendlyFlix"; - }; - name = Release; - }; - 884EA4F72C7E0CC8009866B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = YGAZHQXHH4; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FriendlyFlix; - }; - name = Debug; - }; - 884EA4F82C7E0CC8009866B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = YGAZHQXHH4; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.FriendlyFlixUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FriendlyFlix; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 884EA4C72C7E0CC7009866B5 /* Build configuration list for PBXProject "FriendlyFlix" */ = { + 88A9E62F2CA834C600B3C4EF /* Build configuration list for PBXProject "FriendlyFlix" */ = { isa = XCConfigurationList; buildConfigurations = ( - 884EA4EE2C7E0CC8009866B5 /* Debug */, - 884EA4EF2C7E0CC8009866B5 /* Release */, + 88A9E6402CA834C700B3C4EF /* Debug */, + 88A9E6412CA834C700B3C4EF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 884EA4F02C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlix" */ = { + 88A9E6422CA834C700B3C4EF /* Build configuration list for PBXNativeTarget "FriendlyFlix" */ = { isa = XCConfigurationList; buildConfigurations = ( - 884EA4F12C7E0CC8009866B5 /* Debug */, - 884EA4F22C7E0CC8009866B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 884EA4F32C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 884EA4F42C7E0CC8009866B5 /* Debug */, - 884EA4F52C7E0CC8009866B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 884EA4F62C7E0CC8009866B5 /* Build configuration list for PBXNativeTarget "FriendlyFlixUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 884EA4F72C7E0CC8009866B5 /* Debug */, - 884EA4F82C7E0CC8009866B5 /* Release */, + 88A9E6432CA834C700B3C4EF /* Debug */, + 88A9E6442CA834C700B3C4EF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ - -/* Begin XCLocalSwiftPackageReference section */ - 887822782CA2F95300DE73A1 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */ = { - isa = XCLocalSwiftPackageReference; - relativePath = ../FriendlyFlixSDK; - }; -/* End XCLocalSwiftPackageReference section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; - requirement = { - branch = main; - kind = branch; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 887822762CA2EFCA00DE73A1 /* FriendlyFlixSDK */ = { - isa = XCSwiftPackageProductDependency; - productName = FriendlyFlixSDK; - }; - 887822792CA2F95300DE73A1 /* FriendlyFlixSDK */ = { - isa = XCSwiftPackageProductDependency; - productName = FriendlyFlixSDK; - }; - 8878227C2CA2FAB200DE73A1 /* FirebaseAuth */ = { - isa = XCSwiftPackageProductDependency; - package = 8878227B2CA2FAB200DE73A1 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAuth; - }; -/* End XCSwiftPackageProductDependency section */ }; - rootObject = 884EA4C42C7E0CC7009866B5 /* Project object */; + rootObject = 88A9E62C2CA834C600B3C4EF /* Project object */; } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme index 7bc5f51..3e0042c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme @@ -15,7 +15,7 @@ buildForAnalyzing = "YES"> @@ -29,30 +29,6 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" shouldAutocreateTestPlan = "YES"> - - - - - - - - - - @@ -85,7 +61,7 @@ runnableDebuggingMode = "0"> diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift similarity index 50% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index 789171e..fe8cdce 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/StarRatingView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// FriendlyFlixMocksApp.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,25 +18,26 @@ import SwiftUI -struct StarRatingView: View { - var rating: Double - - var body: some View { - HStack(spacing: 4) { - ForEach(0 ..< 5) { index in - Image(systemName: self.starType(for: index)) - .foregroundColor(.yellow) - } +@main +struct FriendlyFlixApp: App { + private func loadRocketSimConnect() { +#if DEBUG + guard (Bundle(path: "/Applications/RocketSim.app/Contents/Frameworks/RocketSimConnectLinker.nocache.framework")?.load() == true) else { + print("Failed to load linker framework") + return } + print("RocketSim Connect successfully linked") +#endif + } + + init () { + loadRocketSimConnect() } - func starType(for index: Int) -> String { - if rating > Double(index) + 0.75 { - return "star.fill" - } else if rating > Double(index) + 0.25 { - return "star.lefthalf.fill" - } else { - return "star" + var body: some Scene { + WindowGroup { + RootView() + .environment(AuthenticationViewModel()) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift new file mode 100644 index 0000000..8827867 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift @@ -0,0 +1,52 @@ +// +// RootView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 10.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct RootView: View { + @Environment(AuthenticationViewModel.self) private var authenticationViewModel + + var body: some View { + @Bindable var authenticationViewModel = authenticationViewModel + TabView { + HomeScreen() + .tabItem { + Label("Home", systemImage: "house") + } + SearchScreen() + .tabItem { + Label("Search", systemImage: "magnifyingglass") + } + LibraryScreen() + .tabItem { + Label("Library", systemImage: "rectangle.on.rectangle") + } + } + .sheet(isPresented: $authenticationViewModel.presentingAuthenticationDialog) { + AuthenticationScreen() + } + .sheet(isPresented: $authenticationViewModel.presentingAccountDialog) { + AccountScreen() + } + } +} + +#Preview { + RootView() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json new file mode 100644 index 0000000..4f159c6 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c71309f40bd76367f8ddf07af62ed0202f042676 GIT binary patch literal 150677 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

jv;sqlHir@mg8 zb+?$tB<(CM<{w_+)k4@st=j5SsW_Cezrx%{>(q7Xr?#D$m@aC2UW9Qul?k+gUsSSo z$8~USB+ihjZ*rFJ)QUVj_qSJPNo}FBLcL3w^r)6Ni)f5BD#>uieeLb!oz+xUgaTbs zVXFqPId*7VXIH&4wiK1X<&I34R62p=h|btilFrYJ(K++ymM9O+U}u-N^nu2CHZ>d! z225$g2B2Ct$l0?`s2niCreMcq1Crw-QNSlBm!3?e4h?v&9edI`8#)qRtYarNd1H~T zA-4^usM+-pm3bszO5Oy*+&bGq6`q~tK$ZmwHMaGlWgctS*}{^t z6K3#%QQA!^>kEYG+aTUeZe@{FDv&5UsYVXdFx`4`Dh$f*Dtch(cM50DM_G*65T>Lmn{YdVXuZTb6nsMI@!E*F;kw3D1~$~P&iVO%2Z zw5)C7M(F)aeKk5rIL$WXoMWCfc%pS8;yhPw7a7cYE#OOqR_fVJ6f+l?Wqu{PvdTS4 zYc##<*fE2Out=mcEQRTMaZTU#5#HwBXOq%;@|gO1&VUz5-*p z2|JqQ7^IAV$Z{5Li$n1J z(%UQ~3z>$Ya}00v;yOMh`s*&DYU|-ynqP_P6uIfgh(4P_vAl{TlR~q;3ahb=-B}_~ zyrPK6dpw+ttF!~}$w&a@bIFRfj3$~M**kmE7gO6oOR}ik@hD-mjtG%gT(%R#Y_|`9 z7vGXe)6!$eWyTJClx@x^5H)3U&xYB{eId}jknoFOxOB}w4ztJpI#k>qF5_R&UNyaPNmfVBlHcbPVIzbqrjPFmUJ-#a>fC<_45V;lHa5Kw#1NN+V ztW;|WRt{J)>P^?qn$cP-r-~@Or88P81m3OGwVnR}Jhm~Nix$RDF0p0Yjapu9QVJSO zEhLgLXks%+v4R1XCH~lAIW96XG8Q8zQIvMZgr81DzXhJ*bpily;qm_f^2T3)T!EC4 z8l4$V7!cIKbJ|G&RyiO|V_rhL7ScVdgF)515A3$O@2;-yJs08n!>wX6zC$4fLUaI&c+upC}o_4iZab>!CNcUMyAsge}zdA zzsyvT4^(kfw$}Gq>qp%@4R15V-gyq6Zb8biM%24<3Rr-nBw1XeZY! z!mnEL;%P;*K8SAT{XdNANyO$q2~b7!%ho(lh>%Taq%9j{Vt~aGN+M|$rnJ_I(MSTE zmCYFIMQJtDuAOwNrCmDdS5CTg5LSxQT5C>gK&Wh;hNl`;RLHE5cE@unSz84~?&p}2 zKvZj5GDt>^Ssczgcc5ce2TrBs!fjdCQ!bd71I1iPw@g%H6uxTZ1IF5YSN$8SOMA5h zK7v%Yu+yaf0F$crlqa2qxe+}2OVsm)Kc%IL!Fv#P0a!r8bdM@kqru$^0Kxlkz;@6b zwWn$*`awQ4)|%l8dT`@$PsFU%XFXtRh3ViP#G1*G{x#V4b>kr%$*wpnfZ-S}R3pts=2ltX3-(r#=?6kIi6yDmy!= zl~ub^8)zc*FHyc7rTt^GX@n@i&q0i>JlJOWv_oP4}9g-dq9+-ZeYIAaMI z?LsL)E4WLr-1=Tu-+k^vO14RIytS=(Cu)QTHQs%meC#;t9ph#u4h zSw$F%6gX=5WSN|rTV9#%%>-}BtH^LpMr(N6(?T=p_f#jqtu>;w)|%kb6`A4tWRf_B zr*%;BaBIl=JxJ=-(mNH9BQdF6p9m|A%&X8v^#!bAypm6xRx3u?tX3-(ip65FSgdo! zVuCU7q}NS{oC?DK0G)RJ4R>vUQCVD0eIy9@PrR~JalsDJAjv}~o#;i6dM$z5fHpwR z&4G7v_e4VqogBQ-%rAyfkh=Pfu=$QO0jGWyYXtHGAlE>JjWgngoC?Kau|N!r=NKE~#+uVa588xfybRE{ znEwE2>*1sxa4Vt*nWL=`{{Xs8eJtQ3wQEuRm9DG%U{)oQ{F;)=;rt~I7c>5(l$O#~mB%Anr@o>S~FCb*8=W!RTzxxai55L(4;5od1J0a$=@ z&lDldT}?~R8)ksbEv3tNh}2vT`Tap7t5`pm-74$UWR*ZI=77O!d#zVeL!7n}?j~XC zn%OX965_3HI=XcnnWm1yDF_*oTbUizvr>-oe9}hpI81cBHfALMnxg+g5j` zS?*%7xJbredy7EhvX2&*tb2PBQrIVYxsV%)HaJCRk%`S>u|){jf-6k~&NibHDZx{l zc#l>bRos$9H6}AB5tAN@d#NP#4I;vHkE+e-dnsATB()m{+Zi?dzF)--9x&R?d=mjd^rdQ$_)J!ZK3=*@@4aAFG3|;ZfBmSj z{{SGN-6CB_3MRi|aR@nz!QAFjYfLtgW$>#kv+)@;rpw6?GM_s9orQSi6iX(4pi{TK zTgDM}efp2R3%PK=Ql^-@hw)Jna1^%Hb#RbGWNKOZG2J;oUfSv{Qpfhoa}-gWwqD)R zDEjI33HYn28w(>;Rv?G#P9iOB7>!F^DJe7&Y6}<(H18=TjWcqGQd!yrN_6SSezGub z9IvNC=nER419MZML*MF1zLE5b5$E2P0gRTw=tZYn%4vnVV-ahwp@7R7rRdA3s^mS& z{8hcQOH&O(rn4mNNoauYxw?FnKt7yv{8S3@)|pSau8g0(d_1-Aav#ln3)jF8b`|hY z`?}TA#R}mt&m{A!Y3YWmV-(A_&aRsD>Q*tT$f1!F0yF+qq=NUM z%c$&;!45wgiu*-{$ zDpOy=L8f4i;zyekMDe||F&L-z`j{6I!3N16Qd@YXRm`uK>PD}ikQ!@vWngkcMPnI# zQWEti4~dRJ!D}gujAm@4_v^H9FJ-O$wX?GeV$3+ji+L`!FB7pVwA8m&vUN0T!?Cz> zd@Y=f47mffo=u7kvpKCZ{%fNt`|IJqEkfC8k|>d#wiiDWGaU9&j4l(QnGX$ams&zI zJHTCZb^2UB@w({?oYtDsKOZ@jN4**U0BwW2_{pX*#rl$Bn*8TX5n{d?X%4yHO+#)6 z=|@^4hrQc-jv~+54MAd9>YKyVAtHEo^XSWpKIuMcD2$Tg@iGWUdZ5 zTP6W~@+ON`uF7t+3<)r0jzInAG;L*qINYwzK>%v*l1{Y3HuEB?!5gkIA!wM!-g>oe zuW9omSI33X!PRJP(VV496Ct)x-3i32;Prd>RwY*!GKZf;%Gduvgy;y?o= zff9%Y;YRrKN9rVhWOpEXX2FVGTVsEc=IUFE$t@JGPDwhCAr&r?bJfsd62_2(mAYwW znj1i6TUfexwuz4JdsdAfYK&PGO>v{i;%dvva@*{-ntjV!t&d05r69Xi^j)2~J~Jgu#pNXUtIiA8Zc zfU4SjaJ!_2T{3zhkN^d|tP8(Tj-*W#!d8fPkyg^H#s<8SYl>ayO$vLn&dqVIY5)vo zhiaVTC;UZg*}JJ&v0bAwxA zKnH4NwZ3RJuN#d-`ORBMAz|kuahk~d^8O~e3bxQG?l(`hTi;;!)Ke>k)8KbL04-1r zPpz;ksh=8+VozYJT^#z@nt5&Q(VJse9CG>QWsm8B#ixxiG{#0eZdE%Xnv3|7W%F*B zvX%}ay3$?5amT(X?m+a6)|n*UM$!@xJu6sMKjh5W^;0+IgjvCpVR3tpr3lLlk%GH|9T>gtvqrRNT>kZ>#eCec=lJVr}k^CqW zVus`#$aPyRLmHy*pQn^osjV*2bJ8VxzYh_?%%zQMt#zt_t2GTaPk>l}bKIC*9E=Gx zKo7Z)$7vY*hA_S`udIXZ7FqFD@{7AfAdy!Q+*0!&g8e}YWDmAsl60TPy)p6^38RtPh@Jb zLYed|^S#rmBKENm?58dY=+mRRw#V+wWH~sc72>1XC8Fc}&32z-Q;Y-IQ7#7~R*9-z zUdsysm|aC&!yEv#_drt>DoO$rRDbEXa0AxHtUWVxXv42@?eqH!mHz-xN3u*6y+Aax zNt3FgGLzVMek*qX$HW4DDc(kr&vlO(=|r(irI0;`5F2#msrW6sdL82{z^)opOsP@) zF(yuK5D0DK;p)(ZNg93=9LvD8&sze$)>L4#BWXv*GmWX8|oMNp(hTx;^Q{2RhsF71n_aU*g zTsB^vjjUDDW8~H$Pu{xT$hf0#FBX5U3pd-BB&TWMU@5}3DyTJ9dG>loV{nyjbjJ7>e+PMYvmHJSCXIV7E; zK~TXARzc*5G?K}yK=$(0WBO8Z0=)9Mw`qHjjaM-kn-f~H5ja7xH1p2GcGA4Hnzy*= zHgpE7dAf_3Zrwy*4*So4D^sos$J7+SPFGSBMRY$$tc^*HcA(VK zD@_o{D+{_?lB4S+D-!h3*RQirXp%J9O4n7I6nKeRTbpSR8B;W5w(_=OrMyPRQv#x~ zw7ZjA>X6;=34@1#+VHb6mM^D(1Phljvf=^cdLot zTLHU4!`9>mX2lyOfevpHAr*zX;o^UYX=1vX4z4QtECtBJL@^wG?WaDYPb$VKx{~h4 zM0pCmpG_QuL$Sjok`U7hmT~D%6z8;@^Bl3r6(DM@5qmZ(0e`q?%zoI-DwDe|nj;k< z!Wyz@h?A)LYI&@p{WLPPk~FQ8iX%7`#4wV<0H$hMvi%c4SD*Og1z+FwkHcH;uM0AL zFrl4WJNY9V)KbjxoT-d~y1O>fb~n|HjCSmmA{3Tp zD}eH9X>e*B^^TK)m2f`TU7B;E2+Pz~>u-(2N|MHGoUz(oE(zPm^B~KCaY*{)Ibzip zUheAFR*OXj2f?OQe>C=**-q4UF|V`8I+_olOPyV(H(YXg5=fFYM21Z=m-mhpan+~> zH33t=w-IPKsH~PI)DS4RyomL!mRvkGWu7~Jn8P}y7nWa6!?jOu)N_)2br|Z&J2UD7 zQ-`T7UVC?N%v&_i`_z(9rl<5aldZ$a8^I2xS(@Es4@ITxiX(k(*!~@RK0XaNEzHR#P*jf5Z(?8WfG5xeQg9*k^Y6WYfK|`(&(gKG*+>* zA<%93w)@Fe_d;PosIFZfH5!~_BoPwF=#6WNTC+;pk!|gvg+MChMJm_?y9-A0 zbl+A8;ZwvcEzttDP=$n_jgA#Es4TiT0#dWP&*2RyNkdJzfaG!2qr8hN<`SsdNz+!hkFrhW zTVX)c4M2)9D+X2@8*^?{c@1z8fv9dHn0Bx=q$uqnRJb02k|JmBb6E&Jn4mtYD}zw5 zkEjUDlivu3v8gX4m$h-7_Glfcn-hU#0~89paIB%H2yqossdp?exgBWVO_ z9H}bxBW$lBQ%Tm9<@P6%jYsymo2YQUgUU3;1^m&XDX1~6K#Wu?y*_b@e>97!sSW@X zTi&2LNg3Yeb$29Ex3yZ^^ljl!eHEsPQzc6cO#|Dxni^$E9yX4x*`mUq5Kl`eG#?q> zr|L?_-F~cNruZWGbdbuq#{wFJu6~7>P z%(c;$Ut>)zy{^X&_czmAY|Vswg(#y+(-wsh(XmW*9Mi6ojX==znvN!uIK?RUHJtp9 zQc)bCxS9i)9roMj*7uAsz_-DpiqF$kq+j@pR zj8R3->Q0rsgnG6LqMEV$Rl{fuR`cEm*~tg=;xE=fqz!Lmw>-BLzhy$UYc*by$1T9#E76 z_trlZw>A_sDb}v7M4zz` zusSk2mUgRiZ4+lpe=T5tR8k_wii$SnadaXf69wb6Re1%+l(|)isUR7+f%{Dqo^pG0 zO=miRkaKeLTn$pTBZR!I6fs9v)-zeEGsuRZm?7`4{?Wh!i6?%Vd`L+CoO%;>B$K?yo|wE5iaB39))N#cul zd{9Ca(%{5&J<;%di?%Wgeuz_nB%2@GS2c5tk%m}q#q%sp;I=M`E0u$ zNoWG@1vlcCzGGIarUA}rIxx#6SwfzSR>_yuN;jyZsN<-Tfc}xEsYN4bky?ioOv*6X_?wvl2m-O`#BlA@ zmRsdj(mGW;vkbDZq(prr+(v>98!G*)h#^=ID53*72DtVD+6-0e9a$8MX6(3J$#E-m zuQ4%}q!8$fMy+HK%g&JAE#4&0P-H&rO*3TBp|JT49#b}3d+=jxR$JCUJqiI}iUouQH;v=F|# zb;cRoyQB7s)xIe=X)5(%bjzS>zzwSzGsPRRmSzeh;j<`V9vYbG3ml0<4vmmYv=SiH zS8OzyZ39y#min7e!)XMCsHrG_O{!Y^tBb~+3pam9S~gabUJA<3=}L-Jhb|7Ot>gkV0V*jeWYbR~qU$vX zAx?bXc3MhnSR2bTovJi;c+gXm3zU&aAjIE_(T@#VkKVNk8?w@Qq3u!BRG-vpmXDgd zid(A)#AF5>CfYa6#n9I$^3mE;P%;)!gwOe9{(Jni6ss>2Fv+M3<8^*^>zdRnvHSjojN%xSh1$0y{U zv_%bC+cdJMtGS2hC#38uE#Eb0G(b&egNb6-44R5D5^48i zPxRuzsN(<%PS-6?J|jAmRm2F1kx8ruU`_G_&dfSiq4MZZwiXjF$&0a&8Mc%(QPJDayG;xSW= zJv(*s(BWZ#dAm-?QEGqHvoxM->X5xQKvVgE@$junHTrqsy6EwkAZ1I7dEsdIm5cbf zQA+6kmks?BPHD|GNiK^~+(k;}Pt}MuS=&9-!6WTe2?)llP<=$>#wf%ww$;-j_gAtC zyN#rQ!Z8feG`FFn$sA%s{+cS*I(jio0DNu++5N5|5U>J8aA{LZA$7|1VE_{+%1SB2o&^Ge8T83Wf@M-;LlBsqI zD`izh@kG|ksi+)`)Y5^sl8vyaws|fdtrI1uZz;U2)h_cyD(hhptv^uGjm1Y%*Bi6= zt0L+?rK^eJR-+VZH5@HNd3`JN_<5E>pUvY%)zFy#05s`;xG_D&hf<`C;bB=ke)^o~c!s(;VJPf(0qiN&| znwiA%BysH@>^xM5EnGZlNgI;UI*vwhG@>LV`GJVGxs|;{<(TrdPrAM7+eob7WYb8~ z$Pqj=svn}YDf)(q(;XE$VSstSMG7fBCcRUoTyN5=b?PKcD95C&B_%B$6@6`cI@-b- z7 zTrsDns3Yo1qOHQ-@r$dkDPa-Jve!{l$)PF6NYcL(7v!2&&xC5zk3~2Q6X(Qt62baY zvWtms+iB#Ij-j@YD2l;m3Ovd*l9c%E12t`M_LB)?0GT2$6WqLt3bQHHDUp{+Bjk3a zrS~Vpwx%bT891ij3ceilBQUS771FxB=+~1_4HoeZUf8B#8Ww7vR+;L2MW!|92+}BQ zD4lKvT}hZ@+{^(y)W` zZn`2+Y9!xN4aO_D_}CQx0F-`6{*v`R=+mg*w<%5qMy1_UQ{y-u z7ka?PqvG=Ctk@o#0sf_2__!xY$?m8IWgmq7HT=kMF;RWSraehd;%3A_Y5|01sM`%I z(u30f0NFr97_TfUcJzvXoy{|M=8tsh1zO#U*kP0JrKO?$6HGN_Pm75}14;Gpi#y4j z+;xmg#xI`gV3`_Y8ZF`cA@NFSc`??Uyv2 zk%~c_3V`NdYlhx6oySwkEQ=y5Dacw=L;5C-9t#`aTwKm|Cl$SGSVAI@+J76=5_NcV za_2OyNYsX;eZtbCW9mH#HEf$HW|Zkq00_nhl0pqkYgv=_U0K-$1pfddPdXslyW6^6 z)S7Sx=Sq)=yxJk6JCuxA-a@;r9$u7op;H|oNAk(^&_(Y+=`@)&A*SA}*G0a4)MV7s zi)eHA6P%t_(!$e`AJD}S zS~KUv1z=TxB7Oy7H*k!`ZS1}lDPtEhNUD5NwJYL`q#w;0b$QoaShfaC0Xk!~(AQE= zKFsXxmsS8gMEA%5_?VYvBBPh$WMx*Og-_E?;|0rqaRnz2h#gX~kh>Q>IO_Wm+23Qw zBeh6-P*QE(M}Lwo+{#A8mL#7elr5FTNNdewrWHMtN&?2Nr!&Y;w=v2w+Zd@^+LOgf z+MLlkQmu!UsasQ;fPE=ipQ}+=)>JKR%M1wU05vf zJWWc{+Rc%(M?2dQA_8II@<(#I;+4}Tt0!M|8;{zHw3|=@B(5PMEu{TTSe&8l zPc+ARZOuR9G6n9if=DBMYo@hPtPD{# zHq*+cg)cKkx2-?EDI%Iy(j?h5#sD6ZIhI`eMU0HlKuscPsiez(+-gikZj32$J{@X?rMA=J zuQ*Ogcs%_`U+zZX*Zf*n3bX1<{vh^HM>4`B7MykNrbzx23gUcH=EI=T!y88Ye~HWD zMM~Fsa(<-pHAe^eIW=kj0E-W3A0g#?7Kt^66q4h}%?YCY#RgxA3>B+AQa4J5bJ^&Inky1B$psp&)Z?M?Y z#3Y7EvkXQs)G7Y}A0qxu6Q7ZszwJPaF1LZgw zC&QMNwXtmPT91KC7mlZUDemeMlK`$T`$HWXR?u^RY8*pqpm_u{Z$fSM6(5$*oQ12I zw2HS}kXY2(uP$z+TvkEXuO*ENJDzH~jUD`Q)3#5`YaabZ@pU$Z>5oy^W8dTgmuRMH zx7azOyBd(;aYM}-@VuAQDLh-!g?Usri)N6p(dvipSW~Gb#~$J~QuODsj8s3w_VR5s zEfpD6;|&=NTzT3lL^-QYA9Z-xiX)B{VI7JUUD)z9B^rf9k;xr!NVKHvYl?%_wvXC0 zpeosOI#Ky%V6ir7BVS`p8hh_SQZQMLk*v*~w8ovsKF}>+O0wKcccVcIoK|u|k1;Db zYzk1e$^QVd&9f0q_yw5Y7ipyNS5kaEmBR`M&Tyk7<4^A;w2|&cRPFLZ6w_)*qby{C zTVMpKgTZVT{^i7(>C3?QY_aI*Xgp5I>?Y{DDd!w|+aAV1gCJtJJ;&xzQ!bcPQuf1| zL6#LM$)U*dUo^WkVysiT;^5R-e$vcDN)Z)6#a%%S%ta=QGVv}D)_~0s)ei=mTX8F~ zA`3W-k1gEbYt@0~pcq;_jY??MpQuy`(n)s3aa7Ef@=}Tdtk*KpqsY@RQIc>cnm2!5 zSF8rZU>M^#!05D}Qg2B{H5_#$od_g;UgC|qf<$a|sw@kDH(eIdg4EXyD;5Bnjs=1h zGdA+hZd@c_kp;Mi&hN%#9Xn{VwJ{h2O?(~N@6k1UG+fA*i zMWVR34>$JRgX?e$32g1;GcK3#H?Adh@t3pB?MS7l00sp)$;Y!FnmyX4InpXqrZ6f$ zCY#U7JkvItgPPIMx3q)qvyUWDsZJEt>Z!4C-k4%mja`&dhWyeBU573u$6~UVr5Xuc zKZ&i|^(~!fab6uai=efXlX%@;to>DbJKWTf8;c~ztO~_g57ab%OWAV5F-Z=s*wV)u zcuH9Q_Y^ZB)$O8`R}y~6;}mHlCDT$6vGl?HMWxZ4mRd4J=Tef5_cVc-tz@}>t#&jB z`aQ68f`yYw^lIW3GqlEe7dGdns&TnB4d?jCx#CVGzPn+_3gI^8Z>_tiDIP{B3Ie$O z*TZn>06pBJY#L*+{GGmR)IXYkSQRnJrSzYgF_&7jfLve352d6t+`N@!yJwZdZCBma zVF1lW4wR*+Mom145*LxeuN3|x)v6mUhNVAkcGvyVMI)Zg&+zr^qF1xH)voEdrOnjo z5sf3a;j_k)T*Y|rbE#y+i|MNo*xx10-5BycOZ(6{q(HsTO(B)~X+c219t|yC5EM2> zr_@hV7_5HOm8jx|;(+AFiv-4Nir&u?ghR4F(4H+hHLM?2Y2ruU+*=mF?WRYFjO|cN zku|NiZmX$U6@t?(Ji?`burZ^cV z6(oh;xU``!9WV_dCSO#Tr6FYQ8x&Joap2ee;GJ09Y$6Zn)B;U&WR26Dso`8fuC0qs zz0yn3Mw_TQb4t@oB(LiJluN1BwP&c_%kM|cADY|Cnv1sGD#T@lC!|xFxI5M1`qq&O z6oV`&M>9>F92^-M>&9b{HJzN;>eS)&DJxxCf8)i^ zh@GO0cmYT5OXwK)d0Ebs-K}keBPVvJYE$KnOvK`YMfEzQwMY7gl7RrTKuo_t(DO>P z&!fkine&mFwu?GgisNV&^EDm|_j+aM>pFF4=|P>SEFf$Fq!y&$!n%(^TOtd5X2HKw z-Bga6u3@>il@|Ki4OzG79xKFSdr=HBYW|L@4O<@~mu%sw^0Cr-N&bXhmmcmkwu<53 zsY7a%)V@$v)$%VG8T7_f)JyL}nWIvj>t6MarIf?#l4-M1`kRvGlu*Kod9kpkEZN?owhY>s z=71H)V`Fy)+ZfJd1AanKYhV7^ty%M0zu~LTif`OdnU}$)Xy43Yj4AD1ANj6}dk|=& zFO@$yHEaW9pBE02u->I~2qR7Z0HJ7^k}8+=<*pn%g*S?A>Q)NQ$HmsaiIlgV6Lr>3 zlOFh_EBl3D-Z>slYC}ZtR{PsEaC3tdOg1%U-K8mqN@=32Jp3^<%oR&9z_`CHksiug zmN_Ok0-}aHb^X^k)O@W-*rn}U`;Rr!5gli_C2X-OF-e@YW|Y#_Yo;5?p=!V6O$5aq z3*^@tT~?_w6REI&HE$dSIeNN*WFF$Xm%~?6{zZDdEDaEATYc15G*H)a(3Ja%)~#E6 zF%-+6QUgXI_O%r&JJbz}b6hLJRGylE>70tTq*TJ%U5%}@)i3u zF{tgwlS2zby}xfJybARZ_>kuqsBj4+;+8ddN_8+=A@Kb{oaxl^^ildkKv`67WSBt3 zSdB-DK%T92{Nmg5Eq^w&{{T5C@r4_#4ny&YbY&4kKNaEx{BW5X^jJ<5smzsg=5CIsY;T^JIa!# zGN!&Q;*X?}=qMmwmr_Osev-`nKIER)r*8~~MQUij#<4<~NTPfS!<9NtQS!`ApOYBz zT1I^0xBmbf*2lrcXZNE(pUnrYN_>hjsqs=PMt2pEM&h&)x*8KQ`jV1WZ%uULW88pL z*BQ#CE}w=uA1$+7+94|wQgI%p#myP$%I!f3Ka(K(gbKLsoHbghC&f*7ZEO0|fM(~BVlOK{{V`>p|C%LTG$K^0&OVC?L;m% z?o%2c2NY3Vk~=yD5Rq4Kg(cN{Vwr~CMr&V8F~uWbGoK>!5JbclX*i|Ru7qxy z**u9qRyewi3riY1DP>D%(=x7mY}aZbSxT_V-CMP-%+Q+PlAncSpw*f!UaG$0c5rr& ztt8hM7t(5#wuKBaqkG-lN5l1)$TD^Kjk`y6)^OH$X?yVV4XcPrs{Z8rTVgn2Owa_^ ziW~T&u%S$8lrEGWaf4B)ZA9jz^`j zc#(3wmeRgL{Ew{sl4tm^%NeinLoMwi%#B03}MHRxS&gkEYWe3{?WlcKAKb7uv zc>Fa9bLO%Q70ojK)EKP^Ycx$YYCbWVIQ$X)3oDL_1VSnjvnJbB!vtrIscbJ}&-!K} z-ClPHi<;t5M`snJcn)Q`FR+OeFn=w|8Qu{prYg-#@XjEeN{Jq3jx-r~l*XY?nv%lP zh=&s=f5BUD*p4<&<~9TW0JfCeUco=VnwR*35&Bl_)p5kHZu?8&76bQJ4dG32<67y8 z;j+@ZY#}hn{{Rzl=)1X+@@AK(Tm)iSiyqL%MrjRONKBMw0+(E;0+B+EskuU$+>_zP zgxpcib~L4 z-gdSx*bO$?hB;?qIhBy(Iig9%O#_O~wEfQ_!GF zQkwJTiqWB8^;i|8R+Gp?g$79kLx%6%d^(>*>sC|E2?ADDRk5)$nVjmE9^q0z=GxO$ z!0b2o-w`XZ(?w6596OiuTk^A%s>vGTR4H+0{Z)fqLB`>PVeMoU9~iKg#QJK>x@?2B z-|1BRIw=Xj(oYG0VuqK4&VJOT;K%QsMJ1iQC$)7ov^^-m_u{!#jeViF*WAGL?sUa# z3&+@O4h7cxX05QWyBbi8Mi@|B3=T)lX1k+I0w|K$8`1c27Bk&7(-w`2iZV%eGOl#g z@fc(=u^ExgkZ9wPB%yfU4=gU4=;Dtnac*IsTYX}7@mfjMijSp-4h>1_G+=O{&!y&3 z7eivX(1%Q$iiG-wN;a)^n*RX)yprR0)D9cl6i|*q{{S@6t8OSZHhRzv80#7i{xqrg zu9&WsXrP(jO?23MVwDka8yRR-u|UfYwnSHv?W-b%#lC-8bH*f+;zW;EZi4JWZ(8M# zZA4T{t+(+sffqWXzybrj#HENxbAB$w$M9jbBOax+st{%U)ZFpYlL0gW3q8kaQ$UqJ0a zN8*$A+mYI%86^8MHl1F|Hg+BoOKG3D4Bf}ox+wzYn<{X2CnmS8iQb=1{`AyA)2fO| zpgB{bI9g^zkGb3xB~2o~oOaxZw&-NWBU$wLHDraYc`s z5$Ht};E1WJdsYPi^Ag;rQb_6BQ6%}MeMck;cLb6Kka0%f{69lT!SFV&tnwm28!E2R zwxn_kwypjCDsP51{{Y*|3Ot4b42*$7t>!T|?d$t#mmZ=8O>Tut2HmMzwB%-#QA#OC zG(bK@6#Q>lD07PIY9ETkk&dK(66aTwT8(Od&1xs!xBSu6J?mfQvMAA|V!kResh6f> zA*)c9NvV_;dm|D@B;C?D8n<+gb3` zOKBpIN0Y48&v8A+0%>DbRctRT)X+R}#Ul-kbfhsEwDw7I^2HP<8h#x_5=qxxalA<0y4NYZ-;KVsjO`7KT_H=H1s0H!y6Q5B6pw(iBtEs584pBhD5+*H#$JF}MD zGYUN>{frz=^4|cFGFtK5N7_upM6t@bM+_wbqJE41-^7KUYg6{M!Z=cV{BDm(s6HSf znGH!Cs-tBzXJ@gH7?};N+;bcT-KquA3~S3Zn$Ib%RsA~~h#Dr`QKBh@8Z~Uur08X4 z3n@;c==A2Ac^k>B(N+fp9IHG>Qj({t{{Wi!nL0)+{XRmoLV=|;tw7Yr016!aX+vZ* z7MZk)W87$(Gz}g_e+L!SBW4t>tHlCq%_KM(tsB$#6P`{R*wav~a|5!C2Ca{gNMwlW zidI6LTK+#?iAVFKafvNiYb$?d00x>pKCnd;K0(b{<*nc>X^d{V384|w?8*F|7nWGz zyFEy)Z{l@MqG1ZMDOLm;Cbd?&4_T*;C0#5tS6n&c%SYU#QU3snVMH#B=eo|!-oAx= z6@p1-=^)EUhBstyF?99)Pe{^E=V;Zwq=mM;x;IRxNECy#kXJfwgDx8>%yJYBDWOts z6wq3It2G06Vw_R!6zxoCwP%vZitXe2!h{{VL#`N#%TPR$)Q-SY(40) z^;UIJLOgCO0fr53rw5SpN78FBUcNr1-A&{l--O)E6}$Z7Smp z8PZbi9YWm2L9QWQrL?_R;=hV)h8Sg>?e9!u&QxixfFZPKaV@c3#dM@2Dm74YDK4FA zE79*saINoGye%fn!P@dd%H-i#)ZBpPC=4$l%2xKJuL83|g3*e!u%pY!!Q5x_xL-8ctkwwK4GBNZbl09* zG2og}+CO19>%wcFWvEkABiY|4Y z#mfg**bo_~bnTN;k%>>!lSG|h%o6G$mbXIMW0ws2;%zc1Qj@ayH4X9ms%Y)+(+%pp zvXa#I4T#>REM2uWdAwNeUD3*xC07fAJdd9=4rOsM_cY&% zY7|bDuO^1nPH37|rI$^0Lwi=SOn(*He5GLryHZ4r;#&A;`&?Fs#x&DJ;Q9??{*IzO zLv16<99FkqBQ>Zuiau$3m&G?}-@(ZL0NF!o83!~uZaf-U89Z%K-K%A zXI#Jf+)2GXdXyT+J9YBZPE8t7QZ}Q@G*3LzvCS*zVk<}^n4v6-@0v-?3FwF<^0=dC z3wmCKg}3>TWUyiAm^D3|pNj4qGSVDVsA@s>(F))4b)o#y$PfI{6jShOH+atEfG$dG z*dr;N#M%!~9j09eT&aWW5zo}llbSjk%2V0ohlWzG@wYJc-9?d$dGV&Cjp6?QgqESX zWcS+U&O3~}J2RnDK^yPpnYB4)qDD>zDMGA$K_(>rh~z6Z8)7qBx^WtFnrehGeE?>e zNF-x-806ndAU(n4&4nM(NZGxrJ7Na=QBW#H_vSp-strMfYZc?rNUprfeA3Qa_Mj(o zxQwd9z6=r5*(dE!Y5xGNHL)LMd^UZJHHNQpC|i}=T?nN7X1Z z&1RI+(jfd%h9>f~w(zH=DU50AlNBctE3^@TUmbRRObrW}oZ~>H)$dIp9z}djzrLYM zcW3_P7q@@CYfN9{C?fv=l^CKvcdnhfWwhd(rJRXH1=M{)f=3?VooQ#c{IXVyX@{Lb z6Gp;kBTF~<*Fr<;U`6e^!x(K_>Y(_fnu$r*OV!1@!hb4hC3y3s{{T!@YCh*tT7n^C zOy!uGL@sei6&FhQ%`*g2)Y_PqK6ez!jrlD)-YHWwHlb11igU9XowEM`I@63A%?iZ= zM~dsnE8>{>uA>@rA=`WbQOH#LRB{h?T0{+ls<^0FZGw+H^I5HRuQbE@qO~Yc0`Hmz zfu-bj29#%dY%LsrtoXO#^WOIk)Lso{HD_B;ZWU&B zkOsQqy70E6LP+l;7IrMy=1%pkiODs$hZI*x{fknuV}VGRqp+!)YHv~GK0C1uA!|Vz3G&#D>g>-mrZXTr%h4c-W$mkwCP`zhFoM;f32F$F--Pn0OGYX zwteNwz`1@RhT4v7m3}O}QN#tss^)(%~sb%Sm4^_H-#;mMO^Yx|L8;O?A z-JAhaTu(RxNeKW_4|*cK`5smX7&*`lO9Qu@WJp(Iy$F(TM4i^QxbA*TB$dEZrDlvE z139S%K1^~oZ))=#_*<+;7KPe{FEh(daf<0RX<Zk`%?}1Q4*;GZ$kt94S)41f^O!qI;lA4kilf^|0 z7Rjzw?Yz7AsX+q@M*QYAjlig((`#s-b9CWAyXv@CmPVD7(+%l`Vvf~{BC*LKcJ|pK zM5zqYVNrCfE7FW0+`e&ujO{csH`|J6T|KHBNhDoEU~MJOvr@-0eY-44o$@IJW5pK7 zu{Dx@&?@TbEw<7cN4~j#?qCz2m1T5E5P1Ip;TLApmd`sN9!63!A>r+nGHkp?C=yhf zNeFkI#E;OGsFZVsh%IDfE_Pugo|NqoAHTA?39XtmYOu9i2-<6cIm0q23`&_fguT-+C0sYO}ZL#xv@@V%IZrO|p5vY8r?W zsp`VnVqL{uN!FORgjFDU%{-nur(-z#U{Oj8!1jSw(JxgCu2$s|WRIkDu z4M*u}lA`q2v8aG+h!ptMr5(M=ExGaqdvm$;inCBT(Acz#>S9UBIUtZ~;X=PJ zN+_uJXvJ|a^wy~ydkmC1m&v%D#`3jB?n?sZkD6-E4r)(V{{Scd!~jAN009C61O^EM z0|EsD1pxp60RRFJ5g{=_QDFlTAR=*rFfu|?k)g4{(PDDp6F~3;f+I7MqVYphvQT4l zgTj;l+5iXv0RRm@0u!0X_7keZq0eeY%whJBb6F?I@VRXcdCT82hv;kQu^-KW2V0-M#dm^Z7iZ|toxZ}{? zZ9~#IEnQbg+N&{yx+4ImK>-%q&NH+@)H?-OWelN;CZ#s)VJbsbeOvHYDN2gj;D>7Y zVHrw5O2|)OiscHPXJA7$_1Q%ux=c@!l=fS8D+|IoDH)rG=cK!$H^2ZkC3emQI7+v0 zi4qxS28r7lz=15_4Y3K%o~RHNqz$l=m0)m(eAP5aNlx9V@{-lvmM{WZ)(&eBw5*%d z`pUwZEd#8lM$4gZpAMdNMqsuC5{(SPovLd2C&y{40w~@Ngu5vh;BWQpdfMS~|vp!s=1Rh}ysP%i+o5$udyonA9tR|sPZkrm5mLR8wS z2nkaB_NFMO%1bSg7dB!>&MQ`G#BbOaW{+8-;qrurb-@9>N%IIFumoh^)9G zZ8ivs&JL(d5*Y;IHJOY{PwAH8BYTa2DNkD0pM{>sWtWw3!Ah_wsn=n`VmC)r^?lYb zp46|{B1R3Mb}CW6H#-POS+zAehgSR63r^`Zzev4e?|`K+XR5}|fe~7x z0eZn#TiOOvFm+7sTqdww7l~c-YV}f_FF;i`@n~4>9**b)>vKTSI@5}jk-S`izQuqS z;HNt)5wltBlQYQ{icUg{23Ew;Cd$>{cJWxa>b4$8U5?*%c*hlVH3@5Nldjf7AHu*< zUWm6iR9vZYVXR^IQdI4%g;OLjix#c^C?lEkd2xWfw&?54Q2@+*op z3gL=vMJ``z2lX^_9fy1_39j-fq&cGbg!Y0ttvC1@PCb(i3#X(10ONf}g3<4{m8i=` zJxXIsk0qlu;A#*z3EG?_MxwCs3G)*d5T(4wi;t*8jZk|uvx3*(bf+MvE!J8Qun{eR zU14lZ7Hb7Qwfhv27D-B{6?nx=%bLnA1-!sQa}p?9yOOe_1SZoj9flI$aUC1KJr=J2 z04o9)K-nQOv2zFr-WARkjtfrNvDlV=AlFFqhPI=)It_Q}>3+w-+m7~Ftr^y5*#7{6 zoZZv)3lyaBgPTH{e@jdDKK@1;&UgBX(!4jqsr!!SVtYtmX)8!@l$A@Wo=?)GobN)HbIBu`16UpqlXS1@lDVWYrI{06W4r1omrlY-Q-0H4he2 zAnxu93cGYCupW28o76J1g8PbgnEwE_4QVLa;;>p*N?pgFV+|SC(VwV%rwOMuU%ZHw z=rn5_N_$9JFYuqmsI1&nr8s|3KUtq}>jd_Yd94vTEhiR1*kqm6em|7m$MFfojnsQZ z_7vvN<5&Q|y@`i%p7{uk8h_$OdYr-f4;s&!NSb_l4$X4yyLCu>(!%*x7pE`KP} zfjXWvQ$pAcB##HvVtV8M022~54;w?dzu`ESGgr(l7x;{ov{yU7`9rOux#IQO(Yn#ZEC5ZZlD$|; zl)P2y;~S||Y&bxP(l~4|Zt#mVn$^LTWtmz^jV#2EFtoqrvFEfwRM_so(ngpyu1TlQtM@soaEMl=CMZ4)qK2y7ctfFD^!^ZSekWo zjW+1cc_yFJ(+2vjVd|dHX;(4b=B+6dJx2rD$gKl6v^}ccF+q+RC%ddZlnr1x!QaXz z4aW1aVG37-DXWBKau-Bhj7E{9@F_pxF2LX%{^xEhGJ`kbY|Z3mW|rY`(CqfPj2?D#6j%Ua4weu zzq#KCw@|sD4csd=^v~K$>iniQqh7vC$vxVqRLVx>Bl>#TeiKOqH$^i<(Qc(YlTB|m z#Yk#o6zD^>+&D>TSoyq(Z%u1BIgHUzgV{4*)Qv|r{S(ELK-%X9g{fcDJ){n^Yd1CA zQ=VKaViMmCk(j)r+jYFQ^XRTpgrv0v@o+6a-9#;pjqP_U_B72h;y0tBbom-XO{16h zX#W5a(v5EmSMt;>duXu-QQr&gpQ8I0{^Pz8v^J2*r8G>=K^lj?gOEf1){cnT`mB)g zPcja<3D#2*IU!bx0A+G}ET1s6pW!@tw4i3zh8GzWZ~=qO3$NB?-pfqM>jnwWGFNmO zcm+^(u)#N}re|7MI~9hHMJITh6I-g;lx9d7q9k=pr^RND0zqN1iGZMhMP7xldtd?IEQOaL9V}#BpyzWTus7x1>IvqO7T3_6Q_^D?le$;GhAx3SY5G+ zqQC{4QLuwW>(Jq`d?i#wb$vDgEIy-SUsy_4+Pqy;RCAA6dl&WeLCAy(r_q{aBSQ>I!+Pwb&2vwu# z(tcM|oKT=~?MlPNWU+BatoXDMuXzU|zwYTe$CB;3{%*N2XyGEGe z-cDK<7IL&Ab=$$!g~`urAHmB*q-&eV*tJ8!l<8`~ABiK?X{kI-%EpOmx0D4Za9hpN zO0+)(5n+cC5$!nN!Wfn4ykxSZ(6AMdlrM<2)3>0xdhl7|7j5N8I23JDvund(z*i8e>$GUOVX!R(=?O#!n&v`J4 zYNJ#g<9uW!>|8Kg!Px?uHBa`@X!O6R2(wo8KJ2|#F8nX0zbm}sHJmWKtP!rejTimL zS;>7ta9CIub+p>c)1?=t`NLusn7y;99Mc%3SDNpO9A)`7yf3xp0VLIh3esZzR;Uv zK4EZKF9nrXci-QYQg`PVx%Ug2xQdwM)Po&$6%}3xXk(X$lJd(BmD4Ap=q() za4Em)(ecHq*$en=;H7jWy*y%kphWDN7MM@8Rsc~IrU3n|{G)leVzgpfJjOiLyp_h` z#v;LtU1E}TyI5NcQNIWSEc!BLaSBp~8&a2ya>;pf_+6r4N$?vM2YY5RU-a~%viSwk)|;rhSi@Gc!FE2PE>3qe>gjZo zrmhLLG*|}|dhIvlw7bpKvx2OcZkincR_w~WgQyd<~l>>>>oe zYDLH$jJD-J7#uAJ5t_6SeqmvO!{Q{{u-ks5{n>F^J5PDY9ep*^b_uTzWhK`YfN8Sf zn%0|dBbpD^E4*x4(xn?LW~)(pb)y&nBr%$m-3Zuqvb$p_5J;{H>f5t~XDF1>DqpfM zgGB6__1VPi2o&SGa4K8v%kYKAWwa!FtJRD%7ULx;%2S!SI(2sOMvM-1PY7zz3+0L! zUY%{?wUU`Sw@j=c*LA`YpBUgaSt;MJICdFZlx2KFH z;}UFvwjnX{Z~&KGK>{fPJRk*gjFB=3Gkw_26D?lUWM+ONF9?BBY+uV@M->af`+bG|2FSfxZP+PJKCZ=Nxn$M)7C2sTD;sWQ1VYdYz0T~>+T@SJZ=8_u|q zhFc92HMw4;X|sa+Ru&;bA)dwZwKm9Tg!$aGZrs-Tdt8v}4|FO{TLw3r1}VdJrj%J2 z>+5iumrXfN1XGT|6OJ2qamRo|M&LfI`Rsvx@VAa=+EnHa3s^}Tu#Q1qW(Sq&t*~4n zd7V_Ht~$sV&b%USMDh#hGE}35vc(ya%ef%gQUcgZ2`0*)5Yp)y2>L}vsxLL{)x{ZtjoRh}_Bp`wU+6jkJlf}Mm(3D07|7C%Y7=?xLpcNMQ<25VR# zJW1$!KR7A{x?jjIpDF)H_) zQ8XR>fNBaAm&VlURZg!AR;_YZ3?Ob9UY})CoibL7e@R)5ZpcnS1?#O;+WL>el*_QiH&YR|JFDtDsHTpkypinokHQu-e=1by-*XXkuGql9`9j5EQr2+$D5)Wdm5WcT?QDn2GTmMBDnBY= zvS(yl=7}W>r8Frfi+CwkRW9bRkLk4=jKja>5H-6*=Ce+&uem5X!3;{_YPPP`0Al6F zhlS{Mo@XKQoumcdXvbq(vh5TMzv4V2#sv;v=J#WIp zR@ZoWtIKcW@R@y$3EgLx%&gn+zS5Z4z2r${g~7R%VU`#P z+&0=KQLVO4$*D=DuB`DQ^vM?ih3e4ryf};#`$ETO$D+k$MT2c#YdW6=-*u}Jv0dMk zFSEfOt9{)A)z362KoSxVJdlNhV3m-8b-19U1HOR70Gzv~hrtR)U*!Nb0+lH#l*ZNb zmhxqE+EONK*=lGKc&xat$*MOFs7I+!<%>io%&zCc2HVlQcotl^)qN1M;W?hoZw7dMV*^|Y6hfPk@Lc5m2dK+G%YfLcv6NN?2Q zyTZVJpOsWY^-tUut96C;TC=yoYwKxGc(%3JbN>KU-`i9`2k$Ccto~-HBsW5Q!?~;; zD6V^N{${fHC_(;BzhRVT+*QK=0O3;eMbbvn6~FMVIP5=JpkuDIjvh*OK9fS-5i|b) zNm5PGof~sAnUphGQGckc=oix*)^;xdvxW1slJ7g=Uh=Oe-vxXAFjBJ~IUqbnSs{c% zZJglS3EQut4!Y_octD{=r38$difasI>a}P&r;<(rf5{*>Re=&0nO9Y6{-%?7_N)uh zznhS>i?R#r6Gvf<@p`+B%2I6jqFe?uS8)8RW-(5?ALct6+UJJAtb$=OzUAP&U@*yC z8mE;O4qr_dX{W3fG4DDaLyGhKE1ImL6*H)B98OAf7nAa*TqU!e5vJU%7vzmj6T^U3 zoJqw_46D!6g0Z6pix#N$jfssZa96LoCCT`6LR)E6mDVL8`=&jjt_=F}exmXn^Y z(+0WZh(0f*{1)`MHkM$VHHl7bIO!1|?F-lOg1_NB84+rnff~Mu_pVk$2x$#C4T(~A zPcpQOmYSEhwapk}xK#}2;;eH=d17r@+OWNUEh`^|iCw3k=aQ9Q+CK<&S?;fP83jJH zWhm8UNO!h0d*_lpxm96nin?&q+rkrQj<7ssauy5`)uL&0PGGO)h_38`^F=ntHqny7 z)OX6k+r#A(*KI&t6#oFkaTA%tg8u-reUr3}(U3yI@?WCX7r4 zwXqcP1I9-6=CQsQEUK>2k96B5V9B_ZXOF2}r*smIBVgN)C2+h2iH4J?a7}1vhQGGV zr6XZqa?V9yDY1Ae@M|tJUv{YSLe1&=srjRbK+?O@KmL!9Q)^BGv{7@kr#usPjXSIQ zhyMV=9e3w|%?rOi=o$vtoHd+AH>;^RtW6NHINR0L9~ds_>kbH6J6-ri(h=1t00;Iq zNHxymMENvu!-AIS{#>P3HIhDQwf!enx|RR!+`CE{}vb%*4rOMyvv{X!HU)=V*1E@P)gzOZv zLiZfXEvvrk&|qt3ox90sn=NkcB?-$He=jR50`%dU(UYt(2E~Iy%tJzI{;b+Alrcll zuY}1Ho308}285$Sc~UasgpbKhaSJ-FPyiL?rK(N9qpJS^>KrVSY-c-Rip1Ez+J&w? zRxZ|<`ZQv#4ZDXPg7YcKT$|T8pT^D+7r<#7tV(mqsJiIuJ7>21U=u}I^aS;iq1=^Kfl{GnrIAQm?TY^(?y@riun)+SxvmXhqCdq_IkYi*P zB9d5a38sl0TQus@{v|e&Le`OLY>f=sRuIPZg2&-wf8rLIAZ@ry)j5(l*B%OYS~zXC zBqj@t=8doycZwH^g{wgCRd5zT!A|9Du5QEV&y{(LY#6y6mYI%7m^P!(4oJY=85L@E zup6V_VB4!j<`8X0NLb-_;dimvB1eK9S7i(Gm7b-v64HNN97dCul@}2Fm)n@_o8_o%~e!xK7fUgs^dsD?e z;aMq7yfz1i6`h1FZBh?q*e!ctY|nr~pc_i8^^HW6To3A+G!dFJ1s~<84xq3u=&?$l zm872)3|KoEY?u%Qs%_Jlh5O7(x?1HCI$ z>=Cy}(@pHUK~t?_{{U(Wgfz~VAgqCO&cNS1=pledp0DSn7VPAOWqXf8EF$Hjt7l

S6#9d;Jg-avp2>UyY8} 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

NLA_nq~WvCKP4z|2vJx~1++ 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 z zadtnF04UBs#GO1mnF`Az{bPCCXp+Oao#PJ!5ZCUz)xT4HA(79!iPzQ@y@ii!G=B&;s98IkyAa<${m<8tHDw1q*3RGyMd$~JzNUzHEwky+~lO%J~PBgKBgNpcygbcDQ;BKz}b-GT zK9mPV2#>k>L=IzKCp!9gZlBG0oA_k-tw~`1LmNT#>a<%lJk}aL=&eo0)konaudqCk zfWIt;(j2d}KQR07+6oa2o+~!d4LGpnCrJFf)=iF!UX%!Y;4wE(%=in%o0pOir%uut z!opuylDpM(>gDnrwB{Rct^uWHZ+eg4o1Y$>u6=R6KCr8mi<|V;TnBRnt9(*cae_Qr z5d7hp0DBF#tUy1QZf9WKMbf!>%ktb~PF4BT&V3yc8IUg{J6*+J@Gu`$(_rE9y?Mfd z_di&ySav>&QyY@qw!tcP|Dj#aOA#MpRbmLY%*{!G6DLD# znA9yX#;_s$EKVyHQY3qp*tY*SdXvX*>JJU}nQH3gU}g7@R0bMIKJje6*P7q|zA%1O?X`@7Bk#i?s}5$K=JW#zVpt zTSNFiv}t3r^Hjn+rq`H!=eJy=_B^mY*UIL{_hU49hEE=h$oyu=yOr(K9MSnmvUC8^ zxoefTvpbDoVlmFwH2;$d3-(PC*FN=2O-Qg1wl4X#7~mT$nM`enMfIguRu8@z8t9lx zx)Lb6`7baOx2yJBrbP6!qG3!+$E9rdBj01gA5y=8_H-uA$`eq1^{f<*&6kK4r`sd3 z_i9(ayfG1;-aKXC#!-9vDx7?-^ae}#KM-A=K>iB@ zB|^Q94As|pO!t`EYxw%^JS%K4I`TqlAJJL9B|Y!{KM=}aFX>W-i8IwL-Ih4?x9)a5 z622;Na~xHHd(#k5Fy9s|IZSK^wvsU&`625kPDK@OOQ;B@C&Hb=xJ`@6C6;a@lz1ka zhqE#;ap9tmrIjVEBxk4Rx2wH>EM+^5G%pyg#owQ0jAvE;-#$d` z;o;QdN@#4%&TK8iwPE7plm|IAjJ_WFk3)tK8m|u#YY^RVpUx1vJgsgD0>M%{S=4QV zM|Mzs*vSJ9lc1j~T%5)_kl~Me>;HU@!Lqo9F3JTNU zfBUWOyW1t{IBnZFUs~Qj77}r$=hBhUwdw2sO0}yi!hoWZ*ZxGzxz2=vLn5JyTG_*% z4LdE0X`kEGxHC8CPDJ)mFKXf+S^^!w51)&ZisnC0KF1OKqN-bx^3~RFyWc~w_JQ#Y zoa(@Tsl_lM)4{-hiUX460Z`gsCUuGzur(>o{&dM!csgQSIKLDn-S ze*5(*M~@qL$!6-gwe@>xDc`q8hwsRm_>Ij~4=Hy9eR_Rbjs%3Axpt-6YU=LF=gnV5 z?=~rE+ah&`LMPTklZ_VC*cccr_!+JoQMy3HAu z(h#V1*CgNvl@G@R2WHvm=eSwg2H!`AKzbcZ2 zFH#J0%`sRccn#HFad&l3FLWPQwCRY`$?%40A?LL4|Dg%fbAKTbtd;S=dn(^tH1@4F z^*A$|Ei~xZ3?%yso0w8-7Xs((LzbNWy@&q;Rg%Y(sD`rBE+;gAVy1gL@b9 zzn2jc<})HU;+W81SEE{!N-(N3>6 z3vKO*{X?5KS164<=L|Yzmnh8t!9&URYn^<_!>&w4LncZlcIZfOs)?;gRD2_3lJ970oQsnU+^AWBiuVwvenI?DRgGO9`bYiKdmXGjezG z?FriWJDK#n6j>d%1`yFXbGCY$8b_-($ozCQQ8}3RhMa<*n0?hZlF?tqZ9q{K7`yFG z&%Su_xyl6OUUo}(Q?{YLShs>)Wz4C~hFH#R6w){&`mYbcg`8AQ-~%xwPhOF~-C=q} z1{?WpM?R06yK}ywK9Rz*TxMu{30|79Q!zeh`fl@i*D>dHLT4%dM^V~P1B;IzBQer6}_nw5U-?r*>K;|{&4JD_Ae zM&XV;j1SWsL?pQ%A9iAN_t=xh+Y(M1m^?L&E9}QmErbK|uz&1^Q15i7@hCd+Q$*;7 zOfPE>Du`}hGv|EuF1i^M|Jz;MfMnPhOlH?+Z9IVHHV(-%NeXNoh-8Kr=Iw87IawFe z&mBc6Va0NpEQfnHP~?G~AnS==3{5mhu2|tctSBx(QKoG7arr~cjaQ`Op%?ykWqCq> zZLt`rwu|}?xyDiJmhnwyBx91205n@cz}7cdf1cqV+R?rlxuZNL4%U$see)H{8dV2m z7Gj(TD#r<1-224Qr(rKrE(y_*i`7JBev+H&7>4#9R-NMF!sY2?ded@dv3}kE#pvrg zGz}U{0bH>KAQ;o`?xXhvjPE9TRg_@ox>0QOJt>=8Ey0YsEMbiPRfJB>$%w*@!+0Y> zFn1XE z<@MH0HZ@&Kg;_iaCn*#T;go#LBzD`Bswp=%*#oo1f>fx*@^nUtOD1Nt-w>$JXHp;I53E8c!Ca;m`> zKqF}t1yi-C*5M$w;U^z4-zjgANo^KFwseP$!D4(yMzO<4e72TJe3VAgp$Jv`ZDcTl z5U$S~3$PB;wHT=vQZiTd%GPUnZ5r}(M$sB?my?{XRi)SjA)GP31x6JScj*#YEZw`1 zl*t`&9jyhMQr8OwSxab~; zvk_FeXERjo+6#^m&2R)w$i&GjPBJGejfXL3JCdXUE1h6RBaxAndEE{PH!ctGz2$i8 z?9Ty-8;xn{8yYLHvX&8%)wH@_MZCN09DZ^~+cd(Dx9BJY{k@6_!#x zUh$pfQK%{jnWl4UJ!S0Em(B6;jC8D3*WigBl=?tHjgt*tgOEUuKuy2FZcq)BUhLd9 z?L8Jln;Jp9R%?>t9;=FzT9_BWa{(|HwN0Xiyd*J{LQUx5dP&a)bXL!|?J(Zb1To@< zs}d^bg$kQ(P7^?{`2-WaDTL{rLBzno*9Q_*p61NhaKsx9Ja22!~rPS4W{Ln@aCRi&=O!-U!f^4gp2WIplV|i){ux3B`gV z@0IM5?VR`^Ia%eL+2m}@;fySvM;w)zSx%EI10n=7wJdyJWV|LgotKgqo}#@bE|t03 z^x2hC)b=Xc1O$UaD4A%JVs^Pi*J%K3RFvxpbCs2lr%!EF_10E^zhb&K*hYq+R)*h9pl4P1?Co4>Z=KoK%41xQt?2~WPXPLU zj(}LU&iou=L{EuUm;R+aLAJ6iGp^1{;xCO zEisTk%g&sTeMT{bS$~L&k>4V+>ezHo#!aj*z}hODQjL!Y9tEWKjHhrsW2eS=78CLM;PffQAk>ui}VZuUbdOsH0Q{giRGHCh%N9aQvcZM)ypDj?ATfKyhLjoy-kMFta!)%6UjhRJlXW=Y19JXK z|Ik#fM^3>ES3rh1ior;X40sfl(3%A$<2{DEJ@Z_Q_N=crl^m?6Ro$AzHQK4b zfiu|DJ1tf((V7`_$ngHhs zl1<@ht~F{3JMjq|V6lr&hZ{8oDXH;W6N?<1sSs#mndp;Y2UFb%2xmz0a!9!~Z zS!_%)*|&x1*aY}8KM`v7`;E)R0!VTxF}LQg>GvW+y@>gr()+NRq|Lch1=zRygP>cc zhAfel^H5m8BWT+^>{UOq{{kq%a?V2~Q#a!Dxt5HfB1R*@URLNQKfi!}78j!lzP=n_ zJ^Q(m&hKo1fGl-02YxIMRp!9pu%PP|YmR27S3JK(7=0a(k6r{h&{ERfz|;^7U~y-n zF~R@3j0IrK{+vq;vxz=9;c;Ia+?yGZzoCl6pN}0{f*tU5j);Up29OoKAzA!Oac5W& zvA;E4v%;8tpo6;w_uCc=T7m?pNzh^?xKE1)3dJ=*akt>wo11mAR`TCj`<%V^E5GO2Z2+CD zOhD%#+UX=Sm)Bfd08T0YY&sGtrqSsNZUJ>CZ{9!qcnz zyUNgS&To%>l5xsYNsYE}T#!_AcEVImX3}Lv^I{T? zniBM^Z80$pRc4W;*|*dN|5-LqhHQ+hZ(MVZLb#(9kW9k|cEbtk%NVslhwSL~Dn}d{ zY0vDsna&R%1+%cd-55(!Q>7WWI0B6->7oc##Tvo|v*`drkNt%#eIHB)7S~WIH`f#9 z=xmvtdBlqWJ1WK`?+KbAk{xzC2fH-ud@~uEj7&oYTWPNN72mw@%%q;vBUXZtMplVi zx`40-IPa#oh@iRmm>S1s58d)Q72T3o|GO@|qMfm!VSs$8Mld=wN^?iQtvxBmZNs8K zgUS(Gqwmkbq>J8mmi6&Vw;htVU{RjW)d8Yg8!F?lJ93jMJs3K`cnH zI|ocnhsuTd73MjhEz*94H0H|i`N0%%;c36@9h~bHx}N`p3O~P~#~(oKDXFtd!t%2d z__?5EzMsNgSzX4JkB8US-KKrVw11K8OqxiR;+^rf59GZ~FYr+hDhLt+F0bZJ!xbR( z+kXbW%Yxz^dDKjFQ$rABt<4u#4@?~;;5?**1MEvOj6?0E9GURnJT1K*VjL;r$f1Q_ z-}kJ03pAq}sXqW?EV6|!hup>~{)Wf>`qX?QWfRZ_lzKa4xrHToCBS*@xBZ2m&qvI% zu2b>O3+VL3AgF0yuJ{tUz+`eAbJ*^S_E1ch1>O`|`!=XNBSY83qH7(&YbZPt4K3|s zZo&JdtAz}yq`^vb&<=R*6fNf7=!(twcg$P0j2R^zO9LR&@#{HEQq)>16n)Er~NJ zG?JWHx>SzbfS#XVOPgzZ8r?3<>1n#i-pRT*5WY4rj>#EJWxV9cz81=0r(!kocWiW# zO}Z=m=bF#07i7)Xh9Y)xvpI9tkdldpa_Dj3G`OqhI^TOHu%&xTf|P$9mBIe8b2qoi zRbC3u3Xr84u5iSeWh7~7>;2#vaxi`!am$-QBg0%AFLmH}pclsSO2KVT2c~7t*-&1y znO&Y3MhUDJ#t+yrk@eA#8|4C71}GS7@cyF9hI5-Qpo%%H5=rg3DUlYO%*Y`qE!^=y z+rUaw-}A0bn-QBOzWhVlvMSeO!erBfqkZ(2()c*TZz}P~{D#@fPInCwsiZ#+0N%ct zTYHQRWL()SNRhtr7+3m=I)E|mNk=z@)s)hMd;`}ai!K>_4+&VUHQL%TU(7qgnq3;j z-AINjs4*jJ>&={nB zK5#_6Ic3{r>$_Kp$}AdKud$_%VtEtE(?ivN{l@1``i?Pe;(h^hkE8$n#DIF5mT1}0 zYQveb$ymygh!pH7^p?V*vk_&^T;zHJw)Wa)g`7^}y;`rc&N&b@#c-TO*4juuc*=J! zp%tz~^+QKB{X_hqjy^Y^sjLZf6jyt)a5TihYq_!UskkJUU9e2X_9jO;A)R=buf#-c zJ>YzDZ5=|nE^50GgS;k$_(GXaokuxAVYG&z1RyOG42VeL!RWu#|E8pv)8l3V8M}5K zdczuNs51J)Y=OOpp_MHoE?q1A`#CkkpRt!3`Q@ug6K)vBtHEu6vT*+)%ZtO7nd(6? zA}5uhxDLnDe)95 z`)+?^95CT(QR|YR53=BBs{`s!VZ=ZH^1nZ7eIAn`r!bzhH|a^}oikh1pj@+U)=^VG zIkoRxp}v5b2G+wmaeE*M1Ub=m=&rVdSXId6oPk^zY%Wji+Ul)9t5(?jIFcRQcV?79rjnlj~onI4(pqm>6!%48QyRZWj@MxR~vSNkhoG&_5E9D9P%qUdtbtGF`ril~jSGKO#e+c09QERxG+lQ-Bj7rudK z%kD8gn`9dD6G;~yDsaK?F1;vw}IY10VuYNxn^XOlEsnIk0 z!KO7i0qw5am1Fyl*0E5UpyexaY`a(_w_l_ic)UF22DSiQWcebA8F6+~aQ=5=*?2D` z2q!vELZIC7zzG#XNWe%q!h%Brsrm6VX!(24aM1DVcd#|yo`Q2tnU5P0_lP>0DZ@VMOCLxOlCncvCL(kE+vDBva zbx*E1fG*AQr8w|wv%}{!{m-@OXYvBI#~GoCC#WeKNe=CpJcb-H5Y8)c%17NqTbs+5 z7Khaw!?_?C{;0YhRd85>TSl%Sz#IqxYJkU%gie)#i^awul8{{c@C?zx6$!XhVxLJh zAROW>@@<8;=O%8k^&sk0L~cdDiTg>hMy#!O-0vst zU47pm9d}7ty;fC6DKm+1yCD#s3ml;FN3P>li%9qmng!lxL6!MBtLng;cjJ5$ylr#K zkWMFi9VM;=40)x*jaxbxbxEY6(JCHuy%gX@s^>b=it7(_SB&-rLs_XlG}%}ZDmLnE zB&fL==nDUnMwhXoIuv`)W#wbtOM&IMYY?2*&?!#Rr&N0zOha4!JWGhI*M}R2=KT1s zG{@N`My9L#mVsKpJnhuDgfS|6Pg-PT^j*r@VtMrN5qjI+IdOQRxALRj_ghBTD7`n; zb4-^*X4?E_$h$1#icJtHQF2d@20KQH*Y_r4Uo@^da#W;0tCtC7Xmyzq-a6?#> zxIR_Q^dSU}>!?eX3K!E>TEFozMz(V6q$VPxp=I1Vy2_spTwo@b%9a_iX;%HhXQbCP zDT5PH&+|gvGI;j)lOHMIY1ouSm-Y~cRUdHAO|UP+5;HrdFK8W0{mYrFgZF!jf=pFI z2DCKp&$n$10ULd!9iye5QZnPSs$)9d;|#W@AF8J0Fe$op&{xkDv!?M!h_;GnVh3pp z7VO@Y@ya(GZhDzW0u(v zbybU#VB7P=iJa;d-&EyoRB~%bln9qoOW{rura6_HmOyIrNm^_Mq&^_{qYl&> zY=5F1b4Oebp^Ie9hteDHO6QzS#yVbflr+seV{OFWfBAn4?^L`3gs^Wdi6wrF+*U;o z(YkIAA{_dbs`mN*YvvCvMq_}lk{Zq>SM&~}c63apq&W6mu2bU!o$o=dx2&jNJpn=emzDDig+eqsWz$qDpDnPRWG>6){ojL z&j^d}Rde93-{zO$Og|EnXPf2TNqP)$1VeuYM16#Uouj0>oc>lgrB?v9TVSjJQ7Vjy z^vXv`9?$hlH@=oU>t-#bVCGv4?UbW)E8OYr39<@RHcY}?ig1|=cBw;rIV4#jTS>gu z2b15{aJ;v-5fQVb%zT^h`$<-M?sDOO&^O81ReVvLyR*8zI2jpdXsv z-AY}hh)^c97Fw63#3%6Qm-@zaTRVx&cBV^Ndgh#0LRW-&>fW9BqBz>y#DE7*M1+Jp z7tw9>uVX&-!7CR>nx3XWPb!9(q%;~j#&AHsgPY)V9xCwB{r3~5flk`^c5~ps-RnGJ zXW8S%Dnr08lHh!3VD+q8`9K|hK@Y0+Gd>}@Nf?daD<}@U-<7CCeUaz6h0b?Rq>S9M z+xj`>&JRwq8DMu{6)eSV410rR>|j+mVV(gu8Yf5374;bt#t^Z`Uq6>I?xEi{QrGq3K5kpnP#W4~55+Z2~(^$y% zAXM`U*P83!&g%GTa$roIIo&@u#!@6|_LYiP=`Zn4MEg(m*ov{#zw^S!yXghXZRENK z%01cZ*F>#pFPBB)3Ttf$X1E8_3wgC0HB0wVP!XS4KRNGCt$(2V#b6Z0ly@U1Px(jC` zs)?1nR@>i9xJ>l9)$%>!ryZk&M{Ic99>4s4Qf)*m+&*PITCKlgL%u>TbsV;weJekd z1B^}*4(*#3FXUAXBst9`!vGH{lXJmwu19Wl`<56Y?ALXvP*O;w<%wuUM^v49t%<$< z*!Nu2xsY?j#ZrjLe8-HHu3Q2dO}S}ediL1O-Te&+qz;aytuz44;uBei$y;pNlo%ps ztiKnI0@EKIs*@!Pv#$BjS-P%T^DQe_NkF2Af}8;%zYrBN@6=C8T=$QnqG+cuFW6)g zSDAAX<~P7nk`ISSP?AxIc<wXEt{t_;6It}S$B*`HSMs=^$TObf?K zPvY2=x7@ni(a|j%WsIN9HX5M_hx7J8Gmyx-e{A_D>q=ISDdaHTjeV7K3Fs(@&14HI zo!+xru;+{^Jn^Wc8Q--=Dy>kqbeB)=*{fPJS()rBC=i)FE1B% z2(<7+egD3gxBKt4Sef~RsJ+T5*=^g+xg^qlo4;y#!&qTuNY^y93w*yJMsE`m_1{9X z{rcYAJFI2drb>_Iw<6a#hS^x%$o{`L3OT}&aYdBJ)DZU_D<+BF?gO_hJt3}zjjASx zlXH`sqnYFPg0+*1^UNX!d?#^eP|3evv0HlO8QXkT^9x-~F>A%G>`&w9s12}?{KE{9 zy~bI6*Df6eFO=YOdps zpn{%YTu&cd{e?ehBdaxxtdD;uSpXvz*q3(B`2}86m0rl^{9Ju;FR*0@-ZNVXe{JRi z1>jPiK9Z(m2<}*<%dIWx@FlJrjT{^{iFBXqm$FP%w3lUOU|5< z`~!x^P98m1&?iLgfC+Ua`VJ4TT-z_)e_PeEQXLV890|;NLzEc`&qGS{(0K>9{u24&hQs6IaJi*>Yf`3CrOsd+J%FhF5F538Pm?wNZ{qwp1xsp zLt7?1T=;45vSwwLrp;<&7Bb;Y#FAVag0lM!b;MrPcu5fT4MP#j5CGqFGgRBsK4Z4T zK|R%8<;2RJN~u(IDfyFuIHgR;keB9VwCVY$#~|<_6nW7N7i#ItZm}w*F>XCMn+1fE z2H4FkGXHg8=Zro#3SB(m3fkzSQUe1*ksF(d)S?zAe0;ddR%yr{5Tb0rbYBs!#(88r zWU%!6$;U2;EMuWJ5Tz_+6Z!}a-#X^n*+8rJH(ZU!A2Rys_mq`f!PL;Jzn|DC(@A2; zUMh^AicLRXb1h>NzodI1JFF9Amy%tQVV&ib?~kZ`15L8~o?!p89{=b`nCR=P1iwRVD#t!ZJPdqH>IU9n7|D;NFX@70 z7w6)P6s%~BbjL?UixLgi$%4bqy7!2CVZ z33h(Qav?Ch>i9!x2mI>8uv&z&T@)qvp&i+ExnCPYp9VrbMg|hM?C0jbud<-icjk8C z#7qFt*1`{9h8xpP;`0y^K;jfAaX&H1n)LBx25^@R*LD@5x&L{us*mq_92OGBErrKc zZb5B$l3G}a0kaNZuFAHN1ar-D3>pF^*{GWUx78B z?y1iBa3h;MThMh#X!`Fbq|{F=Rfw--mdC=|iFu<{$oj{0U7*_{pAlwFA9AoMaE^9g z*b}4i?upyHU|?IlIuq&qW*|NVI_$SrzxC2R5Z)5`u1dAw zCHVc{SiseVm@hhp1id4!3l&5!L?4+b$(C;GHgCGhm_nUTqY!N9k1_9guTS|>_nWk= zgI}JS;(nrt&M|R_tyDtR-&|1?QBMC1(=Ft?;rb)>Z&Kq6+6{&bXDxs#D5vci`OI-9H1~Q?}uP|G9wliA3)ILTwfu7xjHVxrogF!b&1x zE5fqf>>5t zVgIRh2Q`KznA^~Umz0mZ$~&WH%zY(!`~$jR`c5Jz50$Om5kZwL^;UZV(o4AEq1g7r zU@dRx!(CPWd0*Oo_@}J$0{Y-?>h$raUmPOejO_IXJ*Fq4Lh>s(C>_I3&ieihh8u5$ zE9+M%1{(xTd7PS5GCQ=2ek}yrWI*g=HEp2)&63P-ns_5!^a#ufF(W z@@W(1>)7^g;pUh2JF4}2uyeQK>`J0qbHvo6RnS4*6}_vu($cWp_$hUFU4*yaACXc; zmL|oLF#OjBz8MB{%1?~AN*ZMK7W{G6(vVFIEEdTUvAayJG^>rjJ zG{?B$_>@R}$_3H8TaZKK2&m zHx_5nbHt&JY)hVpp}t<$kn0Q2exTMRk?|5}`+ru`a&zZ@KiLU8UiLuOX3T_otaH0D z(eMa~)jhzwxNJM22Fym8l6C#wUU$TFVnrxb#G`(lQ2fO(+exWy`O)TgVR2UtZzIpd znoLlXu&|hKw_*MKHR*J_aq`PE_Sdl3w#QRyxlt%GzieqgDrft1w~$ zfSPXZ_DuWKA6A=8{9TsVuw=1K)syV{DahQfXh}ZH)R@S>aJVzoAylnzC}X&3StKz} z^uCTN_1dgRMJ97+?S>vGvujC7&9svYTi_{OU$fHPZnmiZ>YLa&xY1#3@1{p$Hpoua z3ni*tx&oOA4!dwIp$;3UZPP;hg>5$(!Ue&e~c zj(fI>`4Ce5F1@1)_voy*p{2ALMA{*U{#q-6^M%UR(w=mycY8RQj&s`?S!)Eo3yg~!TM_w3{wbFaCon%kCn)`qV>A_Q( z>hTwQMkSXbo3avYWDT*6P%R(h7gXx0b9%M5@@ZOi<+m2}_W(C*4jKrW@0OFA&>8LHV7GlJ? ztQUJ0q8Gv8K2~^FP*~<4`1}Am&xw-f{53Z{n9; z_`;>D(_r<()9m42eJhv~0`9f+^$&>}2NB z7JRzVH4=LUAG=76FxT*0ZDtpr6MWjd4}a&+QY*cm->-fxKbr2JSaa@~o;C>udbg5NZfiVW01h`eDKL`YT9C zGP3vAq;+)ir0D6Lw0`O(ZMx-g`fdSSYgfI%0{?)}ddn(kgMRL+1-0(k{vbI`Q(Ybs zaaP^Ri-`m5=#v@3!*fsVk2?Eg!g~Esa>ij)eeY#g-ioO3jZgCVXiKu>Q12cDux=RF zEt-QpIVuS)=giX{+_${}b*$0+(%!t?yT`XCErftEV0h(?;?oVT ztn?Sxx|->#V>9R4k|>~w;r9p5hPUc^{2gk6bB0G&6hWFj{XK>iUV=acEl5cMpVN&} zUszD!@Bz%8;1X>Aot8N?cf~BX(d%u$=7fm>&^fcDBwk8qjT^=PQ!@5|)1{aG_C?-HL5);p(W-p_4v)3ou__z6 zc%MnATtxZl*Qr5O5vuXORLMbsUh=&LZG!fq*x37ixevLM-%LeRnlGe04`I+*krzP$ zRQuj=sC6+rn}O0BFV`XEiP@0=qPKU(qlWVAjWKd*-oy0UGp=2X!E(9ht4WUxf3cFL z8=090GJ}Pk?=dF9bxh->^VP!A4nCW*!OipltCyEYcn_iR<}MriL&Du=dE&9^`z*K) z+}kV1b*>kQn&soMH;*hm@D(8F@lG9kz09-kDZ`_^Mx{izl)#Vd`T{aHbW7c7Ww%;N z(OAtxITz9O3Lgv06cU5dySQs4(FsiIayb{m;U zQ&{K=59zGpqCfWD;mMDF;yqIT=(}XDW-@L0awVnzv1dGulm5mbhgo<+x;&N0ymm#; z5%Jt^KU3rsaKlizGHE(QM30K@saq8{|3c$yKK5QpCgxWkh)@}UmN!4;MOTGQ((ByM zd#ak4*n}6o(j5P`I?LNV*~+KoI=QCN*D54LMh|tbt&83#Kb|@a2fM#(E~~W0p7tAE zir#;^Wzjx5AFcI`km!vBfGh&=QN!EeXY+y?C$Zso)*dI)4XM%S6!@gBf*`FUMckYr+V6>7A4B8Y{`EX}Lb&YM4x7*_Z(-?m&*#1c#Y&~CV-0CjwB-Oz3>?Gn(>WBRHlQi*Nwr-n0On$2MLE!-+` zD7H6YQI^W2*Uq!jt{KxnVTmwnjKnN9sM80B78FOku!FoG%3(H%KW_W|F}i^^a}i77*O@sM=XUH#4(R6<%3)OEI*B4 z8FF~-XB_H`N~YqwSUt^ZLkR5sD=^M<_EIc2HThQ*e3NGZlvUa!)=h<7UC9Z{?)dLg zXRK|ct>+jx7`lrT@PeZZNoG89;R&ZsdU;9OlQ(M33>F+C#%h~V<&#q72gg~w|4m_v zG*(Hx;5feBJF>xdc3BBd3I*8w@+xj}tl^5ApPQje5Zl53bW>W(z$oYizMd98-V@e& zVKJ&{orF>#Qw)1oTwZT7ADVPsvML%y&BgGb+nJ>C*X$X!OOd@|d!*h^a$D(V{=xqc za!Kl`y7vmwh{UFWUPaWb0&8ilt>TDVixfQIU)*kpW}9YeCS#Wh)%Y51bDJ`~>LM`0 zW=3!Mq5wXvX|Uj#2oxk7$aNv5mL*^cpgWhBy(PNVz@Sk0wD(wtmrF{cT|gHa z6o1s+Z*$G08Q3}EdH^h+{GZkDP3rNBs?nVqu`bL26(DO_k9T~1XFtN@Sim|a>sVw( z3EQT`EmBV^uM|IoVxZd%>v`v5oR}$;a*mI>VhKsGaWYr5EBg8CYKeSCE3mP}+lngg z8g*bF$@;D(+XA1M0lQ$vfs=ESBpW|1Et@UsEPbIyzUkhTt4 zDzUzhRoEOs*=rc_vu;BgGxHp$rW+ZnhbVXcslKpDh%SJ&u})G@$Z^>ARaiJfDfFi-Hp}5moMbNf6|NdRXQF+1;K7Pc@3yvN5`HlOnK=O&*^-O<~ zk(RC>mCRu{>W|e%b}08|gXv#b0fG-3hCgV+Rn3~VP zuertYy6)_5{Wtd2I6^mBss`SRsg!#TwU_1^R;Uzzu(_|Ee4_wFTkLT44P1wsKCmeR z!>_mo7$($nZVTmz8Et(jon&#(gLX7%G&f0y7^CXw|G9yOguN?Lu?r_}Ub>?&3M_g% z^g!9_RcX@m5%ME~7!VGy?-Z9O)sY)ctZSmHTvRv0PGs;aSYtHR6PVP}KZMU~)Ux zVZy9|LeoH(kt7Uwr+IBOBRIL6rQpeM6RcoltH^|7>^RbPN59gwlOlaa&yRmUDYhA` zn*?DsS}qRNE38iiJt-{k9E_q%t?BPNvn-~${Kk5$x!RGF)-PTUchK5ERU2j%Qf*CCmEb>No z8Rg9*erU;KaQ0`MzO}x_9$+!@VyR-@#wnY%)O+&fg0$Lc);BCj*4HNyqxjnbR4c|L zxJaA6ZzbF5uPKv*j9*-=R{69!Bn6y1Xh}OB@~K8V$J1^0?Q8} z>GxHW%INv7dQi_&k>+Nr4$@q4$how?L+_>N20BoKTD-7-e*KWkY(v(pJShT(0eb!$ z$Ir@ThID}tEPp>q64?{!=ECz#GrhptYoVzjQyJc8Y$ihU7BBe?G;_@&Sp`2d2}|@h z)WpP>CrvAk_+oZ44ikF~&-rd?AKvJX=iQ2z?TpA2elRPHUYG2nBgNUMeNfaDx#+%> zOHU=CL-OWn0*Xq*ZFKxLcUTgz7Wg&sl3t1O^QjN&t^VJZ650T@POzfqt`J@-?YTZF z+1XP!#|>Cu!2pU8&bs)o>vqQJnUplsFN{3|)hi87n)rV|nWW^4Anzo1@Rbq@O$twV zy{E6mhhCHDi$BbU9_bH_6uTG&Dj`8@BEHQtBEW+Y_=V)p3&5!|v?i*2>h}|+hcNM^56 z35eU1*Pso&`p(RBc4+tQyVYN4TCD+yUEsYzak#W)iILmY&#^@wd%rFzptRolHwM@I zvevkpPw7@_zn}EDcSik!w5meJPHH~--sQc}@O9NphX;gFYsah8t?51JidnuUUU4nt z@bVG6wsL2APg0h6T5BlJn2|k*Ikkf~^U6@$hCmGm7j%e!uI}IIZ|4&!4uT_leU3j+ zXR*DCQlI&n}ij*JE|n_DbJm19!E(zi?HNH7%BYdIUyGPy<1OV!d{|b*{on4 z3!H2m`*@OCJC;y_Jd4_Ohm>dErD~uN^ACe|Mi9A|N(1yfcI&OmQr0}xRyNVs!TQgP ziRM{9G8|(BNR4wqvPHbV;=ac;wKj>DtXgIQ)1@afIX0OghCngCDOoNF;1sd|`_wM| zpdI~c$CF3PTrvBylu|ZX-2?A20wK_Du3_>*F6xk`sxs)FNcbB|Nq{(At zm&LrC17}c`Owks^Q3P=a_j@72CcIK>|1H7UahTkm} z=m47o;cS0Pjep!L6=tG}|L2D7zCWgQ9`jC~bPDc4+B|2yJiDzIghKM$d@jYv>jWL- z+&hv~2287+WWy;sxi~4*XpGdh5cf@qMlqmNBh*?&J95@;G{@`rAj9lTdAnhmJX3}H zyyrY|?Jnj!rja%ee|Mu%nFW6*&-^@4b?{JBip^UcTa~HQX{9nu(>a(gNkl4HA8~1X zuNzWOHZ+z0w8~iUN?EXbOVEHxaIt+VqE{QaF_TuKRNCM!uiC(j2;q8bDTVI~ko-qo zTjYwxO60A-Qcq%+2Fnj+{!vS2f8jP3#+qd1J-%sJSr4A~aO(~8`h#bd&2{DK2A&G3 zGiBXB{Y^<$^v3R2$(|M9!Xt@U9u-FOUTS9Dn#UzEx>iF)fiadL%f>P@IWG^zE(<7i z^$$Sn>2`36hf0vajENEtjZm*=dfXJUpi&NC~Gs?~A62%`w{k9*eq%vEG^B2IRB zhEL0Sphw7LlLprlg=)EGT26eOhW2j7KB%WCsAWCcHUk|(7~Y8N9n|IKRL$@_a$nm6 zzkSKxC_=Dn!p|iS6oshf>x2;Ey2Br+>M7*tg7S@8#aI+Ymyk0_yhGyC4=J=4U zqW$~W)ihm-p(@34jwArm;kY#@6KlYniOkiR(hkjpeo?~q#)RdLMC~%x!QW>?%tD&B` z0|Eu=WZv2szF6qG@CXc>Tix+$O;k`S&5-Kj7(P0LS(~`2*ZP^0*oU@Hk52m^X=v2) z^$3S4;|1lXN< zQDfVIj=L1Tf@npGew(V$^|7h_j}7wRy}-h4*Q3DL_Fr)K^oA?R1Gj|>G8!jk?siF7 zH~Nj;0OH*`_hG$GGEgz*Pc6o|&oY^XdD0k}LV#%5QqfRPD&mAq$Yd5V~8nqXaml!90v8sZBpKZI5tJ|7ysVR+<(jl*UGE#OKTW8O$XFZ(Ig zM0v2kwt4nkiH2abaF-qyYVYqRWseC^>1mf&$_O+bJ9zhXH#-qVntmEio#b?5nE0xF zZg$KYg|Y0J9~hz1m@du^>UW1OfX}i#LjKqHiA-RZC#|;Nc!W0Z!6oPg z=YLmKKhl~@9`HFw9P&=?44y!cM9rF`s^e|54IZKgZUlUvcdT!xTH6|yXn6^Cjm^+K z_XsfrQ>lgRbmV|ZX1NG-%gkVizhKAs{D`WlPF1Of?-eKVNTh;$c*W1y=cj^hx+pB9 za|j|pfS2YhgmM~Qa9ZxkO3|o&T^G7dTcl>)YtJCDWb8qp`Ojkt;+3065NCY3j^Ts? zM3SK(O0Ab?xoh2{iDW5u->;9@j$KZsdr z{Li-p@)T+?nO&cVp;3`3Y;}mwOaI5tQhbP7nJLl&4ibBX(Zw%ObyKr9D6M5# zVho@>$+RisAQQpzgA!o}$p1u^3ert`1yWr-jDA;Cf;QP^0+itW-b3)X6HJFZg4wYJPKB`bu3}^m7t~X`FZmT{gRkoA zK2Eq`a=wM94IuA}t(u$R{nq+BuI#H^2a|*}oS@UrDwd|#mDfh)UMR?C9Uz93!G|O+ zq+o{RltmXjZ(l7|&{oU~6?m(&r3k(&$;@r|R=1af_N>V2eBL~fkoTaLIq>@lkMr** zylW5t$Y@)-3Q(E+yy8iX!?fLHck!+m{z=onPOwo*xY6T$58DNikQ#=}@pk%v2dO0; zOFlbS>krpP9TRmz3ak>nF%gh+N#&C+%to?=gu)}xT7uwS}(F}bglsf@FYBl zuYW`)$r^j{gg_gvI^z-im?^oV%0PFcU%7hL z#)8!ur|*K?1q8c`oT@4X1aZU=4?R8YIHEV{_wW&{`P_tm&n5&e$(O4<73fPU{@O2Jp=N1gMO- zg6XXTwIegHl&>I%RO(R=D+hrFzn>gO-LPc*eqt?s6kEq|Z|P0y9}OsgNlYOLAEf28 z>&k}TN;F*bARo8lWLEBy-<7F_R|-=FDqz|(-qoW5O4Krg*nEf9bCb-yP2f9*lSETe z!#$1WRB-$Gh@rfYMC?|tDID_t=G}pTn0=(=m1z6ayYb>*HgZsaU3Q@X%uSLcsURkh z=^_qhf7GTqVMu{};!vN*R9_VL-A`XzQ)oj4!1ni(ewWnWPZ%56dnTzNM@F~y%5BVI z0!ciV*!t=_QW&3^O0D4T{^%h2`^h0yYO=7N1Z*HRJq$$%;XN>xvwwXz9NEfVN&Tg6 zqy0yvfV=3;k=~v6*Y;YT)=LIs4yuH;;hX2E3U`5LKf)3Lj^?-v&p@kM-I{) ziV?~&6G<+r``^j%qoU&_ecq5rRgqpd5nFG9fs1F8x|EiQE_u+wRMFF{%9f=(qGyOl zjKzU%()`JRwA34f`rcSR%Ex5ef8J{E#z8Ftzm;tV8ZNfnpc(w1H50UY3MpFZ*A%J6&C6 z&O9VXIK$Pi{u#o@dRu*%VW9a_bgeJk0IJXxTi3OXO8=oP*|NZ1R&iggcMUXMT?ZL~ z&RWf5UU4<^lwSU_@bYW*);0A_w)7gy#mSiBul4`6JtZ=g*!TMRr|>$aaRPWTI2V^D z3;J!AkvJ0tR6ycNYq1X~cE8qJYb>Zv%kZz{K(_#n)c8nBJ3d#KyEG`n6y6Jkc_|1a zCp1zkZNv}O`3Mb93@E~6rH79dGDDL+G?LaE4+4>sFtZIAJLTcJ`I4K2i9La%NMu#4 z3Cz2qQc&yCZ9ZmUt<%fgeh0|t<5mL(bI3%oSA9w=Ylo4DY*+}ll&pkVGcU#ml=~8m z28ROVoAZXw5@DW%U(@9iP%y3LHa|n$hl9md71jVplBXI)9|JEB z6tK%#&@7#*62&k5l}SrTyUYi*!I5*vWql?4?nvMAMEMX4Eri>BU%yBXTk9A28Ng(d zxj=27TbOO?S7gOY?}!}v{(fK7?p)9J3|qPbopBKh(M>-qs_Iq`4Z7+g_=rD@t{jO* z(8CSFT&L!5#O%;ZcY&BPahIbYH3GN<&bVUy{l zj=Z1wMSp;g?@^d8rj|q|S3ur|%;3C^|KQGB`jL z2}((pg0td`Pb>Ic|>){mm`^pZIbXg0Xfl7uJo-y1CZg-e`1qNsV$6|Z;;R5eFlSzq6k2K#v{?!IdY0U`>jaVR| zU%V5>SasJ^}oTE6^S_6zDN_5G>d6 z9o~~E88CI|Ngb+2AO%$m@?oFWxfO9RVa=_vbz~S>7ruP#mx}SK_ik3HRbqJCi4^M3 zUU;P}tn2w=bu_NN)DZZ5r_%@ChrLI2QkI|a@hK&Q9}o7+Hym`v1Zsg;7YK0<{iiDJy?gdE`!wl z+f#WZN&cy~74qF(x@lOnF5mDR$Rq8TZ7t|D`cd1f(YIBk$EBx}DOXztD6nG)d&?7+ zo?!*0a{M-`J@9p}^KK{}#5%C`6E3zxLcRJcX~qgh&M_t)wJmzuJ_Y!c*?Q&dBadgIPu&VM>|eN^e~ zF3&EmjToBtRR5G~)tBxd0aHtx$M+9V^WHBTnttuD(g9iPiT5nwWYRMlzSOJZ8JAy* zhIg?GDMSwR>dE=fBC@IMvoc#hl#pP!9)p-r@m^xc__vDPNzH_c;It{PWT*Of&2J)x zj@$(G1*Gib*VIC|&5|oY2}jf7qv{EuTx|g!!CVJpw@Dn~?usi|f!BD3HpxeeRsbZc+LTSDs?ZOU@~n7w(H` zh`I$dA$>hfT`!Y*YWaa&_v{V<(ooWd#AL}&BhIO{sW`A*6^yq$New>0GIz0(uuw*~ z&vDAsCML$20BvS%fHyok`OifmPrx8pX5MOvlb28z0sp1XU8(rgREOl%>r~auTb9c$ zSXB=VN>>@7oPxnB$XEUfJX#q{uiD;IQXCw8EWMKhTHNL4uE}Gl4Nc;FQ1z1R?ex3k zq>Nf*18Oysa5;>G@NqiwE_D7R3&cVux!5VG@Q%h^rmc9O_F(@&1~+;vKV#e9N})rn zTL+_&v@oQXM#;QZR3TStH#+fQGdoN_<(VS?0{wx`x6_~0xA|P1;spIx^>n>Hj%Zgk zBvz}~5NTvFN}MuIrV6$BtC=^M8?nYGEUw>Po)IV3X~hc@tZa2cLptIPv$F1zQJD&8 z61ye|h!OFFme(zN*q^kkq-PBpvsa34-z#zAyc=zxYda^S%D(sD!$1E%7rY>k4-{sI zFtsf7hl1&GE^~QHZM5NB#s%tMnn#4II*F*a)SiiUeXS~_0n@%kcxkjJU&H^?K9S*L`i@o6S8a%OR;gUpEIsdxzu zdBq+gegn&B-D{Wq1%cOXQ)iH#D*PkgVD&cJjOx2ZQW|eyf<3QdkSu@ zJ?!VJ4DI&ykqK3}Bpt7g7Od*Xsu7SI4kPh?Y9%41)+VqJkek&Y9+frUwSF{TrCT59 z$~4r+&(04Nygt@~B~t39O!zknb!zylt8*CKlCrb~ml#mF7s;nSD`5HmC^`?XCe!V0 z&pI;}bdaG4N<9LhhltXfpFn7#7^)$Zp@d$8^!6JSseyrzL_-@w?~~A57^O&pASFl( zASKd+Mj%q>d(R(`m1HIF^X$FvdtY~)`3iN|YRJS}*Sg7+xQ)l!P=S2SL3SzI&EZwCve;EJcq7#)Urz|r@Pz7DP__C;KrhYgc-*p z(#n%ew!>AN9ni3M2Kmeuc!T|zeq&kt5c`<`)>WjKu$(kXAEl2O$36W{$`taR$(P<@ z1cH?5ncVR)w^MO@HSg@*x#$-L-^8dA)n*ktbSNTfJkdg#Y&^@3rvC ztjhNVDK{VSaeV+Wk3>arkA>_(e32H2dv;q7UpUQR9T`sU7E8hUU5d`2eWRj+09e<1 z_cdKEB=PdiJj$2S(3GVT@TD2uQ&NWnN*vKSB_i%6&%YkET85J(4cti%`3Dd5 zRM${k5C=Ibfe=uNhx~P}Fn_4fuw9u?19R0tt6!Ik*qFJ@l{`H)rOx~D2l;neBC=S1 z?G}9A@E(ogzbX?&v&Kj1oYwb8|tY){$$w;m7 zgUxehL=YN3oKL*nl3mRGv#yWROUf8T1d3y$^N>9m=m3F4Xuw z%>GBP@y%OzfJVl`hkl zp`D;tdlQpufw}kUZGZNi8Tp%;+ip2~Wls^V;)c9FutE4w+ds@=P4tkrCNN&{a(XuE zC|bx?lg8{SOIjLdL4{hZ@d)1*NBq+RS?8q9sC>;k?Oq4um_mt6Rnx4wA4LXgpUvMU zU}GfczwI2;=NI&`Y*ou1*_G=5gyk7UmJP&iGId=5 zt*t>B9@Q{;nWoCRCF||;_uOB(0^*3b*LI2HpOPl%^ic?vzS#XHX;(~VuJL=BE<3Qi)wE}8?1GOU8SW^OPYQiyD#DmX zJaD!<<>MWI`M9$JNarvw#{}^&_>Empvs+z)p~!Cql4q}Tz)Bl&j#9?wrflO9aNbZJKbvL)J>Dn4Brs6LB|aZkWxdfleRpc_X)YrR4N(Se z4jH>?X0_2M_BmJbU4mAZFDv80)~C^y=YyP$^2AB$hvjfDtVuD^BvVsa52DOQM=Vj- z#sGB6WbKTC)Q9a~+#wCNBCZZ0mk}K&!xw7&>xX8S%o0|N*nHtg%rj2=mea>tF=$;v zSScfs8&Hbg2k)2M3)Lp7vz?-F;!0z@L(P#9x4m#bP<3-^vh z;GH=NpDTB8o2D>5RKv+YCG!9 z-pvvC3#dCL%Yy>>P#yarheQjQs)sxY<@(T!BHY+a`^Y6n+lO{ z4Zbtb;X!OC2aK@U+lf*jrqT`Li<@knokfkpqy^w1RHprJ{ya+4ZZ+_CRv0;9M9Tkt@+P) zc{K2dzn3H_E0-h1+Ne(|x^#0jitzxd?&bJYw*b)8y9#^QBNPL1>BdMOO4PKLU=Y2< zrd!mKK8F>*TZI|@I%@tE%H@!K!^ZG8q~Hia6_RY3tC(?K)+~dMla5t{f42~Z4<7(3(_+!QxBlz zRf_V@7r&V&LXEXZuQGiJP&HHfN+(d6+oYm=8@P&;C;p^N-;+oDNH?x51WUG#WzoaN1jr3{^%F1uQF#E2);-6P_s*_~t?0gK3a}4#~LeEdO9J+tNoVpySpQ8+pkZHbq+eC?HcasJKQ^m=C zq#SK=cWYw$3_7HwxEYjON!d^&rYeuZldNB2H5G*d{#VTaf^k9jCL%z6(#Uv@vLJiV z<7O>Ad4fqL_0iQuEyr6D_?9LLw{q(#^&}&1-dSNnVRBUpTkFuO=BzxqFyo9*(Hzz# zd!*~?*I8z%Y2kozIoCx13tr%i*>l06Q?HbR|J!JHYu*DxD&BOTlQU|=&|zEdD-}pR zj~=Pae}B49U~6yR-`vp>bzGjnTun8G3Tb-K&{Xzb+>ra;pRY$1qd?_>a?`7RZ^vzw z1*N>JS3rehgW++jAX8wAGt}MLl=`Bm6awxu+0GS|-31QdG2e1W(J_Pzq~AD~Hk~i* z@C48)-bS1Ff#O-@XD%8tc1N1W5@HwD)U+&yx3c{>WvF15&#Qs?PmY9#v8Y?=l@87M zl%2ePf7_a~T;h{naoR%lA|+3ggf)#PRFQpo~!Qpm$RX?}kB6777_eyr7BYtyA{ z^Gz@;FWB-8;-1fFIefb4vTvxWm{9QhhNZ5XxL+H7`fJW!%rG3A&Z;pUjaYy%qT=4E zP1*7dku_ZRiI$Ws5cpWQHax4EKn7HhCybPvq8rO%yflh|N`U(?z_}q>suOutrk<>q zN}IX8=|W9wkSX)Ql(PAt2r$>pyN=z=`}jVKI+sfHuT(H&jK_O5Em>_QC+y?wrx-yzHDOmcA_s@N%`_=I8ntjcM4&cJ z^UF=E>L>a=TbMm;)uZ!QJ-r1z^>Xeo@cgkjPzMWp!*%vBMu4k>GEgie}9TOHXV!5gr<;`cTx^6 za>nbelJ}aO>$k!ND$?J_OZNe8ASC^)5QjCll%3kf@jAs!%bno}bG|eA);PD(@s}8$ zxU}1o1@8Xt8;76fzb)0BSdl5CVk(q_&dIkZVzf4W2vXeTHjCqyJoz#_l$3BzJ&^as ze^dPO(QZiuFSp*=>_-fm<$?ic)#mr|10{juLec&oLF|vM{89h@BzSE4v0=lxN`!5; z4BOMCis`%8N#|CC?bzFJu>48DFIz9CQVMd89u->HD71ZP-_S_f$IBZ>b7@JDixaq6 znbVA?GeX}to?vB(8$FFw8-_ZE!eIiAC}NgSmULsVAp(_YRv0lj72uank$nl>7JvB& z7uFZoq}PF4LGLP$_nh_4oe0eHqSA9~jRsmxl^(>`4fc`1?qv1Rqe8 z!w5UiHBz`K-T}|BTCUK0wB+E&>qh!At%G@XMi%)PbE`$o7Rs0@Y4k+YMN3(84*{vN z?YYygK2d2&30}6oxB6*2N6(FA^zTnj@Xq{@K8_m?NTg$=#lmg47%=jRG!|_Xi->&6 zQXyM3k%}9(B4j#bm!0G0`{|^fp7YF)p{$K9W{X{Og#KQ)m`dOe)M?|;aBP;HSU;~2 z_%tK3jo|S$HRZ2;wMSE#z)oPgtM-hXyU3QGKjDsFh+&>-gCApW^OMnl!_f6vF`V&d z1URc7*Cxg*QXJ(yXVW3xKzU!RK}|&QSG`1B9bSwh&!ZDtN-7OuLGqPOSO>Fl3%@u- z(r_rnc;$}{EUNug%~b1hb4P-=V;&u75Fgv>X=@OcP#N531y0EC#oSWRrs4xmf^+8Z zX^fbg9+5&p{>k}5GaV=K+aBG9*gdgnB_dKue9vJHi{?|oowNfS!HZdk3VoP-fq$m! zwsE}PzrDOo6U#LY-eau9&01B8HuI00Gg@bO!aA8@f3Tfg!;B!^ol-iKQBa$`1k2CJ z#Vw|-8%P;gzPJ)F4e5i*SOD6GZ4bgDX)tJm!l7R4K+?49dp{q`)8az!aXpJ>Uv8A@ zKv`8Tq3!esO{pcsIB}m2F&QwYcbd7(aU~>;N<15H-*7D6L_CBE(!S%d7RHo9f!_L+ zp0|pDTR;ZgXv{JxRYa9nUEwrGF@iHUJlgwb<(){o{yoda*=w+I%Wkd~1pR=$5{;2b zr+lWIWo^KL{EE08e{v7aXFDW@Nom)l(e|WmJKJUQK?Aa|B9h`{^9raS4&b-K;2Kqq zBdKUw9gQ!$eB4PbMk*4U%o0U(Q}>HDMg_>6h>qxyVf)YDR>2cPiXh{pv13hz%qneB z%du)23h!=Fx2_}#$|u*+OXBUgQdRDvT=kA=^~Z(f2Sf>UCZ(2vUkmO1tnX`KxKoKYmMnGn~%74QH~f+tQIw<4%vRU0VS^V3_k_AB7fbaLlG zClT6I88Xt~8gn;2v!OdiMpxdz^w++@*J{lQmL2{j#t3ce-y7pFap^nC#L=l)!A&;aolKEOQdiCT< zquRlE!mZl)lHuLpDdrTNU%*<}-Gw;Un;*OmaAhHSkd0QD$bbWs?d37&nvjuWQ#U#a z|0i2#*w7ze2G)uw|v%R@IeK7 z#cE%sc2Z~OUO_;S;ZZhYhcd%l1nK%L5U!igdC$c?f+-*~WzS{RWK88abJME+uD=Zy zxHBoSPurSoLHSW_zU98y$D~XF_1m~I3lUsKdIDi7Lfo`oDJtpeK~)Sf&XlXlA*FT1 z56K~#z2W}Aj87zgBRLiC5kWl?&)1>jRNsVE=fJp3^2Nhkc_$r}<#$mDH%z*BvRV5zMcL@{n#q~&eBr)N9HdZRGm(*6Q;! zwb<`;aamq&T*3d>r_1Yc@2Ooo-J0~hlI(x>)O)^Z(0~viilUao8 z0q<42{0V=(i97v`mxj#(i=|ji`VaNQW!67U?ll@2pB&4jQ5ySa& zRKp!!HrWx$FrGdXI7Ho2J}0lPUgG`VafQMOH9hLJ|L@eZJ;jU2t z&-_HYBfINRTGr_q+*Bn(qeHdaR$*;ik9UsxA{xd|S95q*F(gEg967QF)AmplWDTyK44>7g>#B3a4mnU6G+P| zZwrWEl9VGYm3yGKOD;XlTb_@q^kqSG#Z7j7+ZA1EU1;UCG?QpCvaTRI08k12oAv=? zSPUevVONjetO+@rmf{_9{vdZ^He<^6ST8umGtugFFh%I!pGF^Lq*U_%z;x(Yuq_Na zgpx2auW-HuSH5@YJJM|xo136UP7a*$>rIhF8*OrnS|~0*m(4` zY(qUrMAGanjNv8P6gTS9bo2fc!QRp>VPQx~tlT+Dqv}YatPj!f2?NOXVuvWaMlsGi zgXYM}>!#gIBz$PvRqfg8Y_D~Da7b z!-d6?CC&o`UB&6Sf+J5hcgvHbdXYgWzxPkNMau%@>jZ_n!cD;>#sb74i z)zm@)n$}v8VToJs20D63@xPxxXlWB_?(7oLYjN&EQRX(>gU%#{PRN^K%J(-48ef0U zs*~w=ZRoz2b*D*7_H;7N7`8!lZiizt>KP26xy3+ol1 zJUMz{|L56S@`LvdWgzTpg}cZJTH~GJ(}%7AR^j?3@Qh^C9JPmSn~pNiLXj6B$*W!g z2>|^!%r8Gh2Jq9DEb$E6u#h77Pi^7WW=_mIu>UC16Z#)pR4Eh@VP4x4I#e1hAOnH?> zm`lC<9jEs#<9E=6D|#zkURWRxydoM-dVe)jbGI1(tVd;`i$7_j!FQnHhv>Iu2g?vM zdLZG%9Qi%X!;5>)AJ_~$c7Yd)A{rm^YPEWYCZS1my4@UJVqenY^T(SX9?u$y1F8dx zOI38^L6QtgPP<0!fU8`w+EElTH*=Y%*g8M&^{H;Ij3+4ImM(}^`Jq7EJWhtAUJ!7i zDmc9thDaK-3T_G90LEE$q#-pnM*5G6DfskrU1v2q0C2-2l14ri?qYN8ULIFVBNQ#d zKWeg(7+hQN!-lO>(QbGb5@Fe;u|K@7vF~EOW)c2gwKA)d;yA;V-olDHz|GR8l@tJ8 ze&@NqUlNzeHGBuvR%A(9#TE>o^ zf)6K?y2kv>K;%xm{QV>$H^7kOd?e&PtSWBTD*ZA#KXbA^xKqotODp(ovD^peI{iDz z=I0B_O5-cFP_g)5%OC$W;qUuOpGO8J85?4S@} zs@8Dgg=cu6F?`mAO{A!a=XR|8O}QGF63sBxuRin?9+by&UHcvyJ522 zhH|~d{uIS?;1f}r34jo+Kz;dlk?`7o@suZD*~TK4WwdtplC{>(jouE;sSEViN%EnB z>Acb|ZZd=ovH5}zGd+siahUO$f`sm#iWKsb13Lv9_IjJO@TzAwTF(f5qRpdHHP!5( z6;ButKQ~M>_><8^lCZf;LuOY4jdnx5lA0>l8*1p^9K2C!v2S`+{dZ!4m4)J1o4`ft zdIBeWKJA6REyO7BNojgy)i%dC`_06(BP73A*yAv2h1_$Z=mrqa4=LywbDR=s=`1G{ zX^Hg3vEoeaqQag7u@$2_w#hdZzFSaVx({s>Bb*#JJ|%-DY`Tm$IvkS5M%oxr2_h>F zju@w?@46_6m(zRlTIik)Jj;TEJQP}9ykR?$-M)%xn{d#w^&WJ8y>cvmfY#sOqV|$n z9Gp|c@DH74@Pul|tRV}u{paZdDVlfWS(O5*VaUz&Df=r%H2;JCAC$|(-WU! zGs6ArzR4f{hHFZW)_TLb(f1)lv$be=<1)4LNJh~Nz4$S>((PJ{PvQ^}WAzQ5MvwXK z-@JP=YGF!Hj)u40Qf(lyT=$YP6_CQC%=O;<^N+!J*CY0mcJ2Dlp#~4oGe{JW1}xh! z&4wkfB{(^!0N;*Jp|uFpqAwRs!jFzXFUuW3 zohvUJ>RIb2xh%FN2OaN#oO9+0xhXXrd5|93o)tbI-KGkOR3wAACz zEOr>vDJUom&*>>6x^@WJ6qb8oPSw_&joZk#!hF&{`lg$&)YB6a_d->Cs)~gCzizLi z*Dl_OCz^-T46H{SXG-Ri%-i zh`7ppOm%-uoXVg3`^Zd4ig(cul{2A$MO}qSux_^x76A&b8`sZ|R^Bd^Vb8}QjOd(c zPBcx~w^+8AJn%;czd=TDV@?XWvGd~ABr#PpRL&Hcv23?gURsD@$%aSbPgbb!GxF_h zhiKvfDZvEzyAE2^Z44$ky1wA9dU-K;=Tj} z#&%gx%u;*HitKn~P;;$`c-cQoz4(h$#nW4u-JWOeYa$~q-M6e+ilYW|c&NnpM}mOJ94t z&2ax_awKKc-%cuqujQPX-&EuWI6C(rk?z218`8;3p|U*&#|`f7gyuNERWY3sAGPW` zuR7oq7gqj*wSCbntd~O2=Ez%_bSD-=xqg42Fc&!8!j5fUzC}0W@$tbK)bi;a)o9_p zTnV~5U=RnaRt=r1X9U39%JNVeRoQ69uJ&O%=ySzlI}|%K?RxnDtWW?wFN$7hu{>L# z!sc2MSshW%uAdyq%1Hgf?$OZVQ5ACDk(ja<+;;SWo@cKV!*=KrKpFB1l*9hpI=9XW zOy>k&t598Ghmmt9?;~ zt>tFn8aQt1X*z+s$I!Yb#cvBf%fpE*hyHnrxlMC_kE+sS^^;^I-c%B0Re0f@rn{8NY(YG7S?S%p|#no#5G1)$D$j|LWJQ@LfTK}>%HN^1}`f{S3vDi#LOM% z$ZZ_)P24wpGq3ZCB50|4WUjt;y01D&Wm8F6Nf}h#X5+3p>yyX+tW4ra_UFjbm3~5xZRnT@k zz2z=>OhtZ~Az3@A)@9Iyz&EBr|mQhn!wm>3if*a7K!M+tFsZh8n8kgy3C^T_yW6;CREdKE*i&N*9fi?jC(?=3FW=>n46|0=lPDd;I!&MG5UTEg^a3M=xLOnSe1Rc zD2uV`H(F4Q86G60hJ)dW#H4Ya?aJyGXyw?`KckG{LxVVAKc#yn+zAPH+l##nTT!45 zJo{jAoWqF-2Z;0*oai+FzyRVK1q=HoG%VRaakAVKT)9U2pwPLP*n1kYt29nEV?3J# zBCcj_jx?5#&&Hqy2}1SCz{%g@?Uh$CrT_4;+d|Vit|EQUaq(c%d>VgZr`+dZm;qJg zIh47n4f-P6K^dyEeL)#Yy7tE-`@jGFi7hpd(vSk=3d85tX87OMw^&AcJl+FWC$r9T z49$Ko=&&A`!x!7y{_JKy8r`Yc(Ear5#$VMZNjcD~)U<&4vod#3`i^Un+1pfJyUe@O zAWo+W^?Qoqmkkyt81S?_*dBHYc6X8s5*mZz)5en}^beLAwxBW7P3z_)M+ZvTP;;>x zjT7iU6Of(l&DdK<$tq=ms7a=23|O>PemxuH?eXyTC-H0@BmLL;Gn$hjGn6|ASAJ;A zgY81Q==O_d#($iN_WrzOR%K@k{vd8}Gua~=pn8JY+3+U(N>v^wXmWu zJ|6mOenZV1u;({!?my)my+!>p1Zbj7yX;w7!xky0Jk!8Ra*0oR+3g3k!v|HFU5KhPeJyA;6&3Ic^VZV2-v>Vsm7*3!F#D!v5+)vf-A4(px>= zZ7cYBIq6Y^Gp+aJz&TD`GYhie$d$S}xR7{r$08wxS62F5GEQYWSY-hVx3RTGNM)`Xa|gCQD>6S@~h_BRORPm1x}7_4GhzcgW%Z6 z{yaoD^2DmQji-zYk(Y566E=7+$6aLqGB5v84S)Q}z zMpxFrI_FO(6gUMCF~)D28Ifex4dzB*4{nK+soVu7jbTDnX&>!%1eP;AS8GCOD*Be) zb6Hh;`Q3`ad$Cb#=09Shdl+z}P^gD}$-c{Hs2|iPjp;z3Q8(R>HjOh7lj1t&ONM&5 zC69YJa$Fl8Yu>JcWlv4V;0R2oQxU{$JXj!R$s6HuwbGYt(W7VIdMw2KjAeEtW`=ot zNc%i#7dsJhj(_^M2|3E>Vm$LiV8%y8mBPYiO%*2Ic}=Un!&Z@wa?xI%R!dBVx>reR zy@2I>xhn7id&F)Wt_M3{pj=Nk3&?LAQqC`&KuQ}Fr|M4*YeAVxph*CTFh~WCWs+O+ zx2QYww-6Iw=?ZqqU2wBG>Y*3$E;J^D)#b&^KoN=)F`4uQNWYn#QPW;|?UN(VJ%DZ( zjUOhwB`Km~uW9TALYT81()rf=F@!6xpZ=Nqx*x9I zbWwR#yXVVJMdbm2TeaVzdcg&B8Xd%EmWCbL3fuBrQ|K4DvNA&9^saYuPf>LBcmaE) z)6fIhoI_=|M$I?wJ&Jgn!R5#Rae7pKE!wOq9u^mxHBQ;aH@h}3Dv$m_R(lXOVTZ~E zqc-c7W0)0Va`|b@vQc>vKpA!m9+&6E>T$T=#J_PY_XOYJy3!DQcq zyzmIVbELuwJ!_5n$VZd>GCwh!++3E`rdrk2R2{OTZ*0{kAy!r!V7CP`#@uspOt{Gy zIGyIf{wtx6?n_jHlwE@%b5DH9ZR17$6;tn1>>C)mZh`kismbS5#O+ z7?AI}Y_l@k(uHcB*u#bcC)jP=W)fp7p?^zlNo3F3%j|Ut7$ZpP8@eW^tv+=1Sltc%d9Qia_2tZax3xXw^rcU2 z6!lmxK9|+j^m|GG;w5l|{J22jb$`=BEhqx)Y+8(&AO-sOHp}ms?C95K#E6^uZ{z1> zpDqzg>ST#NWPNh^&#kyUvtl}>*V^|e9=8JYCY3RS_)PYEOmQx?qM2G^#q3>45gb1U z%qqLp?e8L!t~7psOB(<9?@w2ABl&C^S!S9m_W5tRRXIrK2w9iI11IyA+p%k7w`mDy z_n0{!CMUwDyXE%ZPXK@6&cDaUZvTZ*g9s>5wp1#>x_~WN2RccEX5ihZtlMN$Ec#^& zP&?(^6f>JhK%2yO^WXz@=R<8HgG~Fh`Xt&HLp`ng)iO7yl@BK0r-Y3yFLwDhao7k{ z#-=GzK>3U6`FfJY@8i82y=vd3__Az=-hR{0v~!8m6F0>&q8|Xxk-bL@eV&`VUnl2@ zE_c&j@C;ebm0b_d0`>wrH)>jn(?mgEpkcJZ+Gez_EVJ@`8A$R;$3{TB6y7N24$CWm z6HsLq!w>izd-Lg;cf~t?+b-M~`RcaB(~5}uUObm2R5J7sdZZ33d*8WowPsJ>L(Gl8 zP8mJf_;e%JA@z}0_q?ij-_w3V_v-7=tBnc&{`CJk?*>y2sv}sw8+kwbs>$g=SqU2x ze@<&b=NXGs942v$Lds1~m6P>+3=uT*XAOV3Os|bEJ$u zTc$O_$k(dwDi1O9Upzb(Vy#yChYdJsrLV94x0TlM55bY98!-8*vVM-}2ta}zdrVp* zO~?Y9&)Mx|wYPRXqpiavUxxcBB4u7R?G?D9+=~;AidpR7?_r*g>^Py{m$(9R<$nmd zi9P7a4Q|#Q2kHz>L_NTFKTrn87|KLZq`E#5hx9>Ta1u?|Y8O1?Gh;({%!1N(0&{C< zAaze~7)@n10tMaA*VIyg-_81PWfLXc)l!DM`SERKXW*7;t)9e=!~ah4{eUIWHm_>t zc771J4^3r>HTkuz(1S&!H$!=aEiO4ru!29!MIdTTgQ&_EcRe08a7j0dYYyfXjhjfl9H0=r!Q9S0Ua@$DOIm{}uiZ;dvW)!mHV=8wmb z+8tm{BepQkVldWvTuu0wRiXAO{ea)!Z$-BdtaHUy{!soNxnmkp&hP)t^P6;1g+tPb zxODmEdKBAC#6QzMyX5>x3_Gy->aiS~Yxah{T}nKFi>qIxrU{oe+gmPaUtF(N=-x_r zX87E)Ls&c}$r2-2s|`V4WCYHkr?9By4WhuwO?mN}h8{C0E7(?1K_uCTH|vvB_V?+eKf9rc&+fb1q$ zI6T5e0JNHXZ6fel#iZCvXMod9nU<`G&i&7}-#1=eb9+XGLM-Eh*%~HkECwl2FRAN8%Phsl_M)59 zzUU=^`{aZ|mSPb(3q#q2J?s5`aHd_FUqXHnVY=*Yr{^(YKw?zHRYZ(z+&a*)>RWw# z%||qJYxYE;B)yv47{azpZ+@U*D4WsICP50HqK6YqADb$v51#2;+c^t=NHiah_v*d= zA}Y#+fPZ}?dvwe0w7C4$!gZ|}IcvRVAgwMb)sM*)rN&Pd%2wog5DOiZj=UK@-7r?KM6MERa$xV4-qn4V^#u5)^G@Zy6`pxY)BVXw%-w1T`l zx;1Q{>uRK^wfCiIU*+R5B{AwSMlbrbeS&M0{4z&=A?8>ulbR=JA91k$euC>oph2DTfeR}`(z{CL+#v}}U z{Lo3|IS$WvYo58YR3c0Iye+zZ3vU|RJ2kzPXcqLPUf=Lay_em)SFdL#7ls}QX$tcN z-PMgskl}^hkr)7%GM?iM*xdq1&hA8Z62JAQMWKV| zippjEyoP)xrV%qs=Ki1I-mkvor;>f^X=?Lk|A~fq$xy9LOwQ`%!k<>S^p;CcHjp`i zg0gZRkp!GdA=7PF?cbkd`+ix!U5g#w4>9{A(NGpZhYMMp-T_^a$;UW-i^UcijtE{E++elEH|2o?`ds>D6{iXQRQdOKf*Z zdGJcDf~V|uU$z0ONAI>$!mI-noGf`)!B_y|V18~WNpy4C^p+@+_ewB_M}MjS-6Uka zNQz0|8&Y2fD!x9HUdc@{uU%JHt&_6H2m!$eXT-(O{}od1sl^ z4eh>IYhhrHx&(A3P*lY?q2TZ+=2SpFKWbAEE>dHT%9!_}$q4J_T~R@Vu}ox;(ioX= zH9dI{+W1G;@^Ct}!ZS^F`@+IA_HeFDmWa&H><9CC?1*nd9_n77<~eEisVKYq7yt

f*Ev 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 Ih_-X zF8%doqGns*&PUXm$qCH%1Cy;RKEugD0?H>R4D{{7K1Iu_^0DFE0n8!sLV8QnNf~Ao zB4`Wu!h}!g^DPb}dqdD=d?fnoYvL<+&F?-jj`a5L^77sq3X|2*Y+Q$VtN7xmyL)n+9ZJgQa4z>k?)90{(n@7S zriS~qiy(tPoA89{uPnHodwCB3j=Q;c&gDm4G>mxSOX>W$-`M1kT51SbN(|?z+(>MK zVz}xU-{+0p&QvF51rb1#8D1S^_mLBF{P|o$4|2s+9X zd=if-k&_Q5>blae5gZDWj%`a!>8~IEf$z>msd$bZ`bn|;G!rY*W+kkHlsleJ8^cw_{Ws;vMmBlvlDS7-t zxtOGI|K!cBaiKrT7%~32ooK$wJqPxnC!o`td zHYvc1p~s>HvdGM@C(s|kxuoUz&K^7wVOtdM?BMd1p~}j|Wf@%}R*VudO3GQLKmhH> z*BuD9ytl>oZ^oS2ED!d4B{;{7*g5cyDyPE5b^6W0*QUBw!NQV4cv`l^BsVv!nsNg+XJm zPgTABLLq>}!>OU@da19Am|9SS8>yu2bA;U_I_UV7ohTr$he@Ls%Cz6q3LYtI5 zIaC{ncy6gH!YaQQ$+wgJDUtJ6f>9gV7mN5@a`Up1BYsawEdImM#h6Op`{9_A1u})o zQn|LZfd5Q3i#G$r=#6Ln?`uob8;sC+5q%JOT(ZyyNl<*9K|1+=huPrU4ZcqwrqY$f zn7Z-Qzru&i;(dHxHM4%*8VK6*ed*;X<2l;uX- zSWy$D=0fE=HB)(3oT@_)px(C6S0qRL6KduEujHC2xW|l{Z;D{|^WuU4?=QOVwJ-2r zYKEH?`;KVgG$==X-q5G|>shS$et{Gcb0dSnS+kDpbk*&IKaLfr#fe-Cp|M3vy3o(H z^6G~Pp99;;vRTm}YE zUtAr;f4U>eMxu(PG83WJ8>gmy9Hdk1Opf|iO8?qsw@wr_xhD8;wW%qRf8gMCrEF;E zC1>NdR4Jeb@G6WoMt&AaD`ph&$THiom*K%LPkV^vWsi@z4Qr0$dZ%E`S1t@-H>p#= z$FqDMwgnO{i01IMP4L#VFJ+9Lx_B}B)z|lFrjZMQE7|}4C}VKx_;FAfvOO`8YjS!P z5*R`pX&++n7#WDCN^r)xU#J`y)s;(>eKEO)t~mL_+aGO+=|6ZC$<;3VSbT;)4gY-R z8u(17&`x{8>HxTMqq1FCl;zRZM-tH@w&u$M3Jmel=*O&PV%JuhMX*klM3+*nv2 zCl-=_LNzsYa2Y`H)K5O26bt4guT+*bf0x74%M`%4!d!Ho!hb_Z9q0F2Py82m+Z|W_ zEmHvbK?z~@WX70hsPb9i3;d5_tR4Kv*m?elnjM#^Op8x^ z?cf+?@A{su8~Kfmo<;?R>KA=!8)c}4wYL_Q`u;(#c_9hL-1JO%#u$iI9HN5QG;DF{ z38!&;3t3^3JOi=`uLtQeRLj8AuGz`b>HAz|p zvu4%UxBph?`KVKz9eQK_EnB+fMF%95{vSI-!!3Z^M&^XIu5fJ5PKV3EIj8UG()lgT z%j;X&@x4z2YUNw>Fc_34Wz+D1Fjp&d@(|bcHbFlqdZN(iEd!6?VW! zJM{O697IP_kbePKiN1?i>=h1w-XtgaBA>{JGMUYT@HL9eugEIW{GZMP5uTFax3N$H zAUX`W;s1K1DmKh{GKyY~$UJKP`ER^5R#O&BI1G76!S}gNkSDXDjHc)nr9TIOwNBmS zKAp`}ttpI3N2rY?XEJkXg~P%IphBeJ@A{L~;NR~Tg+;)$Se=jMmEb8`D;zJgDA5sj z2yd99L5R!suRSEh-6({Wli&P(VneWgCf~jOegE&1WhVVI@oM_M{G?t!%Y8H z&hm+ik*q69F0`RpEx}~+n0<}A_`SU-)GbP5h_5VASXqW7Ln`W8!17J&HyI&uH4J3* zb&$4z+Lp5;==5lS|O^b#zeT@aODrm*#Ft zuU5jmirJ$H8-_M#QLj^&U{fmcXqCk+U)&SIYWR9Mw(yCcF;uKCHoo7Vi4BHN*Q_~4 z9mt~Y&E+kAue?u`N#D z5vy&F_aywq6`1$+{@A|7`uZl#M%|AmqaU1{pf=@Zw~T{K@@YGP42qqK5Nh{J zXX(V3lg<0eSQkqwx5l5bz3Faj_SV)HpIcE*D%V6UHqF-Ybt4@efJeKS`A6l{!LgND zU#z_E4?5>w&9hQ8I_UG4U>kOsZ%)U%{ZPR}mNlQ<`ZW4_^!w@DgYOp_f1i{*&kh~K zo|%zBGp}FI)v;Oms~J)H4?nPR{e5x)oej>`deImKO(0Au(9Z+Tf>oTesu6*MP_0Lr zJZ4oEGBv_HVnTD0lm-DwnhkH(llPV16kb3-vol)F{iJyzigltB<%lW&iOKWk>{d#7 zw{ZVvSsQO$WTfILWsnT}oiZR2ZW|E{hjRq~0jfMi0fs}OMGK3F%c)5>%gxpC4(poo zsYH8wl5p&E?S!WJ$3>&(4^<(5R6M~lXL@N}`Xs3~-b&9&y6?z1?Z^umB z_FGHD)*HhY4dUAx?9WkgCk4F_q-?VkFqj>H|QoUjR4O|B~*jO(v9AD8rH zs&AzYHTIzwQhX`94BLv(@X5jmoY}U|gxZ(>+YRA;pJFxNYp~|On+@!u~viB zqm&N*droM9gevmiZhk4jeqvJv)em!cVFd{*-%lqq$2iI@WrQz$h3^St?E0CXU4n*~ zP7V^BqoyU;Pq?X#yeHwxDH(~x8dYeREq7x4nJlCKL3G$1yCti#_}6%O655D$C{}gZ zuxRMgCXo42sU}ldZ_^E|@H&NAt0%1PloX;H+6xCiF)Z9En$miuU^m!1=FgW z0-N7FAI?BWAbni23M8phS_A*I4*6eBlFmo+>%ULrYz_W9NEi&(jVQfuUp~J9lw-C5CsDg8 z4bX!3EE$0^fjY{6pB$49=R6H$oid>deHx_jxL5+kWS2#z&>WZ4GECEge)n>wgyQmJ z{nY#?zT(YI_7;=rXpaRAgoVJ_a{*1z;>T#Pb&&>3@cdLe3iF&W*e}M&#SrY-|stmBKqcZWZ1VwjS`!Q zgq=^IW*UPDz*Na2xyWTQUmA;`!hepnMb<)7ew5!xgqee`Ek-GzN^zECAC=3Vy%#~| zQn4IlCjEWF5W=MAD0Z{*_X$f3JELh3xwPuqGrGnfoBY>3#e^d6$s2nG!ySE0n*E@; zv&_#lQx`M?Ej?L{exN(tHMwuL8+~~fhdlYjy}3qd2&^J=Jt&s zW|NNTS5dl^?n`^9W!z)*8Z(2D#V8&PckaNg^6t$~EgI9Wmvn@GpR8T`gNqzO<{OQJ zNRvh%2843Zqf;zJHNGiDh0@H;>;4o)Z1N0SZ==PAPREwkRH-abr~8(2ZdlV?sC=tK z4#kGKU~z#SC%u?LxMRLTDu2*F?^+k4=h5%r-HFfe-TyubqjuDR-h3Jv3u$~H4dr1v zzNUuTXx7?xd%sm49TXYL|2^Y!X{iGhJfqpsthl;<)SHuM$yZ6nEKvaG+sn$r;iHBo5BE{ALJ!--=GlUgs9h(Tkf(+Er{UCtuj4(UKke`3#^@7<>ZDGQ_joY7`-1}H?x7|x7;HGNML zobOmCpUB!^l9tWwQiw?|Ul>$k{@=TmoJXB!Vf4hRX*U9YpWt^hS)A~y8>YU-O)JNd zWXH=ad&k#Q!iRNqi8eCgi>BlGa`7kwg`#-1Vn>cHw!`pZ2PnbXm~RGdu4;Gou29S- zxpAd$BS1deFrte=mI!a&04wm|p2_@uC_!}dGbUD*uv62nv9Rh)|+~mGD&Pb~U^7Pba zf_mOS3{zv!;fbmndq?^5EnaY^w-bW$cO#`PBpb*p&+09zqdH)LXfD`OqCvbMNZ1&P(8_&CZc4w2R>5PfUFag|lmdX967szgK@vPxlC#{oj*=(83b9}x^m{d1Ov&znS8zSuZLVP<$uB>P2(=om&0XXWN4SNY#do#u4=RB;<)T*c4xVVqODGyjPUm7nM(>(>UUiS$9Yh6cA*cMwFVACMzpBTqz+h}M?_J{cyL~n}X#Q1Kh>;5V0179={O-QF#1z#kd8u55){F;!Hv+z<9XD)qIWN8LfQ_AT-t;~n|amsqCs zs$^~g*EleBU2(vc%YTU&bL(xqb{&ML#hH!T$T!$I9ZXe2$yb z0LScgl<5H4$Od|7bRlagZMpq|W%{@GxOVkV(K>2Dh7>9C)w+6)f#b?s(ndYUE1}dp zis|({aB$&KegWo5M*B+ZWkS&>9s$rSs3`3hddJWpn{)~s(c+lsG}5(mY_6H)?BqY;+B9Rs1KSx*d%K6T1; zun0e3)cmT#^kwYUl+QllzpY0&j*ryDyLZYCWs7f8?&X0rqGn^47--C}@H-hx%k&S- zIP;fvK|MNuCIQVlw(D6-y}6%kb=t4Scqnj<+Y`UjF0d9>5xh=CX$`Jvu@cz8VnLgm zziMs`Bua#>O{Js`7Hm8GI$L4T*jscJ+DbbTC3lsP5myp?k6ckrbvjfEK7=9Kk9d7; zL+UcUGN+tn-ZeHDem2hS2Oa4=2Q?-@v1mI~$lbICfmo%*)HA@84>HnEbuOU9Z6I_P z;{_qKu5k#SFbmx@KDaHf3`%WNZ0Vr5c5w*-M*=GE!A#X>mbz|-n&~-x8m|f?1%Nv8 zG?6LiEDpYLeIC$M{lU$g)I&-d>}nrRes}-R5@oRK?AW}^0ktYpVVMrnb;^w~Tueup zKi;-@RsBHjy$ybsr#ulyt)>A~Kh`6CTztQqs@ebfvD?)OP88^9wW89k}phIS!U**6;XM z;3;kYJ6XTF5)fa%@Arl9Y?HU(YVrun_1Ci=5f?6?A=fFItgj-Hk)1AXcI5Qzd$y>6 zy9J_C&XHYD^~SDD$8!nM4R!J)7sca}d9$<=#hm4e2p?8Chek#XXp!7_Ln3d1q0mO7 zgZ&)bL5k;sp{69+($fFPEc`rdMVB1Y83YpU5wcEt@JsHtao)MYK(&iVTH(88oqh?n zl66GacH@@qJ6_rCC1S;WTE5e=qxWhCzszfO-RtDnkj?RIxo1Y!Mx&Y&MU6h2{?3Su z9>yt@)%Zb#18i5TG@-X*`lAsJgz0KWqxz$eX7NG7*W%YFmlR*`o{1+&XU~$6^Lvq zUpi8+KNUKG{@y=+`Q?;hRY}VKZkd+iKrG06UMQtaUL&i-6NBVFnwQ69ryS0eo(Q!0 zlPeIv{xLayQJSn**)j3-&$%zMv$}3wy24^2!ox0SV-UL<38Y7Nx`! z#E4pbPuHUpfzXad*A;t$yVah|MpqA1VU`eo;6EXaE$6Zf-@nwaHU%y<*nM_lsYw zwQ_jWyjGr*f39h4T!%GVG_&0YLz_`wYgU;!=QEG3phIg%4!2q`84(Zoc8K=Lw z$($hj+r&e@Y>lGyILuhh(!8T(toXVCQNSzv^Lwt&&c7`t9ng}Y+9KBJ zFzer>+qMy~+0Cv%&lE^QwSUD@tGBsrqusIWY0-_3C}>CO$D850o63n9dz;iG8pela@9Yk`)kEwajis^u5fk2FUfwOBhEM1#@qaWNP?HB*=!$+ zl&42jMFugg)y?K7Rq0Q~5wMmOR(%1XYiNVJDc_R@${=1T2M;t#_m}M$O1N$fhD`h6 zN6-I`#Z_eA#u;bOMbkpx2Hg0(Fn<(d-zob^gLoP7@m6L&16o^rYN7djOiw_% z5x~6*qPWN|O4JqqLvr7ZELIUO*{uPouk-NreitShcLkgX$e7rB1O5A}#kOEli-Lv4 zp#e8Ja7mR%p&H(nk2LUR*#`R)g!ICY2o|(%4JL*jFE-W{m zKgT-n%58b<{)iaSW%&X6ry_(WI6LN8J;JHZ;Sl&nweS}oS{db+PETv2Tax2$lsRm9 z3%)m>P;jy@zuj*2{HBg~?vvIiy~5-}tNfSu7_?jI$=~zZbp_@5`{BA2gXgE7H=a%v zr}ch%4%cb9E4WMF7Q@-!1Us=7sXS7v|Ngg!NNq8y=B`&xrrS(c09tZ@rx1%< zgyq8RfWHG9Z~q{6%N`-pX7Vl+At}1UM}l(~=~tB7g~?j}JjU7ZKEkKQiKEMKKXg7~ z|8~=-(HfpO`E+AVWyRVGqRr6NP3_iz0Ll+o?0EULorEJOskT}nhYn_g;1qwi8N8@P8Kz2Ps){TPDuv@^ z!Nk1&{XN?$N3^KDf7PY1L8(Z3x=jn4ZJ;=}*&P-!EyCmqglj&B@lPW>Y=(g!Ia&-9 z`UI}Mo))UOsctg%TrQ_Q`cx&6{W$mo|F1@~o6*L?g)$uy7HtvNhZY|S;BZq4Z$vk4 z{UUlaU6;{lCfO{%*7Z~4p;FxW;R6!0)$X!YjE%5QSNp09NFQ*`W`79F=iYjA^VxD6 zYz~d5ABb`O6svPENPuf0t(Eogr%`ZoLbnNrwl81R>rtX9F}iV<EN;NKw!4a4&U zv){9KOOHutE-b~&!SBx2xqrBzh(x-tdsF?J9l%3ayoP~)_SdA*e!zCl}^a*sylT3>7ZeInMC2 z!f{wXD0BE-J8Wf_`n|hXSMzP4a=ObVUxZ05^-{CqN3iG0VqxA2`JP5`!tkrsRVb@o z06qxQ+jL|uVFk#>Z)zeiI#wU0#3LzM5*ql{Sa9rF$rAuMaGW6SxH4}8n-Q(&6rI>a?-P}v~MXf9#54-z!lSH&eH zd|N$3tw+Y6CG26D>^h=gw1#y`hgcq^`^jPvJ190JHs1R`tpH^cI)eXE;4y znP z_V!U+VjY;<`**0&mlx)TfdnHNBO~e1YcoEw%0=;44Hdp(Q-?1x zGCl#I`)EP7Ymai`#aQKE8VUXFLJkkGtzkp7I#HUue0k`B%>{noF^6aM9DL_xQQgqk zz5sgF{3uiSlISNNtTD3Qck=D-k)qC%hoc!s(RxKMRO>`(?8bihR=lF^I)r&nC>Lh6sIg^n4C9YU>?5+AYiyUo1qA6e%8a#H`n4)g z3!w3m-H}#miQH98oRojZf*VWx4&N?ZE|ggZ#E?&WAN{b6lG{=hd$ zaY|HXR~GW{toNbJU@=B@8E*lOTBwJ?>=_sE1(l>t{9wT0BM^_&XI+RN z*2Ssq`_x^W_g|_ihR-JTr7iCv?;hTtuP!HwLX(>7^{eogjU5mOL49}!LfCgZjAoji zumyni(n7KTX{N8$;ooGRu@-RpPBa)Q3tLpdB4vavhIU1foHWPQz}}>bH5W>jn(NPV z(N%^yfKnRN_Yw}a;l)#z#`lx+YebA*#AbdI?h5f)LU;QIW@fz(;s;jjBlO02dT{re zpXSQQ^DeoVFW9++aH>nLxPw+WW3`6TACWp+F5E9b{K0v}rKT&7=81a@Z4UZj>9a(bAImj5%mUdKhC|=Nh*sfW^ zDZ$!pFDL=8;|Ce&HdYCnA!QaeUoGQIQpKkicPGX2GA?FR+P9bU5+6QXPkox+&MBW( zHmWV)GAGrt{Mef()r{>&M%sMyYjMeHSsji%>#1aRC3R8GXf2Q~yXo8e-**(U5`f~u zfqNY7=FacsiBpbcd}Y&;C}klbSaN{9X24Wz+nOkde3{Axxv~6KLunJW2O9Sy7q7Yl zBVxN$(uI&7oFSq-I@Tm zN=DI24V>=cV&nY^I6eh1riliqX9eVtg0wXZ^by{W2SEII`B^m~FJvj|Kdp!dy^ZTX zGE3MXT|E!kS>K`hk}ib3%kay=X_>;UEUWXMS>;W8_$!U8&Ia*o2Y~E<;Z#i=_*VVl z7<>WsR8@K_02_P4m`}V|-skHWGLBcymv6XfC;eDqKIj^a_g=U#X5e4^aaQVJ4 z$IFIFErfJDuX%2o^{9C8Y_=L#ST5WsZ*q3|p+50dvDG#8;rc7^8(J_?K?{jT*M{ue zm-BsgYb%wOjd?!!0pu{E1#S|X;P2KH*&dl|_w$<#X+q(mHQskPt?RpM3tiF&?D9HB zmx~CC9M=}^7H~$R9L%3`*N+92H5BioO|+ZATVT20#KwGha0z=dsIGe_c{KB2TW z3gp;6&Pf&=)iy#;I^Q1Mv3qI`b4EJFG>;(g7ttS6rnJyD`omc zTZz6uEJJb{>_KMH7Z1#BIj#DDpExwf*u{*PX&`@3#L$=A;XC24(p7`hg`*tuCoGz2 z8GV_>nq#6F*89UK+3aLluM4cMq-8Pj$~Xx_K~ry(@8E=`fKIv+uS}$z>5B}Pb9sH&cY{linnHerea!V}kV+MQ-j2IVKuoWC|=!v?u+X zjT$ZN2oQL%o65QL@%F5hs4Ho4 zgEZq8WlDzYYs<4;t8&q1YrIXmDQS&q6k#tq%Pi?ipN8WV2;E4u#*<5A!^~$(*&;CG zyYQAuQ<-H6dqzM-2Ht7dTQD85Gc0e~E2kL&UZS8M@q<~VDJ~;s>RUH|WMu>7=G_6& zY5d-j1W#>ftd6<4w&~B^u!m`#NDmWOLrlmhi-c7GzKI(Bjgp?IMtyQg#{qV2O4I?f zBFZT)SkFrH*o>7n8#>gyt+YRs2xhy;Q~4c&g`^{+wFlsbaY{p8MdnhmAm!ZG0t0ML zfU2q^!^cor$wPoP8}`|Tj3<|4>V>zm8HFRW*bcI9_k&NA&ihC7HRO6=X4gf$jc~^RVF{)@Lx&EEYO)DybID3K z!EW+jik7r{_6~O)Cg`4>d%ud48m#BkjYCmYXOl&W1GZTKDPPQ3ZYBl2bk}@4Y-V{LL2$Gxbhq4D51#)~c5F5m{lDs{?L!xA3 zk+G67z;u7cbk{wN2={cD4Aqd)yqe#HE~)_(o;%!#Wx42-Z5zj*wrQrhg{(nAB|m)LT#%e-;P`>T%wC4eK+>g6AdfYlJ1P(Zg{m{u4aJM~m^yDm zz9L81Jw)5dqVMc8gq!P9Si~(+V}~44ELM0K zn9vDvdY-XBBK&≫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

Bij9b#_%5_RI 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


jERupq6Xo~o4fLEWF;eHbL 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 z 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

qM4 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�|Wu_9!d{Gj#!*~ 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

t^yc`642 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

`{Wlbl`_A#0nZjhbqukUCUZV;wFI7Jw=cO zF5;;2azqMq9CiUsapD+7=7~#!Eij6u1D4!aFbYo$2o8%0r6R;4)%Ht7_FZ)?MP;Bz zp}2e{t2r$@BWp8(E){J;z9PjQuhhqM*UfhU3KckQdX*^Hpr+Fam26+9h-1syd1SQ( z0xq(HR~<07k!&?>>n5A!6*tV{U6?nFtNV-`g{zhUj6tBL7-e~uTE925kxK|07Ov%K z&0`dJ%DaU`+K{_CBLs{>wp*MHJ-tc+I3T4g8pbuyO~rOT75?C>VyTn}(j;?QaaS-M zn$%OBW%wW?RK5wgOEj)Oh-MlB&i%rs)=SD92L-@D6v8M9b}|`4t`dmYkCyY^Dsm#_ zmTIwT30|sm6nQ4W{^bEQ(Dzm5D6F_n{{RQ(zX=HI>J3X5;-jrjOtEW)HD%OdRjg}& zN8n3@=qpQ|QN#SsSG)W*5GwXU1caJ+788_U1ww~4a-463QVOe{55<6d!97A(2EYUK zfc_bXbaq>oCmoT26!yH8)B#laazrmI#HzVv4T=keRIKLmj~6IXgJ!-F=3wLDmNOMt za+HC1-?>Wys4C0Mj3E_m<$h%(3)hZNUDQsF1Oogl9ek~pJ{q$!2myzDv1?4Lu1Ki4 zar1MYxWtFeOdvkeeWG(Zr8M@S2V@q18(uFF^(H%cd9`g@t2uf}?V7~Pq63;KXk4dPws z5y3Ut_i#>?Y9z*y8MPIg_?wR^G^<9VuJ2KtozvOvW1wtkIZ90-!r8Ii)m&O0Od>KtC@6K<>GQGzN26(ZYVO9D}p0Mte5~=cLzmT z%&VasgjMM6i7mF_8dSJwH*Qc*nwQo4g<#@w4?MVx9C3VHY8ycj3OUjcuU(avo@OPg zm7ZNE1ks{eJWG_D-GT~fGeT$%v&=i$IlV!0fk_P&gew|iCMftK@}Q$wM5fGSuCA=FzGv$gK!5*0kquf;AutPpKhbjOf8PEJMlQoIz0`oZOocY+Qii6s?nWT*us zIj%G9fTT?f(v3T~Ts9p=c2q(y!CTqXA;NQVt0Ka3g(kHwRIFDhJRycPBkCI1iv=n5 z9twj|Rz*`JfGjQ9bBB*R^2*s2fv4^yR2@}dGnx>_S+LTRPhv)jiPrn5tkDZc0V<=K z`X48m-*#@{nl=(CuM5}5H*q*Nn^DM4)jfDoX( zz%sRH!qmiBD8UphfFSG189OT_W9N9eZ@EF@4ZtsbMi-`m{@C&kFP}4;0T_9&ZEUp% zD6cCQX=h*#6@9=0POfCQ06|0@@c6p;g=iYD-NkdcC~aK}SSofqeZ`A^?860xqTC>2 zrB5%_Mmvs3>Ij9RTCulw&QI{K#eRJL0}?Br!84wto^T8x73vm_ALd{TS+BR{!LZ8P zY_lEQL4|>Hpb>qorPV^K&64m{M@ki+k{2{y&til3EGZN5LrB*^yuC47q&W5P-^9M~ zR9#XA*;9YC$Q3y7!jHDc5*j*D7|8zs(6Hcpmb`g`ohk|dvMHC@8q<3RK2ZG?bS2%Z za?&!|!>>?9Ol^9Efwb}BJ2~cAHR2%2ZQNQ_d>FwrYb}iT1Sw!E;oW(ZRE+^y8rgft z)DSq%9&R+S=9f}HEjb)J{tZBaILgr+V-A8cwGLB1*sW*uN zy4z}OrWx(%iz`tV*$iBzSzbDfmiG?{Ep$sBssXd7QQS*LGkd5CtA%qBtgBL;td})v z=OH=mG+b?J0qED5!X{V~NzuTrAiuD!lZ~~p4}qjlw5Ono+@r*J(t!T}Vx_oF zTik8feNBvANK(U+>L39UR8=43M=MNo2}l{scksnFNLiKi|%1) zKy*Ghj(oKG^*Vd6GJ+Z_pAZ!oNR^e`V+zk@LA?nV=*OqbUx>ANR$l)A=4tq~5|4Wk z%?(=j5x#CMgTj9?S~^NN1VtBs2S=aVo|PwP=wn*=q=sKo336Z#}0fhlivs zJWH`dMX}LxpWBE4j`cWCF~MRyd=XW5$_j14gk}JT3F6_F&1Q+ zlDg>Gb{ZG^==Tj=LGo6)V3&7_iffU|!~i>9y+NvsYNM-K4&t&zs_vjWyBsdeRKJy6 zc6~9bEJxMEY*45cBt_wOizcxqi3J;jcxZhyQBu0~#9440FMOAZ=dj2>#w zmzFLqc2I!`oP5+XQBZ(E*Dq@*(N8QGb8>b?0OH7UKsz?~0IX`55R6mhbO^SbM}k(v zxqtYbPNm^BuOkDI%8RS<4qUaNfuUn4KZo;Ef>PUvfkg@Ii*5c8KNa}A2v;p-UYQaq z0vNuoJewi4eh1^3#OQkFus#)`A#Ag>B@tURWP- zI?7;u#ile0f$rVDSkp-~9LrKE3+Cp-=2ygB>F?q>Ze^y_Tymo=z?T5rNI(h*zn)DoLYNaLVSw*gdKua3%ZH{C(>4r3;;Dm zv@8`K(y9r0h_r4L49z35fj9t6b|o8LQUzEg%#racU!f^ZthOSd>gIA#Dq1$I<_8oJ zZyOsyH@EbZu*g)b2wD8rpQs#&)a!edIaZbE%BB}m<2a!gpIuSK`lbVKJhWOuD7yY&1;pSl0_E;SEGj5e z2-RW-gCIjyK{)p)Cqk8R9V}quJ$aNJ0xN@=aa8j(1`K!E3<`7mcfaI~JGK$mJ+bO>#y9;E|O*1bTECad{;>H%Q znEt5|a4wjlKH+NGd8~@i%|+!s$~sDGKXAdSFQ0LJP(u$FE_Fe#=@SK(>-}7*YGv1i zfTX4c8nCGU05~3qpsqAeQAo&fjOoH_pJa5l3SF_1+Er=^!c~mCUM*J$oidozDErn0 zj@l1*=4W6ugZYL1ai2+~5Y zZB(OGgJuxC^p18?06DBxr5$a~g{EKok}yGl!*hDp)f&w=e^n zj?L8!qmK{eUft0Wuha}_l^8@HhzTnDJWbrC{HwsZ**PryWZdT8v zRjJw!xB=#$brsn`&!!zBYL5=h6`{6pH5?0LgO9nO5P5iktwlE$kziFvzz#oTd|pdjb~Ij~ zPTfZ(yhdzME?T{v+#soWECq2b8vg(&z^%?ws%13VzgaDnN@`OTf<_eZnSl8n@aooHH%9AQwU26|p)YCdV7?oKPQZDw_>F0gRLZT5jWu72rdF zIAzJDv>s-f%fyPMZgnr#g+2&FuCU51H9K*>*(Nzqd6{thzv0}-v_;94P&LF%c5ssF zVq4y!sIgKpZYdzaB2_3hN-vUrEqms_7jpjq58zw)1^g81i0un%;%p8q@>FuUS5o0! z__QH@msFiu(-@XpJsmN1i@SROVWZ=+-}6uby1pg=aQ^^u)ukX*p{2Q*ntY34^#z71 ztKC!*LzB8HQLYJ%7_2I_x9>c}P`nguzGaqMRvaP00sC3kZD1f(g+SZsmla(^j;}}x zsIW%q#H|r+F4&J)6tt&@#OzuzftQ1*fYoDrD&-ua=Y#T8^d!X^8CLMot>9xT_^*k34W0+}021AWh3W{rXWt2(X9LK>3W!%3)VP&W$#dFl z_IPF6RF>1seS=@ML|mw0#J@_AHPhmF1#=hVmq3kajhL&edYr435HctZws8&mRJZ8l z#i<3Y=?kz=guVMNDZ@zs1*u%fIlt~QH((!#^M-72X?}`@=7^Npr=Lg_ZRA1=sk@*EE8LP-8X9E-R?gr-ZdSxtRLG!SzHVI*uHn2`OC30> zz5-Ifw&b$Izo|}I_?%T5FzX@$#dq!jCHH=1fZm>C99zS}4()|0?S#UVUiLmJ=8IMJ zE%sg0(G{w@xWL~P$S5Ad(WK%U9X%2lwsB9&(_vM>-32<&DWvVsQ) zb@K%;i<`Qu%YyTE&)iDc&Hn(K_#+o;pUz!VC5S6HcQayOZIj)6!XGN&)+UTHIakYO z+|*GI1;gF8lH$Gtq(-IHT?SJn8mo)#gsP$3>N$A{ct)tz2dEmOB|HyD&zON=4?Lv` zV8rts5~hNe-_+@v7xco*Q0{Ot!X>^+fG0f5S-Ke7Qs@!H2P^7P9!3TMM??}Nu|_pW zQe>jQ-DONXQE(Kj4>4$Cc~`^4u0?afam06sOduV-+_mhm+PQbRP2%7s5UCt^d5*xd ztV=8*p>t!&5->|uu&CCGi3(%H<%$jYhFv==MUwUu*=60ruc&&AN(mO)y+ZTXmx-4R zG1(CR0F_EBbBX7=gIbjK+w%<)>@4Ap5#oAc#0jOSB+E4Ag(>G4A4o?KuZ@HtqrNnItQSY5;wYE!LGiISuy)=+SOE!nVazm<}x za0IoRy~_g(V6`#f2-GPv1Cvc$FRZJ|$#F+i=A%##d2h*r$O1T{pEF_J-NRgyT30bI z=E-buYQlp}@Cf)~BJe-VJ^^BDmKOED)U^Z^uvWD76#^O&vie|!1sQ#0P`-n}`Gb40 z*{-1H@WXCD;a`LBB}$gET8~ph0jW{@E_OgR#IVQ##?39*bSiil#$K;Oufhv0V-U6L z{6b|hswI90AwrC;m|um)5Fc1mF3Ph4JLUY57Cn&4C?7?n(07umu$EHqKZE1M6pRCK z2XS|iGWPDQ6<5|WGm}B#v$|w=51qNKBC#`T9T<%xAuyv`G7v(>H&J@Qv%Rb%HVs9x8Q0rvuqrMuUQ2x#zN(X z3=m4ePA$VcU{}wZBa;{~q&IaH84*Lvd{n0E1HtKV7GP{}zG7tvv6MD1%WT#)L$Sn# ztG}E?K&Mb9J40S7eTss<`HMhY7~FWIP+G?vxCjEsfRfOaI>YvGlImf95lt*pzcT%} zXI%Fcb=}<`F$J`U3(&h^M$8wK`h;u4`tpYZZ4Rn78sLwO+yMJ-P~K0`3Kth^@lbKl zJR;n~3r)a*Og3FZ2Xa+AHUL#n*r3#^@JM>A=J=8F z@}%FWwU6#HiDKy*71^kZt)}Au^7wd(G@B?2$<7U zd~x$NEszJ8xoL3PUhGbUCr~ImPb5nQ$}Xkk3SQTU(g4|)l_J(3JL8+IluE9i))f$P z3;2Hr_*eKO=rM3k}R z+UwxOX_V}Es-dSWa#O?Npr)0{;U#G!iEuF;Os zanexbR(v^ww6{m6p&VEU8P78qiW|lOWNH<7>@SRLEu*3^fG&q?;x`cg0K0?u?U7>@ zSN{O`!wMCnXAQNm?Dmhav-c3`nBa0x&B1DuqRtGbnwc1Qr%CojjLw?|eXbLZOQ~_; zF3OOJe34=WR$NU1ScG113da|D+NF%Jwb&ZKi9za6-F%<-FQdkd30JRG27VE%eMZ|N zur4#mVfVX>HH)7F5vtPI)m~&eF#y5bX;b@@C&_Q7499!3#l=eTcFuVzhr5W6VviE? zf;6A*R-Bta)VY@k!x*-tj*v%R?kZBEk8bh^u!mtI$NgX9*7Q=3N6C zK;s&tx{fgw&)rN&R?bV-J_KJepg1~0g7skL)YLW_@A7z;2POUw!TH*Ys+O;r+Io%F z1gaOs=eL&}xVI9)t0L_RMpZYY zvmDou`Sk;vL08*eeGF_xmkPKw=Y|j}!x#1b<5K7)J_w{p0_|^&mztmgsR~3#22Pu- zl;GJG^3gl8JHIWtrB8Vq1ToT-jXPIs2OsePLlE4^%hxwONZjc#7>Jc$s3{mnUIS@#)K>>RZyG| zY4T*pED33)E5jp^pr+l!UdeJu0be$ZzriwXgG{TwCV9B!QpM@Gn+(A=$EXu zOG0;WZUVkG8c;1A)Jc-75qJGhWNy|_!NEa}V)$#;q+UsBUJ^7YrTJUt1<#j@?l(nf zTg5|bM2oR(vU3{lXx_!H#0CI?brL)RzwE6xXfTut06@M^aM5*q5EhGVmF!Ci+EN_3 zU}?StRyJNG;lD^)iu+3G=x!q6vr?yFVFBpfx~XdXpio|(W6Ho`h>C-&A8<6P2kHVJ zF>NVMJ;dmx<{{%{)d|ON488d#VWGQ><=)l7bg5jos5@iUbRH>+d;zPg%Z}I4M~Q5O z-a+yxBf@j=;4NRMfKn;3FJMCNjy=IADAqIxTJkPgazfq1{5oepj{g7&I+R&0Js~ZB z3`HZy@i>f4=3S>#xsCKi3e`L1n6zvT&fFFb1%C(OiufPkMW;oayN01>1$WT|`99Za z6|re4AAp$=I*x7`01F=Q0-va1?wCQPs9>T)J}BuHsO4JqAD>8^qp~7VAhz%7DNqwt zpCv5Ds}&c(4N_|(g*19V7WvO6aq>sS$hT{v#IP#7u+LI2Fw|~siS-)Wvu~Sc2B0fW zZ3um!=@)?SAsE%43Vw})g{O^5QyGSXJT1a53P8*VZuGOmW__`%22r(YH@KRm)0)Ov za>HNfnD4t#E2&9A?i8-Rt~W_r>m}6G3Mn3_ARjW|U>iEFVQQmMS=GUyYE2Wh_Xj{P zmz3M_vck68EOoq44-;qRKk9;GEhtR}1wDlz_Wi(Fpi#xJ?`ILXp|4Fwmx}tdfl~IF zaSK;U0gcUrJro7*h6x({8w9)%;DYau5ld7Azu1qsVN{B1ksH{vi-^*e1u)?(!FI@Q zG$faF4AhhJj=oh;s`Bc(1^ULX~B0SR7cg7sbmuD05xF!cK+ zF;hyh!Ku^z#HiUpLDLTLTUV%sDQG2Zv=X8bj{sXBG*WHebp$q=E~dfRbF#L{N?MXx zRSC$I&9h79-Of_%ga~oWLB#P2Ev$75S7qi4=iw02#ub(fdiO7x;#+EN4h3S}Upx;n zs&wWX;3pFy6Z?YHy8|1jc;qhSqyXp5#pNAKEl~<~JY09 zIR_=3I{aKoQmFh8j{YiDq~TXQLbtndVxr~yiQ@{sg~zkzss&w!Ee{g|IgKFjmdmkU zGil(C;jE|lTpC7E+fA>6C`C5cweC95DWgiepIMrX}oHfacODVhx6XLfew!01chcFg?m;BXI2K^Bz`Vt*THZo&~Qe7y46atDY7uUKXOe z{T)r}@4J=;G_nU?*eh~56ju&rCw71cE#z>mU^ROVmywBDp?a_<%s*@wzV1}J@XJrZ zugo}CM1gUig!B1l2|N3JrH_q@;-F_MW8>65Dgk&Py}!X`G>BF({dBy6BIb^VjQr%uGTOSu8tUS zEg4v@NV)@b1Py(ga4Hg=} z!7F7UXE+3!8kVN4UW_!l5e;7h;@}R#qk5u}$n$Ln9AP*sm~VT<($GW;s*OMm=ep)T znhT`70bUr}(eQ}?5qATYmcy|34)gFkG|)?b+i|9!d|Lypjz#|fEu)3;5tC}%dj9|x zXW;x0o&H7!3`X*r^n;_`%43`=DyK|l9?Wpu8iSHDzHTQrwJHAq2B`c!N893be-YsT zBND>1h29R2E7Vw(Y$AsYrjNmucm=-7oCO@O;CJ53YdCdwAGMD%@BaWHV<)+B&OjB< zbdJ*>gQD85KIKJFmhpq>m;JZ$^9%4_E0OW?LB+JkN#O((6zQF>VTNN_&U0FH$on&4ZgSZqc$^Mc-B^%Dy zRD39xTOOH=y6N#Rdb6&DqvZ0%cMb(`R28>a*SOLUryq%6LJr5o0ZG7?KzNRD8&a15 zkgMSl)SQ|g*t9o!*~+GnXa@scWh@rJs^Pwf)YqBR4X4O+9fitm#Tf;ucNzk>x1v_I z{{Vtl5oU7l+}9yda)1Y(W2jw$uEH-msy&kD=hwHXa|5)mP^GE2h-zh55ZQ0q7^?woa}Dhf(KL%%=AcrDpUig}E%gx; z0i%a%<1z{sJ|JEYb1DoXw}>2EcRDF<{ls90hQA((K$dkL2f+|0L2DX-D0m*FqP$!` zQ9*=(~m}IMti*iecRbx6IRStsLd$YlctgEH%w+-NNyxnlepskH1QMduszX7P% z%N1DFRd!Anjw7C>S%qMaP&W=9r1$13iRYDnqcQ5_JB}~$Iz1|z6~&7%FpmW~Dm(=o z%tvSI%($xpGVWy!z95foLzzo~z%Xht(4sP&4FI!6Wj^4TzO-BH2%DpRNWZe{3UNLL zQFTU*js@g{2USW4TS2$fve9=?wK+jxUZY?<&D-K$Ph$gPkd+mS3Wh6yRNGh0#b6Os zqtetWVF#fZ0%~NW=3An*w8r5tI2b+9Y)W88sJR>C+_(n3;x!_<|FI%W9008>} zQKe-^_QK^14lOyHj2DB%PJk7o8|n&MVMyhZi;ykx1v*bDr_8ZdB)A1JmI?hH;+fJr zKyxK1BJ6BP@7=j%hnG5W1EYQBioo6gd~^gST~9wWP(k20mEOmo-lTu!i-Q z!H#^+A{|$fSB0y9Bgrm@f)Wr4j-a_#nAgb@_Da_R7XRPshWxknSwZ@qE+T*#VZJ+3TwdzIN%^?h48DCJvkq! zRi}xdQ_U4oGDk*)uBO4c#{S@FS=)^*{D7A@iST*^aP3Qe{{X;0&cDHiYw$BA34X{? z#_fs$A;Y^wuf-yx=#DO1Rmt4FP|v`muH$XmiO4Pyj-T|k_(H{zJYC!hf{0t*$<{Cf3wD#TWyj>%+4tf;_3TVk&C2{{Xe+ z4EMfkvEzW!jNT|v3D?OvHu3c!eY8&|cPk!o=P3)9R` zXSuW;1i*DK5OlpS5MGJ|GUI2(%?Kbw%QZyOju7@l@$o6@ z;O4on_Qr(+#{=2oZrqf182mw1^1*b!(-4d5ATUCSj(pd|xNY(Tn+uOg)t^3(87hVnjGR58~LU3uq4yGU4xScvwAIbUR_R z3Wqm-*s9F~{$nD5r&=$VR{*2o@ezD4mzUhI!jvYX)6<3HAhtGVm4|R8yxA#appxP= zN09{FRu0K~Z`jm2>@S~)01-~$3+445qUHYp*krv;HoUOiMz6@mHF7Y!WJriQ9-3a5 zp@PfSKqA+|rbHrz@N62Ta#+SfIaXm;9T(2VLSm%;8JY0h7ByK{hAmX@Z* z;Ms7Ov25$mOGMQQpqF2Eum=aQjS6ln3=)kc(sIlpisI1bD$H&JRs~Z63G!52flgBu z9kJ+=pg;##E{2O`a(jWfhuWu^B-6&u9$84bOn>k{Bq8|W9vbQt89^w2a)E^He9Tnf zWe9ju;baxViKY8lX1FC5^A=aMW{fK8B3(qaLML?2)p#SwbKE(c3CuW(R#Bgu7K%pu zmAX7jmG}ae_+f{^4ifBkjRL&YVN;3jsz)R})+$FoF|RsVl`x`H{XKs z2d7bV`1mlrN+jUNKMWekW7jjE2y&(2cp5cPHrfu_*sqeM5De%KA3=igEluj;B`d6| zSBQEgL7-INSXqICd8&2`b7EEz{;YON-WQ6*kHN9J(XY(C)XN;)bl54YR=g6N66?UH z5E7Q}f-D*ty(y|-w^7b0;VOktUbnB*yk4`W$UwAo;2aO;<6Z?1OWE)tlw(7L-S^^V z)5+wmd{LCML2RpUuP`o8`Us{QK>4X+Dc9Uw8$jN5K^+dkSi-3BDHPht%!<^qyX}Lq zPMDEEr(0LU2?~MaE4b1^+dK&7fE885&P%TqII%A}f<&B0imR7oR^a1Og*B>Is7#Fu z^nq^gnF#bVn$)b@U4#iG@2^ZXrGpkO!Ve3+62u~0Q%90u+p#t}QaTgxrBOPKxl+bZH)|0CL1oTbEODAv z_Ke~Mv>w?>2EtVmEGi*1nyBjyw$X7?+rU>Yb`~*m+GRl)S3V;^v0N8Zk$x`^+&~S= z;p?Ie5p33_3p5JxGVOVo8lWS<5j*~n!~Xyf$S2Oj3Yp+^X&5i94J%*rclVm1DX~ zdwz^-Y^g%4k}9%`vZXrO8vg(qmG7X2CjcV(yJ_ImN620G)G}h)za5g5B&F3}Q6@+t z(}#k5%NmWCkDRO>ZStx8$4e5sq~WSHcclS;OOTsSAOeC)Iac1l} zi{1t3xIk{O?5tI^V>Z`u>i>|CDeTout=4`a+y1HwIR%53KM*Qt>M zt%N)3uRfU4;9Pj9tE5ouAp)>!azZBP!wZdeouT2IVE7AI`g}n9HVhj!7r_eCOBQii zkxklw;{1?TRw!&j*;jrQ95H~cTnPh~Ns#T`BTH8^a00*(p5r3LVW*m@Q^HqfQzQig z}Sc<2(7Ao%qHrK|~R+e5+;?at*?0mDWmeH&@7E^yF7MO`(W_g?d zUOXEQNa_R>Cda1fLb{C=E(uD0rR?N!;wmlNwxG}pC_E4ax)7GGucd^f;%T^#Ge7a8 z^3}haJDX-o8k%1lEKAL%F5GGIEH~v!u5*})^veiWHv^YtTv~cu6+XWJwvHu^7$q+N z5S}3V^989XA!s;s_2yCYzv5XFt{ApyJi({%UOCU;<|t0=mx=fgmM0r>=tFK&{G+xHEXl}mpK}j&5$un|f@`~vY$HdH4>c*m=ICP-*Uw33wc@e{_gBjJueXR>p=!q` zmy=0x;sDdydqP;a%%mAo_-QNh@`{U6ZCThU;Z!aNBt)qyai|W^W(pTkv0yZGPK>xd zqA3pQE2Hl(SBbr@6j9-jk+&DMZ*dfXeD6iN>6I%BzQk29lUo!L_YI7$&N)7?3C?f2`Q5e*+>h4qqSiAKCR#|l9 z@I|;+a~_uWtYu2tIZVGAVN&9hy1xtt zs?*%H@GG$BuO}du8&iR{)jdGkl+GttIn%3!S6ngh1>bPg;|&UqCo0SJITZzSV1T9v znL$CTPkxxa5Bozl;9>FveHn<)FmG*eXJDUlx_4PL zhTYB|wot3w3{&$;{BK`Gk3h*<~%{4|VDwctW5e;Dx2W8yJ2m*W#t2 z#NTjJP?`(jjuT1=Q+5JT@>jZ*rtlojLdSTJ+K7DRIgDeH z$5+V6E33h9O=Wo)_o^{zv{(IvX92eC0?O*`A;?M*fU38e1SDlE#oV6iVH60Q7O0qw z$XpjpPZfR!zrs6LXPdoX(?uRFa_5SKff%c>AKI!gT3pQpNSch|%<&CVnM%PYs1E>O zx8WWeoTWRqmraj-Np^_vAVu-Uxo||emU2t3B0XCcUf?*`z1{_<^-=3@2U!gCE;s5c z2mW(&c@Y32mrY_xv=yoZ3I}|n*>mO`S66q(PcTZ z*J!1isGHjO=*w}ZP7~7*6lj(ZLwHq9=(bLxIGw39`mz{)M6#TrZOxk*xL(FBMNz?iD6nxiU(b3ZpX6nK<7WIz%zh0ZPd6?v zGQv3@giwv&64YYuJ-M2-Spp4tm0veMh-KT_XCv?l5ViZ}1IOTo?^XD=Dm>g6(sJ%n z>-Z-uGABzx_#DSkjo25f0aNQCden-37`Ceu?Hp-LMX{uAjC#l~p|gvy_;w8TLDSg< zYi&CpZFm^8@WE_BcDEheNiEbO^&<8aOYKG&1bhu5U>61JWu7LOrAxp#L%N-yS)j(3 zRxy+U4Z~+S$!(7M$^157GZ=2(iz&%t|Hjl|^FPp3+^QNt;kA~*#yKm|Yw}KDE z)lu9%uOndGS$=ilLsc)m1y+rb@<9RdVzo zW63W3p=+Yk*s}r$3fRR7{!kPvYj@@hS{u=?GRr2;%pHW79?YgHNhDPTt?7K znF_oJ)M}Lt;fOKua0l$!dz2ItZ(WbtE0eab1lV6{>Z7NkERF1;xelOtmhzDRtONmH z46Ye@+2W-jD0q*s*}?$A#iEWTyE*_(W;(Kl{BW*7cv<$!Jy zq5NK$R`?~5sIF9@6?Z?{gcDrCiQRCU4=g=Bz@cT#WksxiYHl~dzly4^qgfpV*@T5e4 z6hR-e*U1pRHhc}KsCcCD@9JVDyYzCV;1h3JHHfEVs_hm8%jkS8Kr{AuaQS5P*z>(mXVc9TUOS2 zs*QA2PR0C&3z59w0=FCu7LD@D0@ee7{{W)q&^*v874<2*S-A`j)$&4ucjI_nSZ2YV z3L4jikIv-1CLct~U>1g3`%0MI{w9|X&NCNw7u`S(S5@Vm52)}q8#;TZVQcqt{aEB! z98|LfL15kcAq<=a^B(~;4>ZN3nX>o2!3f8d_1;ECP{+h6#F~`<01~&JZpN3)MTOH| zC2nZt!F|A1fyKd9N+v_m?LIU_OF?Dw&_&{_zdhHURTI5p*JU~f+*qQowZsLZGQ9lC zEUBcXx6Lt6yn*m@4Xpyz1AaatXB6cd8W?jFD9gedsGM_22ssLe%t3@(w`{c!AACy4 zrd9QE70arI-CzO4W8)iZ3A9&>oc9YEa2regO#s-~K%~Luyg_Epg7%O&ke?;-^A7+x z+yNSMpq+>nz&Mw}_pDUbFiSg}DYP+V@KeGQxkWgb!7N#W+<$7LWd=EkR|Btp<9jG6(;Pt^Gw{s? z30`(r4zDWKZ=R7Qhlu!xrJ)G6j$qyhbsPL`ejR>n{WHuQg1IrIrq&xCSrenEni=4MwLT_u>MHE}S{!W%@)XwP`DDel1DnShn>L$z=2{ z104v6kVm9X2)XZlii*(83l5$ofwcvSy(_AW(lAxhqZg~lq z35q??c?bewL!=gr1ZW)&{QO)kY`(qs2vJ*haAm~?id`(IwsD^RwtK&rSPk3Twe?pR zV-N?f2&iFKcpvU9P-2?h4*|dz@I8%7`4YmnNi@)YwqVZNqKqy0F#J~ZN`o( z+%fx#^fD4rO67TvlBbwOSc-q5PdG0RvK97;4FkA>W`VX_ru7gO8`nxS$kX=OP~*k@#ZXJx3|k_ z;XT1fC{B$$ z0aC$D*Akv8?gfUF%d3L2H8r-u4F`xNwU9!^SS5&akbs-P#B(}fUY4U9i-FxDq(l`Z z0`pLt7HLgKqNr34a5H6i8Cv~1JFM;?Q!8RoK5cnd%)qWl+e@$jt9w^H)JqC*ULnw` zr{bcv;h|71SQj7ZH-5i4D(-D72snlDC<_MuNHip-0Cqr$zs}2vPcIQKK8Tax+*HHa z3Z=JAuqX;(xC>knM@~WLa`}faLITUoY>tNItufT3C7P_{{#9$#RhKS@QAy0gSorG#jZGRr(LLuf486SAhdXxXJD z;Z~)UMO>~22jclk(NL~q)u?bXKyB75=Yuam;OVBo4vkmJa537IR@+MC=uP?|RgJOG zCCDky+-?2BTcb{oCg5!Y1}YLqbto6Sl&Q@?TtY&;P~GURg3Wq+4*LBNMFV3|YjH(- zdw{(zTo&&32->9m=G47lK)Sd*>r?HQi$lo5u*Czauu!GaE0Wa{nML*9#qCiPt=#dM;C$3%BwBH%T^YyWF3RG;5UK<;Tsyx=K{(|(SGnC*7P7M z^CRg}=gr(6m*~yN-u+bYUN4ACM!%BJvD`wTX!uf4jx7->kL%Ww~YhVRl8i zvZO-BS}H1;qL$% z)>87FA50nom3kIFw;HrM{R*j6M@uaflobUa7Q7DGQkl1x`jnc{ZX)gvz_bm4E!A?$ zG*pz9VvB<|yx4>FQDt03^?k*=ED{7zK1sEQa4AVnmEbw9%+4yWldp-O9$@IGxxrj& z^AqYg%S@qd(&d-KlvjHi*ecxwvq}y}UKl8HZR!9(P_@o(J))ncQW2qfOu?nQQ?MkI zLVLW3cIv`(Jqg}siWjH2;i9S5Y9Otw z5354qfeoOw2no=iaSWohIVH?`;#G9S)hTB!f(}6u3WY-7F}tX(%dx{L17KY1;^1~1 zCBYPPEQ&bQ{{T$D0f!N02IIqM$}MI?(3e8@!XO$~h|cePMuMw2h+*3zs33~+2#}LS zURwn$)L#&yO7ii3r%wuBFv8ks!UMYU;`&IrH>c2Cp*5Sj+=3n^Q-wMp0Rm0SX5`T3 zUxe7V5W1Wm;;H#1@6AgeGmz?|AEFELsH;!8ugM^xUglnnwt1aP4|>Rv=>~~`3uUYK z%&Gk$+JtuH^!)MyQu%MGxYo8^4;05h?=C;+t0?P5w-W51CS> zw3msLhZ#@N-bovul48#A1p19^iMO4~--Mk7D;&|Y}!+gx~JDGsj*k`}Y5{6&I=w){(#an!ZtB6SFUI(v>Zsf12* zP*ZhXBpf{`#m8W{$zK3i-!KV4QNF#!4$5x&l&$doWjw5_=hSyjO`Lo(v8Y)5lH;Yq zJ1leIg<5l42?fvb#fBj0Mi%7A_ju$i#iu_c-X_38e*gF-p+7Le=`XHnu@(3xaA! z9h|R-2+^Vn;yj(C3v4SG4H%(WfOuJ+U})jbsOu2_05l9EP~zt7w@h*}lVff=VZ}$6 zHGrP*Ba6KeI~ZZXyx0^J_W_~;9C9$VBUN*gv^6dct`^A%A3aM7cCZ?Tbqd*5(GXyv zW^{0`+zhJGiA3p7sF}#Pu8gwPOZ+wPA9mvih#Alg8{2t#?X}Gf96)e zVS4m5O@$Y0YtK9})$7ReJ{ZROIF-D5v7Xc`lRU6)nC6tLi$A2GcA>vS#=DiZhOzmg z9PXByl?0%#WE)^pOPoa9S`@2LRc|Nh00##wMI-eScD%&BV46eSCDTM{W}a2*s`Xsl1H%E?wmInOBG*Qz zW*WL51Yma2L?)sNhdgYVT@t9ySXj-t!X*?QgT#MDKZ%UcB^PcN1?JGYWDDvKY< zfdp6&AXW9h(=GwKIPq~Ky&e7~Pa5Irl&zqZ=2sRA%fzr`vXli*Y9-+`NMW`(l*$2x z+w&XPG)z#%RLvnl@lHw^$7&EMYOZT|To_eW)QCZB3*dkjoxA9PZ~-`py)?NHxZvM1 z#|DyKj?@gOmbZz(8QbO*tBAm%VditFG}>InScclDV6%4{m1$ApRYAKC+_kT%K%;Ku zi1f#99MBEyxGf>xk7Sw&qFQ6!R zWmdJ7l_;QSm9?A>qp`ifzY$a=DaOJd^FzP^vdm zT>DC;H42w$Y6%%Y5R&I6!1hE})Q>riII6Gh{T?7~2RBTw(9vcr5-Mk5E zw>?F7OPZBTwI?nP$feFYBJsU!;14kax4^F09i?Gj*fAE6vt7@Yp#=o>4uhD3P?SYf z84@V+7m;;jTfx$LXA^+f+lsd(;N}q6I=mxHYZeQ`&B_0L_>X{JsfH$Lc3m+c-4gGCPADCVH1Ax)Ba9@h&LZxBEwTn6B04#5pFB4FLWsjR9Pz!M5W z9fYv0gNr*O2$1q`+$ylzaSUWNN52yIDN~rGdzQBC16%r=h(rjW3SLg~Lo5M~z&4}Q zIbK&zKY_^xN`m!qlwL*+L!P@%;H#W@l%=_grF@SBraCxycZq|@ zsjCRmjd(8~>t)o?F2JXYBTJ!Go_Sd+%_Y@eCUbI}C|F|OYT1fp;=p>8L~Fe$c!beQ z@9akDXc}D$#=_7zd4V@{3-?m-ODwiPXeQn%vl*z-)~02W3vO3YWGijhaVk)cL**X1 zPThOUk3f~%8eKP_kLzX(t|=auufz@BRd8^6n*_zZJk)cY4goAF)deBJfmk46t;=m& zU#MI_Mz4>?aJJOD1BrHQJ5`)Ax-}vs>NIkNDZt0cves&K@62-I;m-m&(1P&_E+aQ- zy)u_9h=W)*IuO}Tf!wrcZFi?q)~kcNV0(5;T6=yD?i3WI;P)6-;v-_uG;hdp0s*)e zYt2BBiYBWT7cJB;Qb|u8G1#{QL~l?x{3eJCgc|2BqYkJdXRz}Yn2q7^k+FK*bg#H7 zs-f}>76KMTd$k82_8xrGU$~n9eThsByTJhwb6Rd=Ugw07^G z?of|5N+?<4T@h5~N?o{P(H;VfJDh;FvNjz&MciO0^DX2f zO`LilAarG|74AW}1103Q(&HvD)AY*XH_u8SZ8%#OgG3?tbR4^pg2tXgy(Jws?OgL~ zg-1sGy~QMWL&?m$Bjh_#)f7bh;m~`2h!pGJ6KY(uL)FU03ZheIQF9=5!HgVfd%zMZAZP5Gr$5NP%lAstvBxj2454sE&Fd;4-11V~AS1=?bWp#Y-Bi zn4xTWY#=BL7qVSy9@%uB09zHQLeUF%$uog9X%vA+F*Bs%I_{q=wK;=f%LWzDN(ax< znw3=qE}-D^3{gt}wxDm|@le#S5}ecsTSPlc;v2B3R8i0@TRt)+PIgo@-Sa5e09Aq~ zMwwzN2(P(SS_V42p(+?S2i&6Jaa#qe3b+aAs#HSVR1)14j>W2}WGR7|-;y}2@PQVy zGu(PnYy-gZxqPcwl>Rj2o;)h_a zbCPO%qn}AFLsVP=J>_S6`sX?Wt1AHt6EFIylw{NS8Rs&$K za*AjQ###Zzt|7{~Z9G1pm9XaE8m+o|%9>C@m3PDqRV#%QWe1BQpvtezY7l7(T)e>z z!1}3QY{iaKnQ(f`M7Jf;0(&j?#-{|&Vk+>BsE#bEfk8n)Sm%NPWa9P_<&L}JQ3Mt0 zXPDk|h`tFyE%u{GTCTol9fF4P;fPTp3#XEGUHnWH0HMrx6>AEgD!F?}t?S7pG@`QV z?VZqYvf7o7NcIkqBDUX6M%QKtcrg?tw6^XaZnSm|3{H}-9X(4hu-j`ZxLO|53aSSB zK4l0=67my@gBOxg0H_?8N{&VI62hfeZ3rb`-(lhtnqfpM`YoW})Ors=A$|jAUknbT z%itkzfvKS>{W(2HwGgvPd6X*}uLD1lTeW-6tWcJStEdO^W7g7x;UT9K6R5x?Z3Pf4 zu%M=7NsLFTsPz|OTsW2~PYC9tRhs|~K)qCTa)5_Su?T|@MY`!PR;}mHxPjuwI*Sc6 zCJbq);0ooCP&2T=Z3t7+G!4KTvK$;PvH|i2WTdTwpep#OV08kJw{Tt*>Y>bPm@qso zKmal330cZ<8{8Jw!u3JHfR0{zg2w}!?r1_P`-ZEb)D$4Xmx9lIu$UDs$A!g)Il?JN zr#O&qiVDILpc`CLbutVM(w#$n0t-7JjKA27Et`8{++4X~MA%*798T|1G6u_kxo-VV z#c>ebh^+KQ(a%3na@l-F2WyDw$jI0YfF~8Heh{s~myvnO#a-J*jQ}qeVeJ0^zJJ**aDB8lobo}OuyuVb!H^14dSX=w%HA4V>@k5ls&AszS%ei2DND5_ z=D~-y11K-%$O+h{pg$z5S)g{lr7~89ta_FaD}hRP%qg}F3)=ClY7w3StKm`}464N{ zalsd*0f+r%)CCs`#%i`)#A1d+A_J=YxdJwm(~^iU3aM{Y!2&o>1Ij*9Tz1=4(=VGC z-)wzXYBShi@6E>qD8Hs0#Op}5eB2$w1Ffrp0-(KbH4q{-IvdzSL)CK>R<}tSp2Zu} zsEqA0SrAQIR7HtsGnFCc*_s+-=ZJFGz=U!(iiWef zn_%LeCQuIpm4)&)#3_Toz&mg`g${+TV;n_nmKq(A)(p5SgMgH_3u23^xS-zom`b~V zca=;ToGi$W;6n5~L?*v&f{+Vndx+$oYq%&2pfdfE;0XCtMhfqEq8!+J56de}XaM2$ z1%+B%LD_GKMsa`Inm*sbTa#a@cWw(kjWKW2Y$8n=QN`Xi0>6e!sI zrUm6jRzccYfL6bV&kCxDTx-nKO)8ZGTX8KV=ScT8sEc5YTn<+2q*?|)R0&OPn;At; zag71@3JTUrTGn{+I)yU1sm{(KtttydC4-T*LRxCT)5Wn2P%C_gWyIG3==WnPWO4vl zFJN4i)Ym0G9Lv*fUa8cfi>hc2{4h`!w5X?Q;s+CVZ5Q*@GR|Ok%4T@VcOLWE0IUXZ zf5~4{JfU4#yAxWR)(+0{Syr8M>a4j+3g*%idH(>y6e9K-ITfp!tw7adcF`*ge8o$H z*bC728Hl!7+3>q}=KCqxio*q>`l%U|CwSMj=mt$xriEgE`F9m5)Y-xR$ z;T9emsNafik|45LL2K=0EOj=m24>|Fx0IIpT`^FUSgLj}L6&>HoHck3OdDcZPOM9_ zPLA#wGCO;TUJj7v(P7jPQmsuzp-h&8k$hO$oxBY539goe#uY_exOWy_&5P?GnO&K; z0Gui#))g$FU7zVAVGySz_g#>B={Bwj*lcfX3PMD$P`9)TyLb)MoqVM{EH#rAPw#66E%<+n~#HxkT!PJ#mD?4K#6Ka;# zS9LCxij`XIUesOuA)r#!Ly%at=K7j~^HUe7<;p?9swXtJ#x7nJP?aKzj4o%1SOBqA z{6dKpY&yOo*g~Fm00zivyJ|XUtKga<%mbJb+v4gS?+{KoXE9%*JQaHp0+j>WOt!GC zh~ky0%&@)OS3D3}4Q8GXb6GeutP!|YD+A=qPvC=VRs1}}r{NEXA*MwEn(Dx+**Goy za*ndc*)2en0;MboyCH5gM85R~955c;%0sRg?PXD4Y}Ji7g-j)3{h_h%#BWp0)Is6l zDi^1L2sJVQ4lA>`*xjhH7kWrk9zbC$!^+q=*U>E;-#DvdX|2qKPD8cDGlf70Yl}nx zZ>yBpADHq3VYe4=d*UL>rf<1$3+PJc!(BAtd<>unpaFxrl$(^J_&0G*cL$*82>l{r zt_Qc>&A4aMSK8(;HeLJXgj{Ot0clWauRul85yWjXYE_)vt_~x>0>mQDI$5-IypdF6 zDCDgKV}lhp@kucWY1x?r&Mnq9a(~9`X7;V-QuI?hb-jSqDM+$adYxgMi0wHd(b#M5v+&sO|s`PO)RF zEcl6aXFjH#QZP|eK1ziuoTJ<|X~ZLdzGo)8Yt%$d(XW|$viuT(O22R(RRn$AM>+-y zhc7oBDsjx`R4iS6Mz`wZW#|z4fVR4cXtS6w6tInrJi;n1z9X-HrO8yc@38EEx05zA837+p$UkUDnG%=j~uBl<4C+SOf(S73_qzRjN-+yAUj`dbw2K zb;b9Sdj^DH1PbWjT+>m-&Hn(XnwpSXy8i%6g9t!oxCMzxb^QuX`!-iz`qf-c1+W$r z>J_2FuhFiLakJzhzSjbdP0>y9Trn@pZ$jO`mkAeEJR=5x0pb7s$iw@#dTJkh??3jJjxVq8vp}~yH!u3 zI8^&T*HE$Xy)fjTa91hwG)bV1!B%RMuZL4!%GY9$+;*7|TO{1D?8H`hw*IwfToBK*t345zr;nC8u6KAUrsS zV9kO&OYCrYsm4c^Vs5a3vYP!xNNvlANvA~c#mJ}g1ESXxw{=Oz!UKR^yJHkksM>%7 z1A%=nn1zKmSs6t+h_?)5OQK-r`G}raFGE;n0V~;$0{lyAmP@4+Ymz3zYViqTysjx> zaX=EUSzK^b*8CCX0n;v`?WdS?&w{jM}R8RBbCx|d%UiCN61*dVA~O30c*{$WeluUR|Gd^;A_ z0KDem?aQZ_fw1P+>T;Hfs)n1u@!S;0#9l!Y(p}z8o}s626%$(B%br4Q5V_JCBKdp| zEHULEZ;R48qSILa0JZKm>VZ#umohF}{SYK3!-IufVA~$u-ZH(*kFwvwT*3r9u>})d zQLSuxNTQ6iHsX;xPwFtRX6H9LzE31j#b>I01n^qT&mvIQ`vBEJA&^UVkq2u$t%wc7C1Im*Qmc16a_EM)VyeF z%esQ1hL>=2c9t~lMCRC|#YOLJy$wKV3u~XcmI1sG2bHvy!oEy9;g?$)vMa5ZPwEXu z7)}5cjH07$u1Z?K_g}i1wVMQMfNLo<7%TP7LOP>m>ZoB>96vED;};H5kwhk(JX}w6 z1q}*cETOYXuvAhaAT0Icg=(j z>RL65v#98b{z(E<7I!0&^KhYtfor4pP_uy45vI7LrAG^CV`~2Z6cd?4*!xLjpAApL}nVv;nrkQi)jtPYuGxOQw8YNpmIHq40|Rabo6+KS$86|vx`P{V6$ z)T3a997P-y@W-)3vJI8NV78&Y7zeZGl5G=i@@}HyP*33(3W3Po%F8td4vSny&=Zvo z;pfSK5k*c?;!0NK^$L{;bqc?NE8;7jTltst6*e3~?!3zBHY$FbfNZr3Dh<-8xosnA z8h>oE)@drcVMsFDfbw84u12E{+kD1?lnR>T6unZ(QQ9u2xVKC~@|>7P2(ML%c#B#g z-EAOMrM8j*m#ZPDN6{>yb+X&JpYnU`@+tTq+E=161<~`nB z=9u|ogi|`z?Z*Kr;HvsUt{o1Pc)CBxg(ia4CW|YJG+V;|08BsHB_<X_dz0j2I;!R8{(~=jukbqeP;vp^BX1IcvNoxD zJf9?9P9KH&N$D4!_h`WO~%V>wpp zWlR46oe@Cp4dbzU{;^(bRw?!YCKQ-OIjV4vxg8A<{greh`Wk{4@mc}W+Jsp7->PD8@!`G*j9iKTO75X*$=M`TKt6}|m9Ux{UmDl2Yd6j9=a zwkAmk@%1KGn~=Mt#T6d>_p z&@JW$9+TT^T+}i*o2+S47nR=2Za9ipBg*!2LUNfUD<4CT5!&;ot5Tr`T;C2gd~*=U zQTdkxIev(Yw6n_iU2^t?BZ({Pr;;ySDx*loQ!l2>TEg1`n-|0`O_US>>cgBTi233k zTa*OS@Up~3vZs!1*c?^k`H4(4LIhRiG|D>DRa;1d%}tH-R-`m4gKRJgQ$|@{`;~@l z*=2^r;}H-ou0<%2p>2-GuTBO6(CLELhB_fzdVx`d{sM1Xh1r0T#w$k|kk zuHSO3XWj zHu-=SYS;UMrrokrq86-LdMn4M(~XY4r4&K9rLPnwD;APu23^7^Eqji*J`xCh!$NFi zehO??D7Y^x*Mad8S14LKWDNkSrL<;1NeQ-q>pPWqCW~#%07h&j4lm!BwxL3}1`m*g zz-o^2mrp6D9+5+Mpw+rBh;h(T*!V;?f)5HMJq7}u8hRjt2TE<(3mG*WQ*D4o0IP76 z?Tgd0c!9Cd3kX!p1yn(8G=7XuM!GG4ZG6I-Sz?d7aQsE7tF88Osd59+s;eQQv-=S5 zWf8NCY8BUm!Vuw$v^*Zis0UhC*qbp_It>#&45p4-6;Dp(dlgh2%bsfGXiBb^x=n}% zsga!$E-m=oON}B8{*n(YK z%)b~bD1Oc*ERCfr>###Wv0+GM9+8#>6tXoar$)|*S2`D-tErDP0p^WC+p|Xtbc!Pi z9|UMLmU?*%C^OZuaFv75b&69hAe3^Kcq9LYk;b@1->7E;b6Yzlv5= zB(-jV9R($qUr(@1ShIg53<{Mvwily1MRP1(EH}&^mgC-`@i0A;s4K<5DEP7W1LlEi zBtE5qp0`D>t61e5J#|UryLyT5mok=JaPicvqnjKl%`<^1p}6-2-wLlJTd)y5(%Ftl z=iH}md!{O8np6;4TlPoN>36-9sshu>5U>p%EQV9KgLy()B#k@>9Bm={Ot2SIRfy&Y zCyR~Fa`^@YM*%!c-saQ8aD-8_-reHJlg34?Kx5U_cU|mQSmlf27d)z@0 zPA7s4ZiGrw9Ml6aNH>DmjivD^fDE)SwPkj0Eem3YeLtCT9RXf1TIiS6bld<1Og4Op z4YeR2E|tc|lWGnCDk`UeD^mHgy*H;uOvCM$4q!1{WWOlj*%gFrI8CrH)X z#-6y8x?wlbs7=~RbnY@xnM-YgbcXceN0W2pfRA-=Ch_{oWMysZWsELa_o|igaP)Rw z)P~ak0JJU@aC^AcK6GaBd0Srx(<{2$K;D~&97*V9eb?rTG$77DqD@n@v%g; ziiF{XKMgLWFv1|dN^4@bu0fzV%~-%FqJi|qFc$Pk$~k2`JQ1n6+Btb(90#<8m_q6E zD78Y>!1EBWN*WP11bp5{$`1m-bg9n@c{r#WN`M80>1;~RrA_!-q9rd3n~$4`V%xo) zrzA_vv@M~$4J?DuLle(?9!(Ywy~X7@Cy#Ml0M_!8Vb%oh^TQ?T${a6)vM_k1;Q)$2 zgc9}XnJ+{u>>%r8>^Z3Z+S0FjNA0vgN^pq2)IR7R61%3w-`od6>Z#@npp=F*Tlf&_ zpKQC`4Ng$6Wm^^K#~7I@m}+1=LE%9^Ym!}gAo!JZ?$*Eq1|+}Avtv3UA za>VW`z8LGw6nUAk+wLalt!gxyQBYddk97qgC4@53K)g8xy!j7_RZ{{VsMWqwCn`C(HzuN`2J;6`5$fxLFz0p;h<3!~ z>Ln?2f16)93MpXIsFtR!bwT};#h;b>7CB7QN&}%L{s(4J3 zlRzQjbRnd0gk^=*4sW|eCFC`M!Rbhr7E~Os2c=)~upll`RPzDm92b!1*^SAi90rv2 zi5R@_^9vECY&ci)0g+`AWl9Q1c6r^st7~Sl1q-63J+M>c(VMf5aQWJf1Nf zLamPi!pOepubY(4{i4h_V0u@BxI@yPC=etlA3_Al4-C7F1EF57FbQXM{*gkIr7 zkE>1?XHROy8EFe~*3%-}cnOD&0Hw_w+T?+q?(yC~f;Dt-Ltf2!iI8o7d0E?2rAFZL zv*KX2u87UaQ2-r+kFSKb{1^^`fP5tsFGAOt2Ma?lHYtP4iwwHrqR~L41NU@rLkO|BBqSwxo2sM+OeEV%Z>78K^JcloNu0Byj&Q* zh}Z+nYALi7MQObSl9qg#psln@s%WwpMz0CXx)DfJEf_;U7S%6lW%dGZfmjiFTp4c` z`2EhF!N`kuO8JTG6}Sv$wJDHualEW8aR@e0;eoCYL#S)+A#zbZ(7@>Mf~n0jF; z5tQOB{mG_I$IEfAxN`s@Hq);~%yS7=Tzd^g;YHCr+FzkFo~b-Aemq8|n-2x{#qt;8 zqCPSKQbQgZ57b^LgYRQ5k4wmh{I*dhkFlc4eP}N>Q3SNFk~9#6w<^OaC#Z^q69U>o z+@Y;-nd_DVrLugx{)BdeDocQ%L{6o)5#H_cG0WevXQ7wvrxk4f0F$g}DOc_UP*pCk z$t&vZYmK^_^^X^k6diZWdI>I+YcOYY?OtCWa6)*C1zW9+__z=}xFr&+5fk<>S1N9Q z$lWqNi3cgRvCSzER$srth^C(%s&+Xj{GUj>1(PIGr#o+Qs4o29G!5Hs-E~88Mv@U914;DCrH4921>IYqF5T zd)ur*tO}^%G870CUT(M(<|$KSVO?#H0f10-TFodh_$QM!f9h0*l9^YO52{}RP+@22 zEbRhPm3h{c`CyvdqzPE@kb*r5H)>Xwca>Q}i#ziR2&Fhj>%q(8B|HFI(y%PnnpQsN zU?_laK#dg&`-m8739OA*p06{yrY@L}9GUJFF3=eFG%KtG>S3KS#e2yL3VY0DWiT3* zCjq$ausamlDnPE6mE3e$!MEENNwG4({uth?2EOJTUO1F)9I9H!5EOkXBn|A(ElYY? z0Y^nk@o+_Ml3t|-APRsW^yhZ}08kOBy{;V9-5e7>bP;<2^EAX0Y0sD>Yh-f3;$Bqg z8m{(MFbdiCG1Cb_>fp7UvZ1W5Vk!45>l=-wU@8k*p;WSwu(7CG?vWDJYXr)+)i|h- zD-#Zu%WTt5WjLW*`I@&5M|2c_h~}e*erAX=rD421u?&?J;kH!n`F0S)aH6hdJED8c zq%A1l+_wka%fmpLIbgX&*QF&$m4aJ=S|`pgI&GYVXrkv1#Tc!Ej5~}#4PR$uyP%?U zWzvI|IsVv+-FE_7ado_{e5OHgGB`>oY_=-PO*wZ_Lt>nDNf$6GdoKPABe8*8cHyvZ zPF{od9tb9uD;Mfa{t9#<8DSyp%zoksMMKDr(5R#exGcD&pfzZ<^hLrt*P!`F8Wm|r z{0Lk5cW;BWEBXO<;P$e(G;~?Q4j^ucm~QdzUbZM-CMjXeSZaq2MQuG%3h215E7+Z_ zy50LA9KKl0dLluu5 zlH(XUTlLfepk1s+Xg2e7P6!0faDWkHA9HLg7QWQ4;w@W=fJ^8xo40hv3A)vz(JKWJ zZZBXhG#htrqACwh*2h7S+SKRdg2WWx3Lc_61Dz@;(o_cBK@6g{B~G^ObOS`YOl}>n zgtu7iGXP>;tlo5r{0p4$3tIS$l-Reeo6BQweO!{#`Cx7p%cD@7C>5xxzlDr=qi0C} z0MMRZs9!L_I?)9r8RD1+cLIM4QS>s;ER*V3eu>{A7gBy zZLwhN9KtzLid@?>L-8B0fMs^k(TX{g2+>f}^5!9=s#)d~jaCuT#oj$dCiq;ZS|(qa zbv)mdj(F0U<7I9!V#Z(8WVV2!lm%4VZ~$nE))K*9AGN}1_*2L_K3F>dg4_b3^%9(| z@Vt~Uj2~hJ4#`QOs6PV_7#u2*#TBPNBkANbLihG;^u;ma!=B^e0 z03huOjBtgv@~n2}e^mh8h3nv$fy8<+gFz8DlTWe9O2T1)TG!A*TT8s`zS%;@y_s|NdXLWtw8t-@ z4I2C4{{XLSxS{Xq%kk=Nx+C`#g0bT`fQ8-P@eo+tFp09D!rm1*Dm7f&)&g6u;cN1M zC5_W%Wb*MVe+w>H4qQHNDZ1aMFz{roEK3*JdR|d$i-i&Xhk}QVCWv;_I4~O!7diz$6u*nx{FXQTkieM z2po7}l-+~G5aKy6o1Af0Bc@CM;j#sNT%y3x#7D#ny)cE096T8S@X#4j<7W7o81u0Pr^3vk!uG>l)XkuJ&#hu(OfL0YdfZJG6 zFCQ@+M!SrGOP4qEnblyyQc*_QZG!uiy@kNAd0-4HJiJM9z?3CzLQNlN@dEb}Ul$7q zsvr|jz*=D3U&0L$<_?M7egx~WP4Gd!3QOwVVxXK3v$!IYX3;SDRy^R;L1YOtFNpCRfrNpx4+ z#OJlAVyG!?!Vt%9xFZUc`=WpQg+}+8KuvbntYvqYLzI^iz<{Yb)im%|nNb5$rMr08 zoOPIa`MGmtenwR)wFUr+y6>|Pf|l3rt~kxm*Vi(@B2eb+d!e^)rZ#BWo(Q3up)bTk ztiYkzxJ8R-{{X=D!z!S<1Q!T-U^P*q_|m2%wsn??;Y{t^dS=32H*L)^BIUJGo1!!Q zH~=`8E+QtpE82;80Q-*6p;XOzm~Ol73~Z+LmJA~AlnZW&4keRLD4nJRFzE)dh`pk# zh($uBw;i)@h&3R;P*5wjRhOu!c&OqHz933^^C)9_h+HldpNH9AB?#h>y&?QG9uoD4 z7XaAPhk?D8Y7GY8P$(B?aXOL0`;;t1)MeC)tnUz0hBe% zEMsSxX-`tMxkogrexf7*g0L!HjRKjLgPCQuqR^S;=36t4%gDf46j}gMBms0&Dn=Gz zc?*Jy5w^T6K~Z4*B;{%L@e8%9aD_&}k+$u5jZ)IMj>u}t1(CmIDOl)z&_TLs-tHto zD`z)b5V2s34K`ZN<&md9H8=0&BEo3s zc%8v0M+0GE7eUX3&JQsxGxDcngDEu|BFn|n0C&x6L<>b_Juo=2lL*H&FJr=nv#n=m zdlXeZz;uFLb+EIZswtfWc^(nnbVSoz0TzA7-q>v`=n+@#t%m_RAP&pya!Q!|PEu85 z!u$D2XboCk^VgCN#g8Fqktd3_#VLhRcn%Y^@}#SpJ>V)AO~+K`r6WkHc;Sl1&9{76 z0vl;dS4gj!cY=yek@a-!vI|lw>pgZJn3L2OFS-|{cp(7kRWUWK2ciXwnjn4Dsi8-h zE>2JpxEsLmlPUiI2&&>)4mchH14S*;v526kC#)qREWGg5rAHcQ4m=5Hh%YD)xK+9! z8jU!7Udn|=?aw@=U3H4V4c>mD+cO|CTG>wOi`|D%ScpPfThe83572~trz~#@psVH# zWmVP1j_YK5jELI7#_F~!Mzx#7M)#D3fq015i$eo10^tLtp`xXWa=W;6-UafTP@J*s z44jlw{UJ|lDOa;W4Zz!q1Q4=Sj?r_E0xI7GqmogBXY9v;Z5WDHhRc;WR*aPcrhG>E znYV! zAlX+{kR5nmrg!y3J5;usbmCp_9}#izEKut}CdIE0=C=lYI zG>?6y*(LxeIswrRBT#-Gu;;k8SIRsQ05M$kkO8GHL1ny4h3sx*At+*qa#E}=BFi~0 zWVR3nwrHLUj=KRaW-)cq(Hk~83~Bces)1k6xuIb5e3K3V8dC(V0*h#X3&Ss#7olje zw{A$>XG7_P&1f&Rxe?>P+YRC;>mC}g);inr#Vry zvp6qiqXM8Ad@{|v8GfeUrd4#y;wGHt)0!eFh5D#kU6@P5z`al^cjv9uEu?$`!RQ=8 zSQ#HR((qf{Z3hjo9Q_|8DM^X0Zv;nN0DKa#vlxjQb$$rlOWS`i^v4U)+#^>swIemc zFVt!VHxO2<*Uu4mhu^4hW%(d1qgKZB0c5RSqfG#*JX~H8(GrQRWXZeeI@|6yXH^Sn z#U{`Uorfb7{u{^daGbMcp3$K*jR^ zqtgEU{1czg^E~hI+KEbszn}?#rS<0pzkb>@oM~8D!aF=>R<{hhlj!+g|3c5hN-co; zc_cB4+2&N-@GqmwjbC^yBNlcCuJb8UG^Qa$BX|mho-}M~g-K*iP*Nethi?kKTNU)q zb9eg-mm*u(DzB*g;Kf8JJK485Udm9QdDEn3BZl_|D;NxCJY|qbO!w$;Ta zJuBFzo))&JCx=@Si?B?rC=H@~B3rX3WeN|gT$tDv<#)6X!rQWH4}a1>k=u2+kN@E5 zlWWTK>czpB?Ee5%D{R`tGQKJ+sIo>U0biD)Io=0PyyVb+@PWzJVI7)YKsV^-o}F^`U83QpYF{DO!*K@P0G^WXHtM) z1#2u)>~|i~@=|u5f;{4IONh!uc5}`{2GDA78A2;|Fw!|C3N2PtdCN5+tD-e|Zp#n7 z4ES>;_KB%{S}Hy@NjlHAdv550+Oo1aFh-(pm%85i3y}Scf-^<=k0Q!5nuM-SKbg47?$ zku&%lBYe=lwZ2%Gjnje1RwYPxvKWv9jXR1ZgdpBf*lJtapZA0}q zT1+_}`(u3iYUS+%o+z-24^O?LOAPiX^4eAUG|@9?tIPvvqEJ$!lWIJeaQcxL(=aBi zsqumH++|*?lZ`Tu>UD_b)+YUeu^T&rF@sjKrqAjV7D!in3Te-`a}k5&kDMdRt7Fz? zq9jMwRWtJAJT7(WOX>Xa0{wpbrYW&U3K}g|AD!mZ|BmssF(BRwZCm#SdOziSRJ(JfJZo~JfW}8N6R<~}XwghB&R_DyW8mL@WbfWZd{y*g9502^afN9gF|9CJt zxLIrriyiv>!?LFSr+{b-(Rpb^{wgWvnWjgaCrRbhc~2kjpD-xhBthV4RB6F}CT+F7 z8r}kt6@g*8G?mkCiF;#yBkYQc@KR%2CzJ8#mN4x0jNfnsz?|=qj3rIX?y}M6H`M>! zZtlz+BL;<$=HO2Q+PSuWPDh2-a9aC zhvDYT5u)zz5EVe{6JUTKf+`5pt;3cE`3K@R-A*HD&e>pZ%K@f?YxD%qbdn{}OrrV5 zy+&NF9B>&mvLcGB*YCpH(B6soA-os;jJk*MVZ8kox1*SU@^k9r^u=MRpJoFzL?1Di zK=`z#1kd$GOKcxiywhm=pT^jVr+J$)ruCiPk#5h|3r#CtR$6Uou2MypYHb~9gbuf- zcRX4j$RfF)&dN<&aNBX-? zj;!8tTO_idQ&@N=v)dYO2&%;0+%fvPr1jSbhzb3v)%0rYWLB~a)zP&o^m*uq zZ(RnOZ8#kGs4?>9tqS36;gAPhB1YPlNaeuDY?L~<_ zz$Qu5@IRV$ysef1@Lj(EP<|=UE8o4mzY>lF zB@?@%62D_7$VwgaB7*H5Vxt~@5qB*x7>ZII$)YmR#%F{*Hi*)UHDSBgT*#0yOjY=& z?maVf?Xsm;xIY!a_p2*a8E0Tg#IWGS_#Zx_?CAn~mu0@9%7~Q_L>&hVUg+nv9 zvZfLKjuax~7ukHCTRgegsy@UH*!t4)j@8r0>||a@j!Sqz!CNdq#v7HBr|@omd)xCn#e)qWIZ%UNX{ws zg5r?1&-U_h9Zkt3$m}0MTVLx@%(kwDLO*N8J9?072A|t3pz_dSYv3mn)v8!w%m(B# z<5NYuf9fyTQSzExQ~7aB>;C|`Y|6+3+hwbKE+qzUdQD@lEosY6dmLvBg)ic4WciUL z^WF!+?PiSl&$OKUfWK9}?wA_Qc?}3Wm;LBQWl4mVVKZs^Ok0k|9w3;=NLhuo7-wuM z$q>e=zq;?rC5`X1pVQ)mhcB0pd0CD{>tkR^f2Ur7iX=Qzn%M-DZMvuiZ5h{p^t>oK zG!K|A(t|ZV72dq5F6V>>!=lUO)}JUAmaUktQGi2SZ^uEJ6CYD^9kOL!cb5jX zS!i_qnZju=^^gf9h{6U+SoEe)WEe2UQm%h8RrBT+9P;78nvWnCC+_@xnvDcHV=dOP z(I5V+x8@KjOr`Ee|1-ut`%D(QdXNv|&Ovkwz{K+?0}S zHv;oO{VZ^$c-jjOkIh-GKgJtpa~#TNSPA!=+g+Z(cKG4;T9eAd;*?SOtP1W=*BWYi z?+%9583e>UZEUF7!jIYp9F|+u3W8{VvEKmryX8-NpK`{bb;2@D#6VdZYs|pw=f4~u zm%d zhU15cOUoob^~a^;Sp2`zypSc1lAuBL(9Ch0Fk7gED<{&|Ov6mrmtFsyFW*h)qs&G@ z+9)_(;G2|4m}iqrf;`7~S?<=8^6d>PWc`tHOlR2^2d>aczrcEww2{Kv$7Qw`D2EkJ zO5Jd_lJZTqdC2pjp`ayQfSbJ+3)C_c^UYC)P}Ck&+8uGR1S66%M&LsH8()OqrgM7V z9;5~~ukA0_t2Dx0xaz61?v!I9@o^eG&d1K94RzgGboS-mJD~bjuy=?4y%tpO*|rBx zf+w_CI@k6?N*i9pI4)ZL1*I5)VNHEU##^UD?P^pB6@6FCebSj*aI72`fj|-#<>6!D`%WIVNqOiS^aNVX6hWN#vUW2+vT zl5}zy4Y46lvWB_ow{(m)Uedg$cjt~`tc&Gc5VT3w?B;dYQd7s)roVE=R$6)4H+-G? zvDX(PhHqT{#F!=y$uow=MbkFx8E)3-Va=df0&b$2l<6XQj&-!`QN)m&nJpPUu|wq;mzH>m(+`)swge4 zM14W=nLW;c0b!?Ep|C|6z1mUIB##N*3|8wi7oWDSEpa8z&~oOT23=x8Jr(46(^nQ_ zH{_=hIVY!!s+;FnErDgf0ui#&IdLJOK2X2BhKETAf5cde zIuq+W^>iY>D_Y;Xrze>Yr*+jNjXV2GyJegj$A?uElx|q-O(V99reVS(|T=eKh zUX^lQ^wfvcXq$6$CD3Y z1))4lC-k7N*PDmLWzc#v!w>brI-noNvTiJM-UoPzghE#sJFbgoqRPsh-JwaQCC=;l zAfPsvTfpV;M<%5bQ2A43%aG}?Lf&)0+kobV z62$8#x2>TS6#ohn2FsJ{8<0X4l5w&+9rg&o;e5Qk-qw=xH^78}sBUHJ8H?AtG@$z- zo}ir6B7DOJ6Ak73KK)^SdK=(KsL_lML(-fEp)|XE@l($^4#z<^bV$fF$!qhG22<58 zT@v+}r&f*KNe4=dWsewIgi?35r)(0Vq$jRnrK6OAjXnx zujnbBsmvEyBm~o0-o$(NTamwz+LL4hQ3iq$lCT$}${e@Z-`hwsx(PCuCPyBmY1hUO z%l6R9>pnkq(Y|3xqYt6Thnk{d>rR_L;!qC?y%^nWI}})mKJ-4!Mvgp`_AyigW zj7p5joPwg`#Z!Qj1-Y*X$LnI7qCDgWV&3CKa~n%RmW$XwEa^V)rrcEAk~6iv?@g!t zOl9QY7BP#ofUrZj7q(e^EyHTdOAmV2pRY-?2l-X=zU%J|$#sL=>;>0X-YD2?7Uddq z-t8Wggmh&@qj^xf*tB>2{O((2HiCCuotP84$mm!Tui1piLne5Fv7E`uGf_NUPgeoQ zo_(ahEC5hfwG&)huvH#z8+j?iu6-x+_Sh-)`u=GU%){ZOj55~SH*bPjjqwZp-G#D! z!{)xvy++_XXx?9D$U0-n30FKHVVM{0`L(Miz%u6BXlH8KJ_6Z|_BY(th1g`#TYJ`l ze&YO{mZ?CHcmm$`mWP0gn<40cb3-vtYB^roHm5;YgSVY@HoP=VhsSTF)wlLOKp*{* z5i^o}b59Xto}g<@JADw(he>;_+?T}cMfpZFH_I!LHxIZFnD`r4?Zw>@K({!(FA!1W zvrCbb)ZI<5DBSWuFjBywrpl^e8)%CnE^xB6Qe$5ApW^rSO;@qcS6=fPQ=-E#@5+ii5$q#Em7hV#3z~p%Mxv z=(>vtKI31t@1`M96B$U=u#ZQAf?OeYxH=qoLv&r5wAok3 z3-W(}<512Pd?irv@+;DMF!DD9PO+@3`DORhDt0&d zOl{>zQlM-IxAX8nd9WcJt;OW{SK@S~_@+?%1J|JIdgU>#!5%TEBI+-iv7=Wyf>+r} z(IeUszDi!D?DKV-y#*c8AzVf$V2|BvLlg0 zu-0CF>%P+VT_K`v8T9RNvMNY#(=F}LDx)pbDcC@>Ga~nycC74&r+kVihvau8Q`TAm zjkC?}?vwAuyu0>&)YVuk!QKcm81Rk#tq2vQC*teFI8YouqF99* zEGpSe;?!Qak}%T!D?7;l0cjTh&Qnq8Zmv2 zw>>r6W;Q#t3dEA(b??c_0!|^RZ)DBq^b6hpYHHYF-U~k~+Y$(YY5fnN?_*2hSS;__ zzT97%3n9acbu=Rl&*Xw#|0;^<%R~{CC5wkj_wuSdxVDX&mN`b{a^Pg|D zGIw?gYEIP_y5yU#rP}-wxi&zWY)~lWq}P!l6+;`Db(}YDys{nExS_R+s~sL7sJM8b z<(1<dyVNEl2IJJ=G<1Itm&HDjNCByGa0Weuf6pD%Nfw9P@qUmXpd?9l? zHTrMsh+fuucZ&w+<8lG=la>2?$i82~TqC-d0nRI^Z&GON-)s-&1cqekN>4fIDI@XF z%UL5Z*MIjEO6wzO?=e%%NULbIj7Q@1o!_dQxL>5T`K%AzjLGNDf4&`$oE&fw3!}J~ z08EoJ#ND0jeiD%8ci!7?Ieo}+25K0-+R-ytmP$x*s;n&-;a^{QY|b&TFP6Ppqnf;; zSvWRDt+7Vu@FS7%`~xSLckHEXj;NGkfWDy*@<$vN^#E8W?pUfCQM6(X47#Gn`K9L`(njm3S`$%tYE2Vm-aYkRz)@znYJ8_%@xNAGTxukQXZ3}M%%(+$#p zF3$@JWvPc+A~^#h`)RJE*89nr*ZT7zx)<}3KVq60BG^Cc&{4DJol+0ais$9?1W~5F z$px7Tt1KmVc=TJew7TV(LTI%s8Z;7A#@Q!s+Zq*n)=fzVvYNffSY!GH_jBaxRmXdyv{&ekaB=lz4Yy)BaywxNW}sXDMDo{Ppvq5 zPp!~E46I!A4J81ylw5JY?9eT-=VvnLEP9O6n3A05hO5iOE(WT4sCb+st#dcOoSGXI zH>ov7;UdMbkH!ty#FM-lia#T6*M80{rS)g9(|lH}+{wJl+;}cSY%Ixt*UGFE&dt%m zyd3VaIcwm?2D2A9ez_%Y?rbLa}gqBH^vkF?R7Zk)s5v zKQ{YC{J-QoZ=Y9@1pd}-h8Rw>uRoBqj-}c7ky{Ulh+FFf_&P92#mbb>U|U{EpPyY? z-izw+@QvAK-+l0m{!r}k6n1ycXGlaRwaeBitMVI2_PX&%Hyili?d6PQ@0qcyMIb@; zfDz2oHO;z95c6e9cEiX15ML``a_ap@5TNud%k)Fa_q0n%#1?_1(uoPa%1=lhlsXOy z=#Z798O8K8S0FIWWy?#dERl9 z|0&$Na-%}{fnrn(W(eU!!)z+pVcHUEgrJ)lxHp-4Mn?vSuK(4suTt{~Z=HViDQV2O zOAc>+c7Fd(rLTo@j5B3qio0SKo|2xrZIo<+k6-pZz~=?j^Lg7=qmDniUoZ~<5nNN* z0~y0!pn15rwXN=-Sw5Gm`>Y-N?t6La??_z2{N4~o7avKR-26rUvuR3SK;>3K(&tIP9%zNz6mJN;HiL0qx^!H zKik?2klz`uwZfX4U*K;7RCNyPSM(gWMr0jat00Z4cihB1YX8d?-lA4Obf0+hs7h4z zv>r&b(&++v5-u1|25OS2r%U}4%F%{f+e&Xt;#yp~7!ANa&c2a=dT|`1ku0Ju_vRbl7!QkP z<%mz#fvz>~3F9l0aA<@26ukufd$;D_A#tX|)_J+ZET+M2QIe>H#1*$@{$PDdul}c- zy`^6<$1;d--e#IB#}5*9c5-JAQN955Y&eCuOV=yrgV>$u5*=6on7ed*$S@7U?%Ke@ zHYXck3cK`A<_+|JGm6yYjN-C5Gy7Xm0wSc1Yu54>abFrpmzr#mdk2`7V|HIP2xU~|TX%TS0i!A}czK&|XSuyC zPhCa9qA|)xC=4e)xiD;bz^BLf)wjpu&c&n%3#(LK()Wy756;}&&Cc+?*zVo+&lw;y z|LN_&k7JIr3Y2{g8CiEI_h~n`EycRfWsZ%JZ{6T~m-16Y)0k0`Kg(#ei+*I(>mbQ^ zhokiA{9l8Hh;aryXXcCRgj}3Htw)4{WWUwxiGP)*B?7vXrkd`Jo?xB*CGN3y_D}fO z>C#BlzCv4NQq(>Zo3A#tLB^7~ll{1(pzu8xRFAImL2x+%MaFIe`qqfuBH zE30}z4uML73*I=1f12njg57V%DG;akQIp6jvAiucrlIF*XI&&F% zJD~c~enEAQ^i&q!Vw;xCB$PBAEtw_ce|Cf-97A7?z=W^0mQbeKjxY4&|HiuymyMa8 z@Z}QzIWF9nPEnsr$aM!P4H92tw;#=(E-DTJ<$L#2-;)|N7whJOC0NbcVn!hzH}vfE z-a49NuSsssACy^}V?K}eBl$ub+0K3nGb{h@lKQG@S6-4}S0|Fp^WxbXgBd?}a%*F` z6x4eO&y~Q%WBBh>fL52Y#cwlZ5w^wFXN}x6nKHM$3QSDJs}JUW3%O*2FlP}XU`zAP z&!~D`D+SUut}8T~?F2mRo-iAJe9)pFZf)-q>Yhl|x631HC{eo7a&U)}JIzWr!vmJ9 zQXZM+DYRC0Ku%Iqc%#7c_LhZ&27>t9$!7u;Q1?w$T2W&b)cI#va4O@^m;pMF=0@Hh zT>`Kz*;n}r;4szl5Q>T^MR&v|wAbN1#|bQ82Z2y z&Fdp0n*%3y{l{*_ky3{TmbRbjyLj5XT2FiR(Kk3g$w1E5mE{uk9~M5-cDz~B+|562 zmOI}f*)ziZNb9sY)%CUqDO8 zTAsDueoC|vVN{lUl)+4d#^!qEoagwob4qnO=X?JT5H49vWA$)aC0)BHj>#vsG2_l6 zpJGt{s+ZCU;B%{R&g@@38Kdkci-Isi`3$!iMSRmT|41s{I>fR@(;7;O=M1%M9qD|P zcCxFbs_*us8-I7V2IB|#=$9#a7<57%=lAr+*a`HTxh#8esF@;WFUOaL>S49xViU=Z z(O>O<01uZtLbc_wWlYm$YEV@{d;AHwpxm zeMAHyc0($ukJ<-cq zG_Q2(N~xMs`&b4xo3vZtJs$foIYs4_gw6-0*mi6yjs%WrnL%rG814s#wvC8ZxP;|} z@d<+$zqxsW4&Q4n?1MV5-*B!F1sN9 zfG>6;zo9wxvrU+NWdFU!Xs8Yckx+RYg#r24>G41^Vxvo0qf*%764NnqBTQ9rkmS2EI=X7HXs!%Qaw zXbqQC&&~J|au%yUtC;4QdB1K?5J5i?X053jtEJ7^v=d?D$Kjx;4Bl^w3@D7ZJr6VV zB;f;n+o|38*%wEfdm3w|>&7cR?fC+l4e57AMJ2QA2Phw%C6x9f}%B5FlF>|>X6>J6qwGQ5alfv0t zk|hU4x=bLy){;ZkE0hOLv3D(a4`{h}EJ)HOK7+7~T?g@CG?d1w#4Z#esL+CO7G5SE%dk4|ZkJ6X#Qcbi=}fcE>G z*Id^^1MUp|wAKeYzA(FqG|kYucSor~eg&72GHHQr@7Nig!uAeQ!rGe$@9NU_{h2fA zW8EXh<+k-QGah7Q97G`#jFSi5fNmmg8eA;v2oo_0lbBABN5^)RDt7>ZRCTMFQstOl za8nxFDB(|%&z5{R&&l1{936c$Jo zYPd|}+{%|?oQ~^hDB$93B8~RoU;B47RiUi*S{;?O`B)oT8sqh_zgc1{-4?zYvz5I< zY1JA&GC~BIebv~dakvG;dhNMpfdx9Bj#^Y^Zl5_yS30J~qFccXjkX%tEyFBNd2t*1 zU0q$3KAkv~AEqtIsC~^HnwbG$f^vfKbg|b@9EDJ|r52ikfB}*dD%av$hV+I6x!qc= zQC|%d$P|;qib4ro-R4@q^u#6efusD79nBA_KRQ!Wm0&+zv1nVov#}U~b-5jBd%;=s zHM^9$MT|GQd6CzHjDGon3HWHOD94#b4Txjt^5f! zN0VlR%in2%K0}pD)&fj8I8?sJHniebhNk~#BbAv1T&wxUC3P(EMI+3AWCq~KH;~d` zl6J<;c#<6ahV(^dW}hw{$1#BLg3G@XXWmaz?orAwNF_4G`m{=Ji;J!Dd0e85v}6A^ z%c!xmUPloBwmIS`B-lcsX_EPCg&{$8xA|t+)` znfWUCBHHAmjYDsRsa7@+G+3sWm4ck9Xt#PkqhDTW5hU7CWPNZ&)@Kwb8 zPR-1FQ`7w*?3-Ld)r&$y=yl17J@mkx3iF>6f3YIGYxE0NxRzU5YUTr1d}$t(WVJ6^ zAJcCWLgk(0O(Tp(jh9@ubYD>C#Ka?h#b&-dK2*pZUWig-Dm>fuKCx_vB`2;WDUVa_ zB8@n@9_EfF-156GuOX;ww``DstB)>piuOU8Z1btzgU2YSIZdcJ?_2N=+#nsHydy0! zE+C8XBbjqc_OuzJW4wbJjc7Np?MICx%hVXIJx_EVt*Y^ZY%rlL>5HX* zaQO$}i4j2ORY}@YI9q{{;%e7+f9(+QHuF{G=fA^H9`P2q_kzAzH`4+(61tv7| zn#JX=?)LqFj5pP(kzQ`t@FY9C*5^mVOo?=C??3Vh76s6lZTd1{N?~Mv(<06)?8a4 z${U@huj=d)o1OnL7vy+UWXT4Z8>MD%QeRNvf(5?%9{?j4rRXh6o~G3}?VZ1jxJZJ+>|;A`r3PCE_ig zk!~G^w(aWjNYGv(4Ixb)*S8G=bRPD$Qzv;^=Z#a4?V%F8j%>hs^lg7 zNJ2`)>_wFR-C}cP`b18x_pDWmIgd+AEh2=L!~P4xp=w;+>^LrKTo@Fdj!=AY^u3x= z#Vc}Bt;Al@S!?RR(bGwZHrYQ2-zC>a+!X2A_>G)R1wvnoQC6+<1ga+*nf2@#a!uc@ z1`3Lby$+Z|<%eOM&<3CMUz!1b&@Ko~tShSbMh^ex-h~;a#m0$Wm78 zYP!=~o-}9?4M}YkjsF6>D3$sqP2JdkjlN>g_;|&w6Gfv)JRGt~RWlJw?Gtk4<1+;2 z0Y?lxPA_j?r2zFzpkNk5@W8r$r2S5%E3El;y;%O!Y}{hLY>qF&WQ&>DE`IG2t_veC z{#cskz){S}5*l!v-ibB|{&(Cpmi>t*osfrDqJ2-TCziDs^XYv4T`8@xGP=cyowo zq#DbMrEGacVeO}rx&cFf<8^Co;>;i__GX5J^26e!P8&2kLY+7NZNu{q_nG&*q&!le zhH^q365YMQrP`nJ%;Vm>nbufZY4@?`AywAvLZKfuln&9qh>vt`#+Mz$A1n-uHVW`o zU8r;3Sn}eY6@MpTG0!y8=o- zQx67lA$=jvZg-kjuq`14Ns6zIY}jT-yZ;!yZ#Yp$tN|j5tnUejRucb3<$o*MGk3)yX252&Uhi`w&Od3IEL7r z0lEwebGp!w>02GM_TfRR&!LtD5zq*J=sD!8qj#8i?Y2@3X#s6uJsXiaEP0&#UyTQS z+Z;sgE~ASj|sv04%*6K&bkn~_dov!(1R3c&jiDYkS? z2i&q6H|F$4^$OQjx;y>{NQ?!1tqDwb4Xc2 zw|Q+d6&Q50-9}wb@=X;7K0q{<;nrl9hA1=;`!{BW_u6JIDc$PF9T#lo!SVa$hrFB5 zfeSjF5npdHh zF&`aYcHg}%79jxE7n~bQ80a)ldVa~|WLAu0%5~PQu_m#=wKVP>3M}{Z58T zo(!+;IYB`_TrpFQ-gUH<_VHzKTb8V^oK!0nBsc^ke>qD&MGU%n`*haJb%$lK)~0(f zrF409{?W@MQmks>NiyN(k8JDLC;E0AiOLLG{@^x^S2B$-PxSuT8KdAQk=nGU=38_) z%7+P!l}irYRrIXt=J!PQ5Jl}&oisShjhSJHw|xHzLj^I}_Z~BbPfNZ5W|GGiqXI1!-o-UW8=IZ^%Y~#%VV~j)&XWu30Ubztvi98 z>qOb#U}}sER>(SY&=7FEE&Hk66Tz8B;v-Heg?fwNi8yO=VDXWEOrb`q?A+9k&j}YB zCWu3aAT~+FUuKLF!alOvN1z$7X>Q1{X|cD{*R*) zkR1{f-{K}xEJds;F?(V7Y0C;wG7rfx~@)vI=?^y>t4p^PlvMO|ow_3P}u)a0}o zq$Ei`g{_u{>eOBXtK4tC}}qsp_eX=oE^_Koj-eT!NiWx~T#+gaal!OuGmC2lgd zmWPLhUQ%rs2S#TzN>DZmbsJ)Oh12rgIvD81`t{f{1TbMF)OJIe%c$eeDcm)#;=SUQ z)OG{3UNWV**iMeRtpe(2Zsj}a(?)1YG3f5)4(vzsL6m-)obPQeqCRl_bF!TW52!yg znzdmd^F(Ckc`W&f*926{It&UXOkszIzZmFsbjrL>4$|7Cq5(?idb(neHb1r__Z~oP zBt;&vkoG#6fqK1cvRJQw8|8bIR0L&VYza8}mh&f9UKq4ULfUl6yaS+g(r0_&8x&wP z_}V+>B>ZXP`Ws7FnLi>Hs$DhYR=Sk5bi%irr#{C zx6$kYv0rqXQXqRh!zpl7O`KQ?ZVt9URuTMIseo4FVtdH-IIxy~B7xb7t{=73`oP>& z`uZ_#TvX4JDTv+j?tcN394nOUl>-K=D`ITAiZ?|c>cskHy$om{?cWHWmfV`{epMZ7 zJt!eRWh0G?6J_-DOp$#?t5@H1mgy4&U9Z+=4g~Qx_G!4*CiFC?TE-WT3-JIO&&%?ZrG|{xxhdRI88>qYL$$% z#6#kv*z+qz&&r0ADG{U@S+Oj>tLAh1Wb$7|&8JwD$>fZ;R>^`aBQouQq7a*hu*JFc zFXP4yA1X6t{U)ao72F%;KN=}yjhX-!2$+rOw!WbU-$Un(mHK+&4!b*6%|Mr|ZUS`c zAl7FPs2%*b(ode@tj#Iz^{fUFj-sk^o2tBhgMHD6XLI~O^|*7?pVx!m5g2Wam$otBH2T4cRjt;Q%7+L_!IW}yw*DX%U-^=pumVN)@VEiv z(M7Ks_auW0s^BZG93wh>psn_j*_f{X7G+jyu}<#0z+w}@le18YA+3C5OV|tHAH0TQ zw!^boMA-@55kfwymZck#4tla|G0tp$Kv7jUb@hEDfPmQf)c8%S)}MMK=t4Fnf}pt! zT_lgbZOAsc7`cxUC?AR2jtudsB-(Hb3(97EbG~PRRBf~x!Ust;hZKt7F8MC8o9&W4_ zL0$yJhdeT_Edw6P?*xB}@7nLGUDpM{_$brpKJjjaZmWkkKDU+cXqT0T zV(B;B19oJ+w%tfC`bX=Z;d3B{g7S$ftwFxizVp|fML~TwZBOS31=LGgF#I4IBX>_G zzoYC~%>)Wnq`#PwYDr;?^dXg~i-F5B>oSe~(9;LvT}+RCGc+D@QLMg22kEW_LM`i4 zI>;vl`*iRr_SxIngmJBtV6>8IO-C@bWbgId642)A`_EBwQ_jW5D3tl9Bz601zfN+B zBPUAKP+{L1fseb793HG6=GZ;OL^H0Z;COvy3nd$0?@eh~j}ov(Z-rlxB>UvA(f+VUua-6c+G`+4GL9@Fbut)}h=lb=or9?RH+8kpO3WvOEd#c`Oe zc|L39>ByV>%D@GL4m(1*9bu$JEGCN@1S*9tJfI#}&{b}f1X5|e^V-ueCr}%y&GjSd2lZ>6-Uoh=xcSPWCmru+v;3N>QXXsO3*TQ{4XmXtC90XMcqb%vtTG0Lh=($wh5{UXHlIsg!j>YL4*Ost__11>14GUfB zZ=$@lPh{}D1J=_*ma=E4?ti1x?06%IVEt1kMlU-~ZPR6+hz#l+U*my80e&%?D}D(i zD5A(DVL-rx%A6O|9%8QjLJimdUj}|WA(2C>WaU+Excn{bln~#fq8r#8eqlibe%ZKH|IWscol7cp> zIIX?_g`=wg&}sJMzDux?aa*CG7}i=oq+M1IRJT&>g{&a4w3iV zh`}h@>r2&by?Q$MGK*Q#^CUS*``nhQk0~Dcy(x=*_mGoML_yT5LiTZmCpQOe!+HCg zb^g!Lc{oDh|8e+?GtN54*>tY1IA>;$vdN({&OCc$?^zUQ6H%O5Un88e<<6E(M%i0& zA_*DM?)URge8&6zdOeT9jcZWQ%aJJFS1fh>4WyY<1K(6u=WXmBgG};BG4C(ip!|KF zqK-BeBw?~KwICtx{;mo=d!aR8If9fN;rd52{Z_9zu-oLyzU3;b`FXo=0rcNhGMHU0 zUcP38!(&*qjMRl47z1(REPZ&n7Gq|s#Qi~)+?<`TVM{tc!H3gW*OCjxMh5Kd^fYr; zvxPdoR<)SVxco_&SHJ|{b^qzEO(MbiUX*U4VlzUcy957cBzi(bzUo+_NeBxPlM8V6JZQr`9 zlwv3)!KhPwIWKFjXScF+ww`nzDQ1`Bg)d-zeI2<6*l8&Y(z>(@$D%jqbPDt(ecI_J z7Xmp4V1RY6rr`bxWGJTIL z!2;0Fvm&ai*L9TN9%f$u++mWjV08~`D!I8>gnymbkK{d`70=K}O!;$B-LopF zDs={{!mXLi8@W21R?w=KkB8C;y(kL=h_}DEBlupCX4uN@T z{@F}}W)Vv|hhT|V#D3HoS46Un_MVQjnwoh)-MaA6&iVLgP8-Djk*1ez16BX#sQ^V5 zUY*KTb0(FJ^J1yX+y5GB>RrrG*pksXCo~iAH4m%Y@P2+l^h9dS#=(1HeiC$*G7=s!cVMNJ5P(pv>f6 zV+aY5g%(=-)6eMb|K@lo{Dbflk%9N6!6(98EakO8Gqcxh=2Gunf%pQfg+#s0!^akq z8DD_$9p=xlFEyl|dxTETdd_?X=D`!?q$gOkiDOm1mX!GL>vR4bEjUB?Fv1{PxoAS* zm``cX;)&a?44Zp&@3pSA@vPQK4m`8|x>uprB(s2IuL?pBOT$Zp6^`Nb`sfe!S=}(g zANqgOE60Os3|FtYIc{xnQXIUth9s3+A&UYqHL3Il>%?}*YA98)3I`t&K+3q*IJ#mm zv)%Lzaiwx>H0UYZN9_U`oLD%G&c_d_y_VhIWF!1Bk=9cT%viH zh|YKET+eT%q5M9muSNSk!#@>+BFmCe`5Neg_~Jd^D8W)?%$Jk_HiTRUlhktSw@-fv z1_wV)HMHB4P!V_hnY2~1oj++f)gGGJM)#P7N!xoBZU;3Fe99!kd?f*yBU@hcx&X14 z>%CK${k~+(FB!H3#(PNp4H`)ZON)aHuSs=Ic?)m6KJc-3Eq~G1g23|Zq#_37O67@z z3m!41=jvHw;}arG?7)l!fdiRqX3m5>lb>ly{^DjAKJ6o5O8bH;1*yyC+p~`pwD%Fa ziGNTs+Xhgb80-3_52&#`_?TH2KL64bcE7|V(=ZC-x!nmo!G z$i-3Qh(BrfLssSQc-y!AYT|vmdXIUk^zH117f1DHy6aj=Q8(lW3=EuJK^@`^E|c{a z(4oKilXrYABT)Y9yS|2lamhZf0a!YZ6=-XrGP}lP5gs~$@>&Q5iBAoixP+_IWGl6q!aTH`HMAFR+R z%U*=eWuG(&HhTnq3nbz6Eb2=5U9|_QHj=wqaaRS(k7r%S!kOUbKfWJD^>O&uznfLi z5^&VIFm)An(X`{7_$*@$RYxlf%ZH8j`2f~e0%JG|(a38{FfkFE60yOtPNr3D_72TB z)Q8MF$JzzFT`R`DZQL$m>mOCPv|KyGn_F!)eWDPF=*R^nr8oRFdPdhNEmJ~q+&oG7 zdFM7G6D?3*fqFE)Vs3LOSSCA9F*b z)(x8EXCrm4xL@XgZKl!aWqliwL{2tr21ax0g!=U2^VNNSveKsCriSE)ye`JIZqO$>?c;jfK~B7E%;!V z=r>QRMrNt>_Rq>~5O(fE0An?tkag>tcKQGASe8$K&e-l42-Sk(#78Njjs=|>T$=H| zDY|no-D#cADE$8bvo?sp*I1CG??W@5)4}$YT2I*OvvAzVN9!l4`01sSd0H5wwGUq_ zzHyL~k2kw0z5W0)1rux!yQ4xKUF1~sNyE-uFGaU|-S>@N?d&5^!f zJ!Pr=fAG_-ddnDVKThvruTy%NFj@ZPUzy!cO^6d01JspfP&sfxMgI$_>gQ@03#SiA zemJt}wi%1eVCFR@Omp@zPamv`O39~_)CFPvcmVxu(Gb8Aq-mf`(EwkR4(1eL;G7x; z#QEw%FPv*dD-b!Q5RcAVRWqsL9lMU$Ze&OPnC|K<%&4@oQKDm{cgZUVA;^~X!@do& z)}s=4H4U&9@{Wc_Azv)YYrYjj!`+|pzVtQHXf8il2n8WG%>Ht&ipR`^oele#NH zi}OXYv)Lo>f13c2BvnHH_GtxXM4hq3+18E8>w((vl!?b!|E`h9c|NNJx?E0_dFtU3 z2DKkA7)IgVTCdg;7`E&W{E+6BwfV@sGXl|mDpMqpKrwPF&y3CJ-Hc!U%W#NjcUah& zNUwdmo!9@63B+lCSJFa=Mw9lc|3eSK{gs3V@C}*rZ@DR)Xd?@LZC_pCJrv~(J)D;&c~PyI;Pebh=Tx> z`ZS$lCM0ZuZi=|%PsRf7pPX?I7TrxOi0Rjk(54kV{+Sd>>&#^^%g97zZAm3=!Hv@gQA0p3VRIXSwy0wQrT`HIkglm6W!}U-58tusK zg_iLr`Y>KNXw5tF{!Y$J$^&*PPDiCEKaRa=;ns)&9|J}zlmAXg#K%*YnucoRQ%f@M znUh>bMwV6Sedr>lK6K4uc!HxP1dMVuCZi^j&~c{D2KEWI?iCN{V|4;fLR!)H8=OQfrQIbs-B+X8VTE~4 z<6NMieBY0?GI-_d^Oi%abGk=7uE2tl2Z`wlx;p}6Z9Txg04T?h54Hio(~L5t(UKRl z2MF|fEI=Q-#Vd(UfN81QNxJ^#1B>~)I0tOw3m3nl3it|MAHSUG~5uSX9*b{mKZHid}YrCij(LG zMFAId%j4fVqj(z58LSH)t7l_(Exaq^-(-U}{Lk6?G$0eytH=6KEX&tPQ%g08R-@3E zA$$HJcx&$LA>igNHyF`?Re#DVARN8x%q!|=B$?|7l>$N;)0mybcFFky)1)1`Y6E-g|@KO~_3J(3P&v#oi~sE4NV^i_)c zciU&cN)Ronn26j{%cixPYr2$|<6qdBzSO!nAZ#ViSuSW3*ooHFroWkA28^VhfHpT2 zdiU8fffq}}fqXg%pHdM$&IsYaj)3yN9GLntu&{oM?5XI-Gm+n-58TPc?bKQy?zP)` zt~O#ljq?IlR#Tnmc9t=VmEn<7NxqYAEgKa^{Dm@+cH{eR3GMX|1Ft?XlhVc*{d`*udXi_~q*He&ai1#2SIZWQ!dCsfLW6a@ zAx{{U&x!}y;j9f;yl2zP`Hy9jhsDGLRm?}Ei&lGGlXw<^rT|{KJmte+j1f`+E$Nr{ z;y>mf6I{_1*2-u*Ch=+1>PIJ9iPZA@mVi^iyGqg~dWlDl%X;l#^OF0_hP>#|A$S*p zGxyt7P(`QE#=yp*{@<455=orIOoNB6BJ5wKk@&j)r+&d*u@Cy!0=?%2n`O^w-Q)8e zCO&eT?Uz3Onf=-B-OyUgw{LLM!kn(DApNK52tN@4o*$Onh7K`xw@f#wsjYUw9L{Ew z#y4l=iyW#j8Bkpm?@H@D;;!T=N5N-*g*>W^C`NK8*ZT@G*HIynB)D|{M9d?ngZ;~# zEuhQAEDC!+r84qYjZQ;kQ=Iwfg#h$DbLjYNxv4d{(I|B;_aswrveKd8t+)2Y?~JMPGII+N!m$AX690l_BC1*LxtOGoB-Va;7_$3`67EyGrG7^Db%&Vm0oOQzfM zhjsgQay&}}3s??#j~3eOn4FPhb4bC_etosi!?a|;oZ26KQ~mATayC6VZiZmVVNVdt zd&PDc>^iQei*0=X(Rr}M#(_n)*Zia<(`rWY4DNgG_(@8>&(!LiI;^PaE&mj%^(B@`)$%`!(fVv+Ni~L67n%~B?w=Cm z2(4o8rI|*W0#19hG*%{Gu?uAMJNh+(uT$)H^NL^(2%92NL>yA8#DNZlX2{FW8R%Q2eP4kxzbcW%A@i&6xV#pp(vzPmHOx)xw zv@7+Vul{i7)F@10O3P_o07c>$tE#MGYAko*TjtLEyCSSkk|Rma%xCs*xm#33(2e`R zn5Zgo{dn9UME)4}QZ0M;&=aS-I&u!4Er%JK$!>lw>6|_WH~9=hSAt@$?5VXoxUbFb z+xoA)P}!F}>deZIoe9T6>|Q#-ok}SU_pi43BXR0)cerW7Ol6H`6`#m00>xI|BAJJ! zZfGai(3UcP5-D%H^Y^;v_1+mTJ_pruR?IEE-$eM{mAnG}2Q4Hs^Z&pK@g8+l@E&!C zw@hQa;91#`)!6MwfnK`SR$)zMqF5mvTDyV+rmf*x{#Umeztpa^*?dM5)bMXpGcH&< z@gwENch1@rG4sa_`nJIX=}(jy&0g#oWB}~|xG}%Gj20$inAD-&WHxG_D1D3Zu`aWuCL7>6mmb}W09iB*DyLj1( zGy}SD;LTR&S4Js0uN_t}vZ?#sTA=HBf50SZZu~uC zRLaX+)h{VMp*Ew-69v2U66RUk^)!XC=UUTP`!P?XuxIM24)*IP(f$u0^TM3a4%!)g zuu(q`eeBbReS0D1B`BXX!WJN%1CMXZx!W^=Ew6hW2^q=05|Wl-J1glj5IXaw#O|*! zr~*P7BbJJ!E>*Wy)uy zhMKKia4O67>9sO3#?d{A7sG2&a}Py(RaZ+=Ca?E%tK5@;e_CjI(UqVb+2yLuKxS_% zcFvai!B$@{y2blncRHi5>K8V-tX_aLw5aUi!kJhbnyKaesoM`67jY_SJy8sv+=i%KXRIINnR{^i# zg@MahpD3M`L=Bz+FIIKSU+*HnhSd6!T`Uen$@)nU!8jOESBY6=a>xY;$3AibuW<<9A_Qb?ci2b2v;nNUo<5${LeZWC1Waiw|hk1}Ma#;88s8ddSa zJpK+Hq)?IeFBod3i#|b3o-k243M%8qol7_El1+zhJ$tJ7WXkr(*L`r!db_llpfXd? zpAlkBh8a&>#Du#jZr^1X;}k(aSLkT=XmIwyf_}z~v*TYRPtHo_M}T~kG&4gdZjCi+ z=|$gy;PO6@2!EOWT*vF^Dl{>|=83r}`EATRXAhI|?6Mtz!pJVSbI8KH{S!xHb(YTf zZA*C$1m_+ANuu=83cPxSz9&oj)9F?v!u!B07V$*$#i}d$qzM~c8duQ}4SajBhDAxB zyhhx+YQ>HnMxI-Z%phK|JV4~R4qoW4XYeo#8aPZu4Jc8@mB=esbVsHT?%6%g6c5jd zB#2h<+X9La{XI?@11DmW726YC^jOsoqTnGxJ8%l%Ca6a7(cpCRB>yT7x2d)?NkWND z$!$)DQh#1`H3q43qCB5=L`^Vpj^lJ+cdav0+ff~@32qHh37<5;h_~@56FR)}+}v$SJEc?l3h!Vp ztRv@3DUgW<26)Y#0MNyfJ1c#3;yz%p`~b5H|{0t$1Y*hj;9s#pC`|Fu;aLnzRHHr z9<3CnlD196Wcl=-Xpu7(Js5;dh_ZHDVS6J@-(;8aqa>e2gNeM@@bV>iMe^xjZ%&|j zw|MuUyb9wp5O;n3{{XD2e||=1go!llSB6A2cxD}B<^H-P(@Va+e#s5<2Q!Z_U|7&lWzypaSt4689QY zw}_OZT+tSF4^&9?qR0n(m{bn|{s-Wv#TRq5lO!EXf>cD2^>vn5ZH;Z95ia+kv1u!_96%wM4N! z0%SZ;;jDiuWyL!$<-9!iD%gUV%`Ix#k$AENwaWC4mUl|L{lcHs^A{7Klsprj| zNIi1#tZ>M$oOq*EEOA5guqH53;hLGtj?h96v0GcRWVDQ+X0sS-UKhkuVy=fvu)_5T z+)xrkEVOnK@Z#-SQ2kzF9Ie%v4;Zj7GEo==THVFSr>kb5y+0^H@!(YFSMDOB@@6}` zl`TAjc7zk@cfbr95TPP-UrIrI>R;JtJyCI2b6+&9y=gx?ETVp0 z$!yj2ISQ0wmr*%BRSTP5`(+`lups_M$qBrmlYf{yqe~ul;v(XSUA}3<7IeC;6yz1o z`Q|d3E%Ij82aG4SIy`7vfVN9C-oj_3U>2}dRzAU;SU>dKM*3N@24KM8$+fXoFN*ty zZES{fd{h@I#6dpQZ3%JoE6ep9Iou;2U;g2#l3k8%~MfeGV0>g^Ru5-;0Alya$oIwqc4cg^fQT{48*XY z^c{bb^^A&oW3_qOsPMMJ#tZ`e)4Uk1@eeiiE4DxrGN)1a_gSmB{{>fHor=6WJ671i zfQ4FCI|TavzQHR~Ng0i;}?9X(S6pM0;ByhYGAJ3I5E8Tuc7J#NeEjKcwyH67Cv`SsecKs{25m&efJaFu*y zcCRTIK@LLyl|PfYRTAC6jMc&ZD={$dFKd^FvGo=}A21uZ{z|r=+ z(Mt;ikF8z4bn&siwFEpn^t>}OUwLV*f#jJuYj7;LzsDLz08VAH#pF} zeVrvYN?P-SipXW$dGL>18V~8yuehkHEYDIK?2_X{gn1%h3%abO1anN5R2R*)(z^fg z>E;Hv@90fP9-Nxgnx~pZ^G2$y24rS$Uf-v1mZeu#Qu({%k=#F<7FaK->wrXjnVG0U zOY@=}XOG&5f^PeRrPF{i=nc8WF0_SFW9+=>Rqek?FLrhsR&*ZrG&^sWV4Y6K{sLVa zHO>DxXkWw|>}7tK{E#^usH!soQQMkDOAjLVB9=eCP8LGSVe~V!ufn}(acM&Il~D&c z@x=-T>!GmBjVRf57538j1M>a6Or-R{fjnKelXw#{4eGSd|69u0qp$9|&tp2JwE6fr zTELZJ__!TJ&aN{`&elZh%0sID?x>7wqFF3TuTM4af;5avG-0W8JV{UFj7#!O_|@dQ z?K>B+G{p42<|lzMAKNoP=gU*MPu9sZ?N(3pvIeqaLq3DZF*q>>e0@k!gsni6%ZB!O zE@e0MRm9HXFM{}z!qz0Lv=v=?0$dO5y`2cjoSvvnC^bH0b|gHo2PE>OiCF%`7uAH7 zrB;%_pYGliU0DuTHs6s$lr9xcF>ee`;W*swqHOxnA26k(`Jv^AEBPO(}K zw#KMYEsZlwY&9n$eP(xA!I6Gby#r3rV0>MzNBf!yZu$1ij}i_e${G!QWokO*9H=-q z`H(&wH%vBGB`}XI6&)cwfmmP3KHnaGU19ECo@~D|vgrJ*d1EsBa?#rI2geNqErrz9 z#fG@=!Wq&*S37>^{hL@lL4|I(c0m=~O$Yj1W(#TQDlFx1iKx`4o**u|Xog2bs|reL(Zx z#4MT{v2Rs-Y8ZU$%2)D&Pw)Oi>^DqLtH<-o+vzQ$J=8cOh5`GhA*Eyn^#{aUsB?v| z8J~}@I>wJFm>ltd$j5WzO+Vm6nWRdi0z)N^D}^{9#}Icf1b3f7Ym+})xGu%& zWh>2;HM41_$Fet#vO!>bHE2Ivv;E%l2;CNo&=NlmI+b4S8t7UmD3$2=N#=<|md9=8 zuy-ecX|A@v@iP<58*6Xg`%{8SpB zwan)_;La9m>GlEv`VNNhhCvrK+RF&q31-Z;@*lTv>5z(EM&ydaQwt zXA@-`8?UBDlQFJXdujirt=H4-o;;gsYW=?Ipnui1l*;+J_t}mJr1sZ6Wf|Lks;lls z#9$_&G$b>A&w5&*?Quer|EK7dr5QirdFig{mS_2s8(71voKEHm21rruEjohWr&n)4 z^?v+G>@&=dNa?WdL}SQ#lO;u~u4+2>$0b7`nG6hrTD)MsfO;Lz59$~k$+fP5TgNbdYI++?FTF#@-LVck6*Xw8; zp0`T9pwg*H-NL+&)s*Pz(9X!)A-t!z*WGem$nLm|;o?E$K0?sGrTDweYkUXdjxJf4 zitwQR2PX_Wyv_Lpt>cnnMelt{I;B@0N*b3B4O7;|fvLxa$SNZ6YKEwSy9l=Pc50R2 z>s5vy5sS`jtXD#6=YbTvY@RetGXaSC-pa@RcH5KnYkHDVQ;)Nf%sH*TF??7LZk9(3 zn~z4kk_U*M{w}6XctBo-^TZM$h|ZexOOQl9*^tv}$ZnGsU+b@v=2wdRNq6(}wvlP- zl+3DEz!)T|-GVD~x|}?p@Ub zE>f;giDysC^7U}hhmyhCi;u6a8r4erQ*iPTk;2{0;&BEN0lIW#hScaj4cf;^&NS@E zrIs0z?|7LV&q7pck>5lXB*B~;x^5=!t%nVp{}i3fGcV#Q)MocxphDCC)^aAT9hpY_ z#7TmIc#mE@d{#Q0h&%KypzA1Ers-)kzF@fyEo7q-WK+|v8hAY&>;tV98C=4-_ ztY)#lD;O=17#T^s9VUd{(EL|uSGHMK=vI&ny>gvgw{`WdZ?PlQRbk9A)C+I0d?U*R zwvsTv$_r>DAg?B6^P6+W^nbLfg@+HduObsXKp7dwP37d!7&n1%ucfR2SP|xF0V}G) zsPs8Ia|qn_waj~-5)J~kh>b~y;OAdLAlm#mVo(7}PxiTh`+!=$6a8Y%epXr3Ospx4 zQS=jx@B5DYC>Il-eFIZA62&TnF}8U#`0fXyS?AO1&?m^D>zjgFTE;gUoDT`jZz<_k zjgYyBGH3UA$_)1FF26UgbTD(&Re!JABb;EuLNhzPB@9~9Cbii9X|l(&38BY$o2fG3 zrHOuGX&q`G*2Fu>I64PVP72MnmMRDq8gKWom0~ZQD-?@t7S_2N3AjAS&1v*9bd543 z5NVB&gKqF_e$dVJ8PPdwvKo5;qB8%ltRQ!JO@tnNWc*_?Z(+70M$tG>0uUdavV@jc zgI<@^-xqlPa57!h@vV5lDG`?9Ho!OB>~}8jSDg#=$;Qh48e-QtU@rhgI*g4u&hG|u z(Aa?vHdCNFn+=>ncha|vI!Zj;90X!>sBDa-58pfxa!tt+x8xL$AkBHRH&pYDTJ~y7 zLi9lt!e1@8?V&fv8b|gjl$Wl;ZiwGEH<@#|Ct=nki6Ny+HA9n#jTi_l!grXZzvl^} z?gAacLKwJg$Gv9HJ8Wc3BvpuYk7qg|S$#M*dF5m}U5AS<4S-{Qvq!A~cBTEC4E6c* zBw3PrgXQ?)j}$J-K3S?#adXSRuQL8c!FBmpK^Wi%hKmHhpZ1S8UFcsYYYk+CoYh)-v4(7c zA|`$#j93?3jj9GdpYzux2e#)hjr8cfm9cj;BnatUNh`YWHZPbOc`pS-2Pva2{BBhN zVsw{*CHmr>EYpz;$o88hrSB~Dj zn&z%19-hT^MqNP}?jF%HkqFEEGF>Lj$5-tKLCbPXakmQHV?fEJJ@lD0Ht>y#<_D0+ z4KM)#BZ8i0XUH&cSBOpQU63_g>aG%x7w^Q7yibt?xYm1aSdZeEdTf+#h-^*(vSoGa zBQ!rHpnRm1omG;wFD}&+w3Ps8`;nOBftP>JkP6R#aqN3FR$RVM1Z|x#} z8TA}-L-U18usOwLbjY86b)M;L7hr>H#xcZq*N01fRE)}K_Vv>lHwqjCB0xJq+1X4h z547!r!b*8fEg7F4goqKO2%=OruG+1dPvtfW^G^Q*7+PYK$bC}(_+5RFUtO~DDy$kj{x^9v31!#I&7R=U7~T5hd=840 zXawSyEbF~US0NRUMtI63CFx+*TQEH5LAN$EiTDdyu`LifF!ae^WWbK$@QST_cM%r6 zo>8325QY&QA3FO`tSL7gb zU?FLzw*~l%|w#SWn3ozTTwBExe z0Y0p;N;py+Vr^R|Uf8|N+oKcr^$YI*>@iV`98PRyE{P0g8b~>#@vCLK7?oU0n$@oNz$_{q(t0BICvyX*=ezsDqYOFo4Lk|&=PtW< zYnDMm%g^OYMr39(bBpOnm+6s|d{8U9X+|>$D4!t{oY<(}9Rr zmX?t$1KZkhaaiwn8kRk)AtaBf5)1kP(VHHtT=7>6MgvMZnuJ=u_*$3%6YKvZ^Sb)k zz_g?$l?nW^-8e7c#<N$m0~lug4iJ4Gx6V4s+I6 zZfaFxe%9Sf*oH9J8B@;0NXmYtbNU|L-h@qa(dC`nY1;KPGab#PULPG|sPv92&))o_+0I6YZ|AA9ha$UQ z9wc_7bOJPKOtOTJA@e-^G5W~`-W$jI!%Ni#{2tRs0sM^T$g zy7Z7|GT87nD9!%>-c8UST#amZdp%wbyHZ!O2%Ydtlt#R8*H07I^UspsX@@Q|y9R0R zN4)nT&oxlGy}0CglmNB#+`0=AdwmNKR(3I7nJ>^+)>x?N#jgUjckzA+{j_cmYHp}X z{KN^SvA1x9ht*#p<@*{*#;KPW$+NVV*g0Wdsqo=WdiS`#!1aj!J+%54ZngBRrDKN5*8BL?6PDqep^U4(9udo8a}CaQ zaXS~`(je)i(RN3t@TUbC41e_w$$rTneU$IFGio-jgDP-y()VD0`w&?S${RIiu;-Qo zrYP(3O$Tzd97X0^YD9}xjm^VdU7n@!F@f34FkGFXs)0zDbtA*Vo$g7`W2g zRV6pJD#y{--2F@1kgrN{;0ww5cAg|RX8@SqOQ3VfdG!JjCH~HO(m*jFw^CcfP8r&~ zgrhZ4FGL+0aP=9;nwSeC8|?C37rE}V<`Hfd1sI)oNuSTQ-wT)k^sudy-Dn$?-2Q&ESp=uPkqTv|K6rU!@fKx8_x#jhjBuJh`ai87*h zr8|veNmkRn{wF}VaJLfQl_+Mv;PA5{AU&Jy=U({tn6ve^vb*bOpH9~e4^ePtuj^Ki zV9}HS)3PF|aR0LA`V}ww%=f}UKQFTDvd~Fly8pm)Kd6xq%m%z4P1qB>5s$wdBnid+ zoOFvQrs>Roli9=chRi25-nXNNZZ02r%x|EcewXK7B7!!t7kouPG%+Bvi*NWF*S*q)O?H{ z(B5%CEL~E({S#Gthra|}>t=cB{DVs^&DhQkQs~U)8&s`9B^PL`mMFwC%?)~d3Cb$U zO0Pr$Ia#JWZU-5QKlSZmi|}e>Osive>EmuWGt08|EjtU|JYJ*DUg4z0ldI>{r|^xg zS=Y^Z>(&}7*}2s|FMC`>{Y12osK@wLJBz*c>n|>)>*jO!^HC#WUOFe=mCS0-gNL58 zujbSHnOhuEWYMw#Dwayh(6fMfA};YptO<(a4yR>0aa&Q|j}-TPmzOllppbORxPHez zh*eEEgKHNxo2s?dj$r3`AqCw35eTWMk~)lhmK(?F_C8%NxqbAh55?>BgpblPyM133 zYO$9}r|g^w7Ei>qJ3Pv@0+qa{rKv8E&d7@sbm>fgh#P4@&Du(RO(}e=nZ7|jxf4`F zW3yM_@PNPq@l)q1$T;V$!E8T!0#(U`(j~pu6l)Hsmera*5)-pi-aQ4rBTE~tav^Ak z|61Nji{2pC8)Zp>g?ErPdBF2r&5GrW4A-dzhf9T6QJ8<$6z*?PT3*=fwmIrm6d?{) z`3Z##nj_HCqzh~I+1)IK4^8NxcR2+b-GNa;2t+UwKs7qf1Vzf{a>E|M0xVpcZ$yTi^Hq@#!KeLf9;BiVo1Qe`CoBXhZF zbmDi}?sTzfLnk*m5KM6Z-giUnTY$Od$JesVVvHoT5mwD0;>dIDO($Sr&=qORb3f%b z9-z~dZu@`?`(S&Zm!qi2Mt*q@xJfLX6z{76wtPRfr1&%iiwUXb6fG4-0PB!(U1RFv zFL-$4CxPckCvUSmz5S3c9K`7V(2uWuHqFJhvnu`hWPNd0t zj7fZo`Wl1?nEuz1b=Hz4mZxk0^#{|M-ld`F5-`>MY_+<>6OOCVw5Q^NS&ZV+9GB|_ z9U!H?d5FF=wNdFNS3Jg2s=s$1(FK$`E!XXV>r~dhtFfw3O^k+B2txAz2Y4%MEV_Ck z5#lepoG@7Y8^)#gD3xJDKqa@sW*G(Nb|RJ+4kXXF!_hv0vcBsybsB z;(KcOixb^$;`o;X{{yVwjIVgc`z$@fvn!P--akAD-8{_~UuWZ&c*4nUKhTlo2g-%r z+Tmg2=t&idi#=i9^|(A|>;(mnu)Y~uK3GF{t@|cyEKe|{n`{BPpjL8mPH6eK)etH% z{a`PA7R23MkW#n5dYwTd&D|Md6~LNJ z1Kw16rhB11`6{{-e?szuq6!&=I3omQrE6leI+ixACX~T_mNZ5X3+nPzdQ)w_i2?r5 z&DJT%cRL&0aL3!zbAqv{O5FArLDcZdgA1aS3J@yI)|Ih8>y!ii=CsM-GO|c!IjS&w$w&Gq82FZVZa3(ff_A1~9`zC7~ z7K)~uFRzY2DgoP2N+Jur;O`A&jSkrBwmkc0g%8p~;*S$Dz?aTvDVnIxJCPZ<{N$v8 zHd}(`)tx&Kl4}A!sORx@LEo83Mjlj-*W&cc`)fUzy*Q|-lc%3n9^0<%yT#%AhV%ZN z+*65_)?(hCl?hCtFZUI4479uw=hv55qt^P{J#R)x8cf@>me?Mfu?9v)AHlbT8kvFt zLhvrUWv|jcRt7Q8+6-+v=ejS1)t4*bL(i8alqaLx#uVqd^;tYxH(_1c zD*0Z>+lO1@+Fww<7zPgZ_11dr7h}OB{ftlW#BN1PH@X3o5wjLsuAnw;ZpCKAs3V<- ztn(?ryjzOD6NpxwcYxV(#qUxp%d_neM<%4WL!To*A@XmcgVc{>*-mta?Gd-=OTp`l z0#Z$!t7E{y3xs9MA3y)IxAzfov{^sXLaLgybFea}=OArAdZ?bftief58wOCMF!q9) z{=;Lu+tt9Oc9sO^Oagq6}Ts z(Vpq1&#s!hxW165H0S}BzF8_}v#x29;UKHxPme6GB@#<)cDXk@d|N+eeQ`MOkE%lm zYk|peE*#grZFl8?D8D~?b&{W{7{m?4x%sAk%DP>H*)4UPfrO?sZxG8jl(G%Ab^BI* zEP5zUMM_TLqsrZDKF@8${`lbrRh3(#;>_R+TByzd2*x`Gh|@PqGboL#5~#W<-0Bd@ zJf@hw)4Lo{>yEBxzn`|^LROdvxCQtMOzDSmO57W_(!|&AjQ9xx%M(WTB^okuHuLN= zI}bMxz_m8>lcE%!ybggwO5bYY@Ip`i^u#gWtA}NhLFB*2QCq&l{WfChy(*bwbm-<- z8pzSDtEy#WWtWyg=<&-2*V4HGKO6%*qn5hW8#34q@DLWc@1ibfbeXcHWa_-PteJOS zbdvQSS?CX0AsUROx#OZ5u6{u%hD^oiGx!>`4}!gWWD96U{2SY$3*1Ah1a9?l1-gVG z$LZvP20hbPL-(@Tw^=rP%1e`GJ~8eC{$az{J(C2|JDPYZC=Nyef+$pno%y2B%KC~z zKW??}ePCm79h=_b(Dh2!=Yf+hN8>S;N>^9=XHQ%HbSM9lyNrx6Fofxm-~SW8TQoPs z((j=J*dvu=h~-deU6!NGie^?@3RWaJpjcsvjObQ9kjcG0g6*jh$GYacNo`26=R zKAy>oI?73Wrn3?_*&|5hbHKpmm5Oe50)FYVyCj*s&O(N? zv#37=mB5-AYEr5i?2i5!70}2?-0e64eYvb&x-$;?dHo&S%Vm#Nc;@C#U0c~_Yi@$eeY0uN+s6)V7m%BnvOA;jA=<9KJNis|_U4nIVF zk=|$KWD-|T_BRli-dcV*A?e`5oqe#5AtOCTF4`bwgiPcA1!nK#Tl=F%n5F%aH}mcmNAsbfbZq^VbPEO(ip6F+diGHwobGge zLG&u&-JcogiDr4P;9sNUzI5C*R__d95+Kv}<)Gp@n0axQ+~UKjcO_vzi;6OBMwF~M zIxOsGf5mCXw|2I-(VG#Q{M5zn7|@8V>1!<*-0!|t-&rP}?X1|`?A<~B`IynF+^S@w zap`ijztw42_(7ZEb;Q^nu^ZzUjqgZ^T|<(^Hawr@M6XeqE0K%KPv{<}@-*A-jveZb z%rj!*cb`8o9lD?Ma1+Cp_&pX)N_yd@Att|X%}{Y%;?q?&)#S4gH1&Jk)FSlY+{q&(B4jTEs=(aRta@%MvVu$;bRc(%`9;LxV(`U9;^>lm=V%=O_ z-!K$)BsYT);lQ{AJfL(L8OA`hYi4!M#EHj%TeviIP`-x30>v}O#j}~-j}}$Kpbd*) z?Y?EKctcMsibZmOqU~V|+5q-w7qFGZv1Kawu=-x7zlm+WxA2ciJ& zm5`Ls-2`ZBN{7Tw7i=@vgjaIYOH|rQCU7?6QbVid@dB-4zHIk#wJwSKmE{rC)ftaN za{=bF<{{fo8FGS#!iuR$l9)!7^v8D=-@g*7umu}eN7#Y5(eVtVRuFJU#93%%EaP}m zR2q)!iegSN2#$T|g=S#5LHyWMc8C2-KeVbaANLM4p{Q5 z$ua4z%IU%g z6wV@NXrC35+l&M>%j#jszLMpvt%@~w9=2s0Fboo_tqXu(mpwobRXgxvcCVG!Y!IQY zDzaJtXGEq)3L(=br)qXmNsh!VmGm;GxEw_NK_Ik+f#tchtFcaKa&6mbyXRZB0_nR~ z%Nmt>P5Fu89B;%!WHxfVmzd8JhR*ISJ5UCZmf8;{>~0#=kK{9y zQqw-?oQ+wE$y8GTgwnh&Qo5Fu=US*P!rv8PZ}Abe6Ah-=cez-2A&XtgCWoq9u;7>ywxz(k z#8gM*hzo{b-o`&)J^;#W2|>sGjgwLvd6A`u3!-bIvAT6kck)|;+u*EK5>EV9lRmD(kQ zXcg55W|wk@c&>dy-~&S&9bY7Kuw+FJx`@LrFrMMUM6p?wD(Q%*xdv3P@$oJwKY|cy zUBX(4bLv~e#937q&~0QMk1R8u*EjSbz-h#RtfczmgA73z+}g(W%8GiT30TEq^%p?R z!^wz4jv?pw8Y+8^g|e;^)%TW611UmDMGQJ%!tJl(RT7Po)g1;N#-ggYvJ~BJux%9h zJx5AeroGHvm!*Tpu}sm5ZFap}ax$zq$krYGEC>d+0Yathzy;T1cQ&m{f!XFU zOIFg>7cf7&r-+gJ0aCe5lF?fh(MKCXw(lU+Szekkb|iJZ1z?WVcxFcyzeF9bH_*OB zFI`hwc{p%Xe!X;qK#UlX|y*} zbhw%dp|t>N0)C36qryZi_Ely*rG~@BVG7gA?ukUD1*it-y<9~aH@8835p+&&xuOgjKZi|$2aUx2qVg@e{4S4#Q)DW>@AO8R>aYO}L4p*&V&DZ1ZDHVJ%RJCRB^|Lqtd6Vq0_JB1?Hy$&K$A8fFt<$x%FY{e z((YQsK73p1rV_I@dCS7NDjwzb9FU+vmG&h@x zLOg*9OA#^#eA5FM{GgyqEZfvV}%KK}(ve%t(iil#E#0x(hA_3jN17uqT! z%8H$rV>$4!2dt{SO0dHP3LVgAGUpwKHjF47aQ4c-Z7IbpYet1qr&v24%a|i*^V)Jm zSVRhl3V7osQ53-O1wO51zyOWMU1CL>mt>&Io3C<(5|f@%RB#GMEY+Z2F)mn&-e&E! zU&K33(fES9C<-}=drvcn(5GHycIcy>l766gfPSKi3TxhT8soP=xH8rOQj(;*gkgz= z7aW}M_$5vt`N^+{(|8GTx<#p!vs6k3`Rr0$=c@Ao>CxaNU?J>>QzN(odBkmk%5}$x zd=dKCu0pItu|Y$mRu3CelW7!l@iW#fwrgQ@@3@5}bs=9$$CeRi2Vp4bS2ws*X>@Mo^VxBnq2FZL z*Qv~F$DJbtb}pR1@h2`Bm5ZmuUDsJH7hXmYa@H7!gWN(swhQFRf@v4k;$5#?L2ZT+ zcx|w=kdC!d_mu9j6fP0Uf9@*N%gs@%N^hYETM)duOPy9|=gj7bMR4ORfF)ECz~Yr~ zhS~xH;A?^k(MKY23Gv=5jN*bi4c?H4C~YoV?Pd(5zrxqRD53|_Yg6%t_k zOT~dy2$&VXW7;z|!BCa3}@x?&=|G%bzlp@CYf9 zLZj#-6X1V~m@L|?Sqr|XC-aU;0?@xq3&aB7EXTVzKo+McC_Dgp*n@B%mxe;%81nxB z)Yhc}arGZ%yhPST`3}(j^rl|GMBM{TSt*6DBJx>euRIj6HWss z$oJ?<7nX~B0y8BN`1S_wRW{Oq1Bx^j}gEU zy?7Wrx5O?ef?*T@$%mR2UoM$cq<)`S2hVE2ONt?Pbx^{6p(T(7bnGb{XqT^((!)(e zUetk&DeaA=1kBcaBdd`zeu-y0#^vi?)`I+nVb1)I`$2wmXA)!o0QU-Ire@jj!l}5s z8cmlP4b&?PVBoJ)qBq)I_Zwoh8Bveo{{S@y@o<=IJ(DKJ%=w45H>dkF;8oleT2_0BVuMT=rd&HzeGDxuO&cyT$Zv^Iwf<4$kPv&`wFYfP__!-M z7nKr&7PPjPQkn^~p&}wg>&pf;MA-eL)$i(Yo4^_Eil}1aMBPBnbmE?9s{mfrGt(P{(S)2V z*ds^ZmM6nm<}=a;?|sM3r(H!Vz?r0IS*1`A2wb7aFuJu20b4Z=PRr_{VsL8N5n4^{ z@NQKCxXdq=!U&_%RD{J)p|_AG?Eo5n;7GGpY5hu+FUk%I^|ce!P@?g73qy#uqhm(7zMx%9!|BcF zYTLMkXpbo|rvCuhT@wMCD7Ol>c%d&nM7KEGSffLr*K6t{<59X|Y3UG{G-j znXA;b0reTO{{Rd4scrP=u4fNtNB-{P(W#uZ%uH*qyeo2Q1D!_LPK{xt1L3se-9AMqRXqm z`IQ3RR&c90&T?Ecv|1U#c!N+FGy$^rnM_mFcW$Lnx;-5bE`rNkawb8=3aP=8h+3_oEvV0{(3L!qx5Q?kj zs1JhxXAq5rr?+igh%nho0hQZmr-tEMMdMql*?<*Z?&Au#T&aiwqiA^1uyQ4rxQ;L) z&^29SM>v%4ud1#We_9S+B3osJOu`!z5OEsQf5PFo22Jhlmyza}a=Kw^e~?uLhAQ5w zmTe?1Qh_o3t-1U#gGH6^hq$FV!P0yBW@Z*CMD(yz)NgLPEJ3X2;2prT%r$93@uL_E ze~?hsxWquK_I16)baLd_0T$ME0=C%L&L&b+-EP&s;OWkvxm<-i=JqfnWw;EggpCmC zK;{g}uwG@a4HY(TihrO1DqYi#ayp7gzymlmx1%ZrGb?mvlpr zSiyCsusa5<;@HnP(F2*1+fe5;#VEGj{d~(Zs?ZU!rjY<^mZ8_U_&dJIcT&1T8@baoqhh0+*$L9XIadf3 z>pb<&_&6d3B;-kl1KvU9cX4V3;2&%k+`mM5{U@?(a~tQ7e3FDwi(LIez{GGiQyRrg zIh>e{mlwFVJVgAk{1A+P1^!3iVOE&HMm;wV&w?qkXAK(i+&;b88DYpJ#NH-aflz|M ze@ejsYrg;v11)hK>`kN>P4;5K^qDLrJ{Yd<_^BZ{S-$b%_x|y(nTX+BHxp@@}vV|Oz4Df@QF7ebFgQx^GlnVu$fstPWsy{tEUOZ$X_S=}xj=W&1-4znlA?V9LD;&0 z2(((9WHHMqWm<-w^Ab5$Diw22q8p+O1o0G@JrkyrwbteBt_YTq+^MEa$QnJA2sKm` z6s(ssAQwZ4PkFas_W`<6vpHS@5%i8&0o#TM{W`GsUj+0`3^m>4wz99>OI#kk=K6%% zSZ*rIh3bm_*5m!AJ}q$pKvg=?frn2qyjX5it-`CUnTsz@oT+Us2U~ugC3Y&xp%4}- zECOB&V=;ggj~T5t!K3TpgAGe3zZx;S$!Y_dE}6I3ufa1cR@3CcwkneGznno1tAe{r zYO}~f&5xVU=_nTfqe?vS4Y1kOOWC9R${A>ESnmec|gN*8~P*Wyv z0C0d(8X-!3u#6y099yH*0O%1z>4&%ueYm$Pi&C&EZk}E)7H1zFJM|hkk}sc#@oW$; zZNtk7+VrFPh``r6FU&!iNZPX?g*jN&SQ6NsIWSp9sn|nh@7BqAC=$U98`&3qkYe2nwNUDD|ymCE7IMl^#SSuN%tXBMFx>RiFXB@RWP} zf~KqUMG>GOG^hjDZk4Ad&^T#<7mh`35lZu$rSSL(HOZ#i2 zX-KN+!Wa831h6iU@NF?@7iJG4eENnM#%mU=^j@-!I6VhNceF+0Aq_xon${!4 zLup=Dhs-S$6bouug1O;uV9IVIXHE9Vp=^RJay z8F+ODRj<}|VH8n8Z^+WFgcTmO>aZY%)W?0};#5aYs&@ibORA zrPMoUK9AyC0dbu`)5d})1$S?lsCAmVU6P{2H5Mb76ON{9b#WGD~Lh`XL6`m@dhz?mtTd1AqiiBggr}# z1Q3FfwZ*ksHDaj^!C_Uq5+y+QU{w&Sa;{q2fRyR{m5U>=)UEHzvJ8i3-L$C~;#_r_rK9y`W!;kM2gi z=JLh1nArqUi*8Ey!^zUXy$dBV6zU+Ww}I#FJ`sX(Pc zErY`Qhud|3;J`Ff}}GayfzCkE1OkQgyg!D=(Y+e2U{2g2nFA)3YULT5aWXYKiANky%+r^mR|7N;C2Pc-KHhIpRQ&C4(rt*XnL|>#)HK!7Z1L1UXoLfR6;RIO`Ho)?6ViKPPVnd+=!K+ zal?beL{*R#8`h$-XCPZ**s20X@wLNz0r@X7tq{0J>8Lk4XTcGCt@V0>TNwMoI;H`{ z3QNKIC4r>!M%u&Z+LrI6&(Hl}R`E|F1TY4ny=ca^Sx}YpA3YHQjgQ4}_zg!Dw<`42 z)a^w67G$YY_HiA`M!NPG4BhGOfs*S^+ z!0uAURH$<~e+y6GfI@fp5awJ*>i+=cFZq#(%|#N(DAYJ2ac7PWYF%g5iPrQUE>=BK zqZD$|>Q-eb<+Js~78CreL#+*jzCp>sKBCfa(oYJHF5vw+8! zgF{GCZid5+QHwKcekB|4`*4G@n=2>f#S-MRlX4eA^EI$(&74=qb6ixrQ@qPsm5xT@ z?^Z^~%TC0gDh}8tt>dU@urB=EvZK73Sf+<*c*I2xYD~p zcLHv(?Q?aFFtaH6DyMN9K8XN4(QKqzRBSavZUbjOyhWjcuw!K2mf7|a=Q{DZP`3+i zs#&B^Yrc6In62~p#so&s<{;S?D&O@h>Mk}Q#qMxi&N0^ug=A@ubeV%MQi28Y`kFwr z;?m`A1>z9cru4QjS0xhKXaZ5G2RBedxs|njyt2w&+bi;au{Se7DMI7FB&1YJ!$Yac zV&N~^<)R`WH=Og%h$`D*^B=#EFEpt{V1>n1LKG=JpWMu)0+=o@jDbYWXdcF7hWS#( zKoF(DQ=4nVx|+80Mc>4+B@)!PeX@cne*lB!Pa6D1CPCoE(ziOT>V zD6DNeg+m7FUt76GW%o^D+-jMXy+aiOh}5^lxV%^8X&b&_33h*h`47Pc4|3viSo?NE zZdHQ=Q`pMi*(mkUP#*?VfNJ?fu^C;VSOD>UB}>{TJ^UZS;C?w~erNZCwd53ZxapXU z=yVFx!s1RO<+Tj#J(LG6J7u5$01o1*sSzA3h(-=>CXnP6`xk;~e8PzYrboI=uC;@S z1_hiINNl?6RfUyKZuuf$qQ8WdK)gO{dlL@RKo3|nw-WXzb!OGJn2J?I6vV9CaBnM{ zTd3O0`WhY~YOA;MNAY}eR_X*)qkX-%YaEMuc||&gFPOnHC`gBNN`pE0Bn>3h%Tfh! z$#-vI)hT&jttEqJMM9HnjfrzVqKU#9TC3w{0nd9%OX@pC@ceAZcK+qs zw=!OOGwFpXO`ryI{b@nV7745?I&$vZvxTk;aAn`vqOJ`Fe6edmhYB&Uau;*sNO`Aq zw8{f~5(F+pCE~E;A51PtYJc5v#nL06NU;&2l%;?+n73vDevt@E$w9MuAW`zv8{XH7 z5e+~Ir5F~WKG*?wOJz@57dP8tJiEqGm}B2>;Rut3Q2^k)Rh5W5>tB#M4}v@{yvlB^ zC1If1%L>9O1>bXRi-c@tMVdfMFgG6*v!3`889uW-WysOB}~8u}iypM+<|V-i#FK9e^&c z&(!Tv{e(8Nj^%Mr5e5{ZWh={oXf05~Zyk%C=Cc z>2jMf7Vb6RwWD5Qt%1HyV4wb9oMMG-#y5*+=Iz4Eh&)bJ_fP;|Ti4tGD3P?6x5`DCw`4UB9lI^S~B!pFtN z2K^o4#0g-_;1$3@ieBLgNX;hOYFq|gJG&!a4PBq=lR6fdWTQpvLlux z{#6y{P0T_AHE4TmVSeUb%BnP5&of_n-=h(znBiif9b0 z&5T=T!_*$vi*li?sKB9GF8K7KsR z=DP~IRS={_73m_ae3-_=_4kK*`l7E&aDgGA0rZeQ);VOwnC+rIW0E$md30C8=cLl7?4nQ_z~i5`+XlT z$=p8{{vZDUubgb!*n+HYc2>W`;uIOsQn_@mQusyDdsQw!{{VNF3iJ3bEh5lA)XrjL zUMq$9(Bcb8tN}_bUI%Q~+uk5A5vwU#MBWJ9##hn%hX(HDJwbkwP$D$#6q}k`3aIpZ zJk-WZ_65_LL63Ch$5W}xEM1B=_}nE3Z5Iyk7P_YceJxj7vwr1rTdg&l=4@0ASNkS# zS9xW1B~VtYf0imNF6t%WP5Huc{aF%=N{$8UYzsEjJ&d9XfZ$up{l@D}8t~xxcU=6;`{kc%21mEJ$+w;2 zuj7h>ile;|`r(TJ028THr=q2z=0(>%-5|vCw zoT#|=dvEWYgMcu65DSmj1jZ0nw{$9l%Uy4NFSr}q;6Ov@ONe6C>QI^?SIjBnN;U~% zt(MNYznp_Mhk4KQ1!2avz~J1j_r}pmn&bHk`C)Ve%|G;)HS>Z1N@nkQyCY$`Fby6-WuA3g2=Agy~pC}7o$qAgotwBa=nXNV3cS~x>`hyZ0b6LmB zjXM>!rHmUkT2yUHyBBRh^76}jV$(i0B0I^*RMVqvVSi`W{)amwsuVSzY&<_1QS zkp|^GOSUxFrC+>NHCPRRyE(=Q6if>3udK*NVWU7d$Xq*nCak~y8J)+B4jp|+GAilJVB`?@)4p`^zSX38ITA4uW z85*)42be0M{E9k6b!+N#xTqyU4Ow=kkZ5tt6%}snkm4t`YzpE6k0CX<>Kc6tQ#`i* z=^6<_p4$qSoP1M!mVl<7HGpl>?b?=Br57h-(g-rxcMcJV4Qu%_z!>_LmX3KNWYvK8 z2G(U9EWv2ijh7GHX-e#>SW4dA{{S3?r5e%R_j1uxVb0O%gT@^_KQMd3A8Uhu20jws z^&*uBaFI07ciOwS7J>a%O#c8ZGSnh0l^T5(msVS^m54_gBi`M)+rR2zVk2FuP?lCAw*6f!|YG24Ipm?>V zj@!(2Hd_{4+)~YT7dW4_(C{NO@d4-uk{l2zTXbAHsA|wHD9aT`d6leZ`*POGSDD;I z)=ep+&WW#p!^K*8Y&N*LVDVCbtW&_Su1TnyYL>SAn^8+6(gvg3URmDgZt9%JeS+fZ zuh}V1WtDrHv}CmuLN`&R@(&VTZ(1i2om;)i4)!kn-#l(SJYo&e4LW@p%7V#OG zR+ngQav=68ubW~I-9}jg!)g>z9(DtfWsVf&8?4o09^1q%uxKc^U@kGAyft~H0vlqf z%}}%4?VDh?DGC)*%Z4@98i`yha=(pvfT9Iz%W$z=2X`*-R`5uU!Mand5;}i+4bm;4 z>XKecO?gZU{{ZP*FG!a?;*ucggWm3hc+Tjoi0s0tR-6;0V$DdAz zZ!pTSf6HIc*m^*f&@l5d z&EF7zu=f{)3{}^+_Gh$JE;|KX!jlE+P^28kWq?|%UAus~-Xeh2C{#pQDAy9L=6&>? zoqRAmpw-jFh#Wn)EQ{l){sd8~QDU(eg=M{OpUh>&mpg)tzs<+-af?v@01$*>22Ew8S^#mvX0ISm|nX%QS_Y#w4n`>1hwE)Ch7i*l(=l=k= zEdKxoqFBU)6Y26xA#X=py6-@Z+jovOxu*gSVF9bGC5@4lWw{q-8y#F%HctY$cOc~9 zwPNLo-o2|1Bm=eSxl)zDG{;wK=A~|L*kJ`h*JUeIZg*Kiy_?)88(+R6@@;r0IB18Z zj)atMp&mw^gBeHPnCv^sUw56pUAaSpzFIodNT?_7_Cd05Bs}+6J zb**<)$M8s!+);2GShYJ~%A`wBtM^&lMXK&olACc*UHL06f|k|9D^zMNZS!Nq=3jWE z=;Xc#C@+%YL3(%eKR0gT0Qe)>4oHYn91rRR zEXj^GWn4QEQX|s=+pLoI1!7%{Pa*Q215cQ6TX(Z9qOMN^*#|eI=bVl_MTn@H2>hZd@3+Esw8X4{?1E?0FAQ_!;Nj*v&`@AWbenwbMG=zIRM#T$Z3J;bKfQ;QgOZ%Mf0CM)z{Rz%Y3R{BGzrUt93J|3+F zfR<@YU2Z#3U}(+>h(UUBQMjcVqPenGfidb>j983-^Hdi!_f~b`te|_ZZl>v9aG_T- zR6;jpyFFgcm{6QwlyV&;!idh^gd*c3h}i>g+Ijn_JzXV0y)A7^ z!J3NAcLjYN-L!EvB+AdykwJNu)Z+#Au3}C*lor{9TaHRz?M*t>vgQQH6d%pXN?=={ zyzpEnO^L_Pqc39YTmJwD@}#&C{8fG~5R4%H5_Jsx3>Zp~95$`3Z9E^cKmP!J0RI52 zC6lgfoo0v&j`aa3{)}F&0w-e*$s_~R9rRRzMqy8{o;h(>#r~LW!D|ZB&BI=?+q&ls zE6WMoz{ZRheQdtz*z|#=RvlFT0Qda=01v3kgh&iZuvS2eQ3)!(!#EvWGigMtMI&lr z^e#fLBYUl22(wxH|R0n#AreUY3P+@LPOTumDEOeu=mR2H5V z)fx!EC~n@XKZtcIP1L0WSKJy3SX+AuMWS!PMtw!Y81F9$PzY3YQp3bD_|@O#lv$hm)wS0PMjaMTXH0{Wk*L{XJH}r^G zJ|A%@TP{X$qp3@v0(wF$cQ>w^fSqeb&xAj(;-Z?d)l;O`_x3C*0)e|4SxRs3o<=S>Q+>)f~lLkHCUAwEvN`u@Blgh;I8EW-a~f_AF&1x zr~VXwDU{HiJ1?8Mu&Xb=4~e?e_M>-;ESr%Q??d#ta{2z;7(7SvtUGW(+MTEs4vJA1 ztb|N333q(&A$i8Yr&zUl zkcxq#d0?=Sy}Q76&atRs27rQF%YV^ekeo>eQ&P2m5v{j`eHdVv~1d_MJb( zcpAuWGOaqZb<=lIBn^~wYiQ#6mIld~UAzTEjQT}dgAwGp$iV(sk>UoThPf}PS1C1f zj%(aCBy=n^M$N$RtGv}HdxSEupE8R2iSwXs(4-9o>*93XP%}?2-sCUrrm4LfC}5>D z;-g}_XSp+lT9DBtXQeC982y(Cz0iRuJnHVF0WEvROCg~-kbgNJc)?$Ywz`}QXE;0J zDrG!Ji#!Qt1rPN5inEB&&Sl-(TurF1Cp|;iEplG^?DYN#4nL1BIR5~|^bm3y#~%Z? zwnOz%WAIiiCUy9_jsq`Y$|dlC(kBRoB}m(rFEox0E+F;+ajy#S_>HXcYgc*CpoS-Fj+@mo z#u-q(?($Yl2p;YvUE&gT zT?25+z?ZD*;Y!C{xSrt6Vj+HBHs!*h*WB4Em<9r=+B-|&v2&jcZA;z}Nz%i=W~-6gA#Jlh0QjG0oQe=ZqF2e{_TuFjF`^NHs1 zPbH~=;kumrp|_C%C8l3nJ6PZDbQ&$Vg!!a|#Jr1?;B7EyH?8Mg z@!ST-^lX+%il!)8U&}6mZ~DQ^xHDAQzyRD4r{MPJ0>wMjSNLA1920A--qLHy|uD53_=YKv~FKeP!e6BAj$ zd+YmI{{H|uX7&Ye^&50I0zD+X7(=IyU4RJtsA+AlOUOL=U^(l}hKIkrpK&kzFZ`}A z`CA{wvtf1qPYFg;UBCpY0NU1tu@9~{BAE8$xkJhnu7c>Gbp}N6>h`4dzl*c2r<%go zo*P|wfRHDBub3jBXnDKOs8UcPR@iu(b^ib~+5Z6O^uayd@4Ugh5o%T2>hhv=g2Su6 zZXswChg?ep{{Z`ci~KZ}&QVas+D{0+n1W*Miar)0Z@Da30yUncJrL)Z=*HIy3-se? zI%v)Fl52Pc3&INBMm4}FhXscwB>qviHk_)0UM>&8#W1)ECcBRg1pwm>l9qbn{sqogzhYfi6aRw&Ke<{yl9BqKRG)$(wiLfo}ttl>U-BZ_frcbQ;L zBgr^PNbp8ISLRK?O_K@$wNd3AW7|=-H)^>-xY-q2v4g0lzo-VS)4(J6JxlfMqRDVp zob;EA43_k`t)k>Bc!z(({{R@Z?RsKE+O>92u-&juWwdhA@(%d_V~zxN-zL8A-9)4ON7461nY*gd*z3`S&z3@!6uK0v=o7i|&LhuYy&M_=4T2RdrmHX^LG8BYw1sw8d9| z73G}ALPoH(^SZ}EvI3+FtAd81UYp{fxz_J{EU9D8wMuaTckxa{o|klvx_KaM+CEs) za-6QfW%>}zWAqfs!MdvhBlt zzeQBxMiw_?6}^_viAwS65?yVL6)Zr^RbVQ(6_D-dJqD;@;I2TR({pqL`FM~HCItym z(H>@4#4#WUO*JyL7pJLH%?xo?&hC+$OVDkm-2o$NduALbA+fVH;Y<&{V$7SMduXXFN?Si9<8*t02} zuZxPMaDypVe^n&9XwDa|Y`#e7-?y`*g?UCLjpIk2zIZMog08V_=NsjH>!RaEZhlhV zLhD7-t%QMTiVOl3h6?l_$zk%}%DE01!9(?88nD%tfn&9`7v(fg;@;}~GW>=q)Kg4u zDe~PFp^Y5g!#KxWTyL@fnp`I6sa|E_upem_6WjKh*%3*?A5{ZD#Wt$Bik~m@2uo6t z;Te4MPuhwe8eKyAY`I%JhwO-mT{HZ0;&fv>kl&*@g4sc%T(02Y8(y6C0j&^o&01LwonAj_uf$nP9HeaZYWKPFUv=2&mwCZwM52wwjH3Nv2iSFmu- z<%(>j{9{782cGoZZcq~b8MBLG3~B^!uAEISKALjtd9-fYTQ2;9-3*3W^EZoVt~h1X zQd0qQqtJw`AU4>xj;zF~Z7cAJU(*%tX;JeOd*82VGO=nRAX|v%KCNC#7D4AqDd2RZ z@a4i^Tb6~bWsu2?1&TpR(w#-)w?K8ys+Q{OTlbWj$C*`7FFf&5f`G0 zTTy3_+wSJl`4a|TFE{E~R+I`iR_Y4M=jB|oi`$(K8!8HNnRAexO4adZz{+pz;{?6x zgb;Ww*c+x=dbg&#tWZ3$-M99X-Z}-b6*k>&5K*coTpio?&=n|hm&67_gUnT`1Kh8Z zH-P1WUVDHnU8pi927-XcdmH|*DSoq!D~NbX*J?0VhY=PRWJ}K5Q=26uChu(4i^0^m z!YPRIl|BnEW-rgY{`NYMO|r$c*}V-#T@C8E?+Baii$Plz!m0^I6&=1N1S$I*1(^ou ziJ)svzS~s>Y6=$G?xsLHka9+jl`pl4KT|?q>|7*iD|zOZmU>HL8^*D{N-7oVQsH-M1YaGtOyJ~uR=}!+ zHV!9amn#E6LxVQrtkpvR=c03RtIWzEX^0zXZ$Ae|j(TgmTFX^wNbi-d;*L1x=Bm3?3L1RWNVJ5tj03|9K2sZ^$x(M%=H@IqLXceJbge+;;$#)Ta@|)P#tsIfx+s-xb3y%DR^>Gd^xIc*u)0)M&XIJHkFjW2iLsZ;Ixgr` znvqg0kg?#Z<22eaBAwZLSHgfKDXVp^_iDv`e5zNNTW~qC*U%?|A~RoIp(874ASJ}@ z$5KC|lN#crqJZI!8WSi`BCA)8LBkkV4&|MAChZ+dg|vmqs8^l{EDxH6;lpt);mqJt ziDnUOS+3ZBpo)QCT0QG32qY{jWWOcLfNfXJ*q5ilNLiOIBW_V?W<($tyNi(8#oHHJ zd9Z{Z)-6`R*kb6c+x=VDbNCa{N`eP-ZUdmd>#Z1T>cCD52AQICwv;kCCNPS(E2Lc>f zEArp*0$SWsEvZ(rt&kMuMEW#THNj~F9GSuMb3dMWwbtLddfZn zoN_MC6$>%14UL7QDv;w+?SI|K#%sdGWw|e!nhln7q%HY{t*zE|+p? zpoFx5Akrw^NXP^Mk&tec?vbOrYa%6BAV}(H#%LHJ0s>MSEjfC?nD6uZzl;wbo^3bJ zx#!+{;(J=`_sE9Ab6fx`O}P<6vcU1^VUK;*8s}|Mum_)Unx=%wZBd&Svl*T0SC2t- z_eQ-n%q^eC8@V!co9f-)5S|gXBH}>Z53~AWVwNai{;L4;23tFOi{|@( zSe@dS(q%G0N^`_B=D%x^6vu-va|Z2Z{A?^W+H9rX59_=#uMFtuiWX|3H3QEyOSsf3 zn6i-PmHz{2neI0?L~_UY#_8T-BQFbhna|>MJ8zz%g~>V7NG$cCM;(i-OB6Nav~#y- zNe>+m& zebT;(q*1p%T=+}ajrIMmY9VWn_|n1y2bmu?;})V{R(&1LUq6}BnsTfl!&coLfs2`> z&Ya{8`|l5OSq;5je>gdu*XSlD#(fo^*(#OKqsZ;Xf4ne#z9E~!yBfr&SuGbc*{V{8 zX{tV*^b6{Xqw+BPnIL-n&SKR?ZhV7r{h@v6o2E#akQjsLKO&#=KNY7?`FS(QS=)Uj z3c$6oMqkSTxNnx4$-_x@kGkeX{-nG)`5tKAm1gGDTX1UgbK9z++p+EX*3ED`92Yf1 za~sj^$L$=Sdwt0-V6rOjug|N4sa;N)x@2cEnD}3+gfL8MGnLPAo!;#*W%Y~;ti#08 zlUGyce(AC*|Bfl2^Sb#$lWZ{}NU-r_v6}0~tK9D-IF1juZY89R_`?rc0 zRpf1T-7GuekFJ`#Ni>G<1+v)x2o||_L~t^34^T}n$U#igYk*c@)boET-NlMY;iD#B z+FC{@S$BdBRW)n2`%0884~?Qf!};latT^wOPzC3U?7yI5H07CZtlA)ZS3hBN+ar@n zd4P=W+}BRzd403STtbic1Dg7NSx0xNB`4a#-1k0C>N{s?!oOeWyOUglqc5t-WdG*Y{5AEP^zABQ)Iu^3W?I|o|Klwy?YQ7Nn(W{;cmFXC5D3Wle zczJ8a5yP=od63oJ5R(oYh{*a6lEyV~(XV*4;?~1rR3&7sihP@4Zo{4{&7w@suHhW? z_b2ST7o_zkbrlK1B{~NDfZ6fmQD~r}hTEn$jS4yIz4_fx3vW;V(0g;59C7CS$8inU z)8)hSDbA@9pQp);9Md$^Kd(nnf`_L?Fukd_K);@6SO{ON-@BO+b&z_?r5ErPbqi#^ zcVa5_Hc#O;v2BW^ac&LP^zwGq^K6Z;^NxooZ`t^jD)#WFg^BRnawhr@VnGL*r&DYa z2JZ9UuB07)KG^gLvbnb3oI|9W1 z_n4zLZaXw-B+$y_lf9WdqXzlcswnrg7Lxc*^o<$LltI34#3T(Z^5i}Ia2xu1NWPie zp*4nd%B$L+_D=W1kjvpY;rt>NW~S;tx}Z&E_P9w(PZ28rhPOsDbgyo4)RP{ZR(4N( znh558v((n`;oP{qysaX-6Z>{I&!1|iV8p=BrfCA~uHg7`^gM$Zt&k84XBod8VDKbU zo5kjjypwtIi|4^2x)j1j0TDICqeV+1Vumq;%*S9v()Zs=R2j4Rs)qCTA6{_i-u$i3 zIVJpAZ!l14_sy^B#1DTNa^IwZeCs$>(6raf-MF}G%E}>yXfR&s=NkDJds02`aX zt2K>RKfC*bVhh;Pj?|2B%h&NbY$B=C5uf4*R}xryHMMF-r|Px7NTBZA;AM^=a$|R( zcdty)Yj(AXr z?0x%vv!T7DLVnwH9WI4L%fNDkd*GwD*H+M(HJszq3N7E<0HN!V2?29(2H9U0tR6kD zji!*O6{c^2rov`9k?1p@Tw-W^+(sYCU3>A;B-hT@S5EdFKHO*$G+OB>2{` z?Jib@tw~i*6oTdRV(Q4H;+hHd!weHH-Alqmk1%CnSrO4do@fY|iugis$&YgTJt2!o z+lcYU$4`4r4cfzw><<~q9*2g$fA}>Q)%u9`_XoMBcCv3^Wg_Fpv- zy&!^g|9I4qmjc4Cx}DnD+?rw7|HeMLH+{tNrxrb*04W!POh=qeJkDsIoBme2z{hk? z{}b|}oK(rNdiyKOmhBF(b8pBK3YaP&o=+BOnerb=_VAi`= zyR{dSXls$lS5>9=Ur?2=h-qmTQ`-ORe3?r;^)1IO?k9mfh)tKydg`f%Qviib|ja3kW{r}s{1;^F0wfP{+mhoA0S zple)y>ytI-D^9Ch%PGf;bsOpc=Kvm*L%1yC9gD}5Rp~1=GVHr|mU(;WQxz;(z@MWX z10F_wi}0xX((WFR9-U>%M>`rKz|}XE=iW?(xFx~4+1`W{o(3ghX8(EwYxZIlIp_5J zJ`c~PHCOp8ex|JB_IS&|P|!;4m=t zIyeTb+|XlaT=V=jVdKK<(P37%|4thDL8N=$OG?sRG6Kt1_qUJx?N`yO!Lf$lTgD`7 zB|R2G(#=68CU{bZo{!HK+ITiTNLoCyOX)~hp>FST)@SjkgyvJGagI+6JLq6K?k^eyKz>53_dVsf3VvJ2}3HmZ)_@itRXGmUdB=3+W@>%nv zw)WQE@9rS>x?-|EwXJ(1>mp(pa}9iinE2ou7Ao7EyoV3IWNKQ3y zu8;&--ijDV>7y%mUNaSY{)&_JI;jMArlgu9e5Rss7xO$rKEt=hCjt@1uk6)4AQO4EiV$ zDnzLnU!?UiPCzf&_J-s2l`igod%Qf(FZC(4T=r&#*ia}TF4tN4C;}u^?)b)w5xW%o zf-ETU%nZYsx6oP8FgM@PlX&<*!-O=?J917h?gOceq+GGyFA$0;8%%=)@4>3)69QMw zvP}@FRM_X`bZ7@*!tG+IRtXn==p$|{v~TkmxZVOn552CM!QJc)u&`A_2t#TMqA-O(NAOx%{|DOc zr?gFZ02sXgftc{MSZIcAJmWe+{Ll+2KY0j^!rQI@WL-zW#E-jJRnP8yL*Wst(6|)wf1o#Fs`vn7#4upx zAUq&f#dzc6BIIEd&W*K0H;TZ~2J47IJkXymyu6e%5^q&kOtYOW!SBg#yGPR|WWZ z)yV>i2Ofam0vsNbu*|aL&otwu*;uO&*>T zuMGRzVqV|L9<08b55`-yKnr32RocBy@U-dx_^`AGSSahzIA91d7f>odsZQX&X6Arm zEeQc)pHO)2=uRkSPC>9}6eY9};2gXKaGD~BwIpEPNPXqdQ&JO&(Ng#T$+VcaQ$65n9n#xIY>faS6~*KqdW ze`L!8)}H_phJ#cdnKWUAJ~|UTEpG1f9r^&083oKy8VXMXxPLMZEkKd5ix9k0L`chj zL{A@61(28oxbXqNlykomoZ_Y*Y*_EXn;iy=3!t1E=G=kuF!4j*b)d9rv=8{H+Ubx3M@S~pglh0m9A7( z&i^#p|FIVeV5l}|3QUZ;17CaW19WlYfA2No02Tzgg|Ef4L4kpNz=DCt-_XeJPuW9G zExtpp01gZ=1cCpUU!VuDMtc44NYKBs+md$yJw}Y8fNkc(e?Zs*zxjF!O5>VIFjxY6SKYYuq3OKP3Kg6+Y3IpSCwqk)A0aH$nA2;h(dBitqc zz0Lsy*ai2$UXTz25fKrHn3$LZ_(KBx3nBtB(DO>F^B7402C*o^tg?EfH|F0T&P7|CHNb;A%jUA#{M#?cScPJJGN@>@9zD^#IiclSYvTm%6y$|*H; zG3}>^Dr_pEN$r18&S^FCJp(=$9is~}_*TpqBW=(cWe<~o1SiIecGEFJKWj!=#o8w= z^~pU*o@lz?ddpb9#TYc!F9+9%m63txAGYj|E@!C*imvMPK3r{kHgX6HLnucCLssR+ zI5IL15pk5#kKDh(omF@&CAXKCLEbv__Lw^5KavExm<^w{qaAF!SJ#*nT})8^YMvvp z*_{&HEYwf7%U$>GUpt=gKUXDRWc1?_pj}Y;Lx_==CGC-?U+qjE{MYlTs07Y1#ileg zD|gkL&@pIG7V<1G9lrC3eLdE_PU0HtSA-CpF2*0DSNp^K;>K8`T>CtJzz3+CY?yFO ze3o2rt+w^=@a@TPIMs_)ztK%@mx031{xNi1fSZBuvmu-+PhG&Fc~Io4xS{i>skXO` zN1RNks+Q^P1@slVe)`J=l0m`#Ss33S{;GtQV{KJ#5K6U)&U78coRoez@*3=33QGTE zv)Z?p{!osVayIOEWs|FU@S;={gL6k1O3ZsSpf2{lH>I_HM<1htI2ecL8Fney1_FIx z>7gi*#{BV~#^6TG#|>|>`2jZj?A@9YDAznL;me9nkK7;DCe{0g=c-)Q-J=&da<&PU z-3DN)t57`q#k0O5`PxneTq(^aWk$@AoC+Iu&%raDyo753Y}F|JVW4=3Vv08s8ZfDIJ@3)4(wSeN3iHG4GRNNS%W+*?tjvZIT&f!8DB51Zx9pQc(*wF&JF6zAsQ*&#vgM2`~MsSM^ z*0%+4HUvW=!pFtC3Io~YJPqmusqfXLHT>;f_a=j+HmC8EYLh_%v;@7pN; zLG-~Ifvfr09oMRu7cAAUGT+2S|0Si3imD$kesQ0A9vAixG%pBQQt* zNcC>3VL1+Hr{IK-4~XEr(0^@0XCX_*v`>S_6EPwz>LKXLVDu)9U0sosk+9Eh;{{v< zCn%T%QQ_i4hcS~gpCVo9yt>*gX9iO`70&s)eEUigrK>bk9VstaKD2RFpUsgdv`TLt z@A_4@9|+z%QgY|;Xy~V5rf9>Zwv}jTh;)QSFTH?2SsB|e-(`x|MZYztoVq!tD~-!P z_0$U=yox{kRz`!MNJV$d5Bn9V$g_DddM^y^qihs1WFq!MGR$1>2aV!!cQW&IV=obK=>1?o)Juv7^?zPY{Mv z7jG1;dX`GeD!9L&E#+g&N^euOp17-6@6`aocF$6VHU>2xL$VF z1CQu-<+}RWWEMBtu3P~xi4SSi3Eau(NB(L{r{}DNp`y*^q>=l3^H{Dg<4?pww2?G@ zGCNk{Z!?FdXU2mebNOD;J?9Ttd6dd&KbA6hYz&HX^YzWmZZB6nN=>nBgyh9`QL(R> zGYe%?Jx_SMnBxM5wLo&p*0#Gwued-DrViY_0=ilYe}Y}T-`$D1GI&_LHug8DQyjx_ zH^@!CqWVs83v`Z0e1F&Y)>b1uVJ2jb#wsnEF+bv zI5%LSVu)?P%u)6HZ0Ib$;op9ulR^%4S37%u<8=L@%IFXA#-SrP-$2Dr#PZI$Q*_F% z)_czMbf&0hEO}z0lsf6YC>0`3@|O%LH2DXWGX2-h5L$(%gi?7PhW-}z8cl&}rs+Sk zdVF+&+24w8as-rWU{fPVF{$I=(A#U*3{;B~^b8~W+8K2tz)t@pGV<&kqMbtFRpxRfLI4 zPKb3oQ#rW9eIod34LM(5kPwUN{ zC!`~0#aVjemple|mlv*zqda>CNgs3K=obF21w2`Uzj9(qq787@AM(zyHAcYK%Q!b} z#l5Cl=jPj~v(V_T;^~10Ya$tco{0tg&0un!qGk$iq`h(MWNtg8F>NPWZ)(5sTX4r^ ziLsi>C3wwUW9c!1VJ=eeZEyy~Hj19w!m&apg|5atAmq!LQigpMDW6~6X|)o8^%}0E zRGmq;j9uy!m+ru-cvW0#D|IXF%Dz>=akUtCS@W@&GR{;kSD)7>k)%+y5vG~46=W!y4^BMu~r&Mtrt?jBa)`B`v z2^Ql#uHRGANd|l>ys9UE;t*^=C3lVFk=~FXH$IyG7$iob^hbM)mYV@7+%ScgCVYsS zK=`ek(qcI{y4Aj867rwWQ(V=ZLERmZ^AW!nWuctJxRAX1$>oJ#xcCTpO#dYfd`DdL z_$G-U-*_<$5ue|?^sQB4s9On{t!=)`9a!W*A3jVL$tT^4_XV4K<1*d$M0zS#HJ(R9 zY23q?r=w}XTPoj%a(@PwoN0zM&GuWt*>^C;X&onN$SK*c^Cq4BMF;)7hm+ptKWqbecvJt;$ ziJF0XgyR6}%}8jh_Dl9aRKwCLO1eIW6Hme?b~g5T{t;~Z7MpU}RZ`z(Te-CZYfPEFQ$ajuoCEr@wHxf=sW81 zd)Bfo`z*i28o~R{VG>Cy4sJEi5{1Oxx7shr%_?~mFJ)CLujfc}Cow9dVvq%* zh2$*1E-m7!f{6A9`10No#KsBDOSQ&Sd;4P_;vey8hB|FMg7D}sjfln8lV7x_(Su&O zkGs_R>}~gYo<~JHsAp`Q41O_P<~{c!`EK)gM1HZuPOls}g$)oA6weWv^ImZ+9t5o85nTkp% zp1Lv*ye4;nC-L7@Pc1b<(Cm--xi?lx+x@meZ=pjw7&fp5&CZ)0#Wy>aQJ zKv`o}WD70&LZFa!3&tDTf6ik~ljI+!$8+AG$dxv!thvy+CY#-h)@s9Ui_2OCoU){$ zf9BJavV2Qs=VxaYEO;@4whq(DLkD27Lkpd`T^JfCc*>{3=aznh?(8k`H6;|i@T6~v&3!d z)Zkp6-`XQJ1cvn)Ded(&Z!aWR!EcD?88NoNWB#nZE@hMATJl6`*7?ueaeu&}LA9Jz z-46-eiqlw z&l0mfzw2>SxBX~%(nQM0dk9%D(cuJ>3e-7C9O6M#~cJE3Y!n+TG(T{FXbM#W`TrnX0z@7%XE|EBGhND z@yeDQVxg8oh$#i9{ip5L48Wa9<^4N}Gt=KQz>z=Dl=64b>%&Wj>yTK`P;MefB=wo; zmo_pYm`VqDv`^C*mP!do1AYO=USh;UxNoIc$`bMo+N zLRWPuGDUTCV!gg8+v@IzW%#;WGn0%CApBw?-Ul3LE7y{=QSwmazfKk!xL^wogDa4H z#@?0f!;3z*R+qXH6fCmrv)WSU%!y(%&*B{nbg7S@j2?S}`v63d)I1vafaYLRaw_vu zIU3vDKH`4HDRW{@ug2k|)K@xn6zb(fHxk%cTIDybQsGT^UvPAnSiUde6jIt2-n3oE zHYG7R5U3Or+UVsXeXY-X7{t!GHW2QfG!>wH7<;K>@MO|+zNL#_-AQINUb0b1yNvy3NhV@nmg zLQ@Su7exluokgIr)Nf6Y{evh)fA9IFF)AK9D6^7Jj>Htsd9I5gHK574vuxgZN|`yQ zlDJKvVua>I_i@yYmrO@SgX-EHD0`h?&S-uu1VuENrC7iPZ=l5uT0hBo$EkbvmgZdf zW4H=U<`U|CtB#lSrhSqAc~IkrsD3|>?`Q2VGnk0v;F4PdDGMAKf%D>|9oA&+GKrU) za^rmsb=R5L>poiiXtDNTwyur*uZWI8L5??A8CAoa4x_9QYWp{m#NQzG~&M4`w&m+9vYqLRtx@!OKlp6oM;jjlDM8%Jjh>^1-V#`zx)SNaF z6}%Mbb&J|2!<1*rUGgsLS_T=5HOYYD^cJ;wV~Tfk=$_j_I0xmt%u*DyLK9jzcmG~G zN32{E{((|y&R#OO2x;>*bSq$*xB`z@+Lo22FI(&99N3YbK0CRPkTKabcF*66=l$?g zFU9i!&#^V8!xmd`Uo~$=?PB!PCrpn2Ku(r3^SZI}#i}hR;sH)qwr^2(7<%W%^YCZc zy9|GM`J`_DwCTu%>9m}TZZB0+F(sO1YqO;8M3(p(P$`dTPK}dN^`#6{$tm)qI$7lQ z&LO2GoJ~;y-Z}JsU8;cep)am~T{)2*3ZD6^?Rkx=(On^EQJjRNFX4R>hzCtA?F_Q( zSH&7^YN^{igGe4WwtXjX1Avr*}DoU6f0zB{RMq~E>MDkYT~{WtFv z4=y&2DEGyof1s%7ZMElF(@xHnUn+W;h;-7OEZqrG;0y|KQFK@E(hk~fTvtrwmu3|T z`pDfJ6z#A1dLRv5^vs^i@r%cS?q685Pv&a4YDcbE=_UIOtAl7oTAOM|4pkD@(?eq2 zL)S1-D8+!vTFL{|x6K98V4j)CZ6)1+#cJ=kQOr#lHwPs><;@~ES8dWg1vt3|zr}2* zxP&-d=dTc*#brzkrfGxE?ncBQuPtC0pFHcOUsl$^Y;;{vr_-BjMah>yJmy0Sy_)Uu z_Rv6bYkr$2aV0m-mH9n79v2*kX&g#Imt)4xrJ|o#$u@sq?8yGUkgkFrUy4Dp2=R6m zuea9Bm;0;oldnVZ9yu?xjkvgRdL=#|+Umtp&V^$~#b~X?ahXAe za8$3PF{P?BYcT?%#UthcJqVL+!3xrD8%08(ecZ=$`LDx-6!pA1g44 zWfxMm?CR=K&FA(Vas1rIOSEo3xwiC;`U-6Lbl1IO&wq>HT24Bl;jZ z#B+}OG8Hh?9NOUA;9PzT$ZlLeQq!49S>FGrzz^ zKr0Cgu4j`+9T~s$;r?572Qp@5go3_F$CxFg!ht2k2=#*x`h9`6k7Y0ae)BPeJ`H#3~-aL*pZcJ9gq6_V}{Y9EIZ zG&{V4gU+|N`Y!X2_PkpQzdKz1x_&iiF!+!$=-a`Ff>-BH4jKNOchiMIi`{!iumOLNABbaLDq^a0e#!`58 z6MFxFM3Ftaryzx?fRKYoMiIqG+bUnB$AgbT1P}b1PM%GfwzDynGaYz;=Z*-Zq#Qu) zMg8nPyB>cZ^7dD6opQIpfndeqo7esnL-t6K)9qKujX&(^5AC>;+FagKAw68Pr@M=b z#IS6o$^#URy?*WX5P7j4729Nt^4yG5v3F=fxfh*I8%tac9ei+g#wTU*Q*!>}j`cq~ z5bGG|nFL#vr*1Qs6!B;m^;w(U$oHOrfSu{Nt5x32i?_DR@?AGy4)#_rY)g78&p$#p zywpYxIqot}^+>KunJW^rzhjH2NA}BifBBl5Q;kJv2T3@-@FQxq6AAikO z9Jr%-hMw3p8Qh6o+&MYs_ci*qV!@w=QE6;pXlmp{tJ@zAZiVOnTr{92EwK%x+>6q6 z^;a4U*qA=mP}w5w|O!%cWn%hmlecJ35A-&+S|}TOjLsuUFGi5V!8- z_l|L|b`{cu1LA~~e?t6uE3$J=86DT{XIJ`V6!)coBXwI@vBn~X;bRx-zVm@4zmf3f_hF!bDLZ2 zm8-NLMotDwNamES8>Bh21u6O*gcRGymWpb=p=`C#r7WTH!{N+Cn--Vg;D+5HsR~?c z=GLK0FSx%8%pZT=vlvyyUR)q9RbCbGVF+GoreBs-4}lMQ{9gWJA2ZXO#oImB>$+8X z-H}tZ)3_bxMIF5UH)I|2pq)E*+$vb9rrpV@NFZBzsb+Vpt*7E|+V54ebM9bydJUi0 z%g4&mn=S^$gZmwp2}m#BDAjrK2NL(0CY<7fzgH&|bMSO!O0L*lHFElfO4CE=yGld` znlI`XPX*avvHnL`aZm%Qr<>O&P=35w-}V=Ubs&MgEO6QKuKob0;>~R2=76X>72@fg0+D@N zd*zakCUYDH9|Ny=^HS%|NpY*yzs+H+?ReQ$46G$&{qG^yMfXr0iuGAA1vhDHQY)(weAdCwZm%ff**51wP zpC@Mjym~6QJMX{IE$XVRVi6#HElw?emu7*b@Wc1gA5TkWs(9yU-p(yxc*es2MquiT zCnsa~{HabXqmFDiAZs!qbt4J&^ooeEG0ZEfJ?V)qdr73q-4NbgT=RwdGf6ITM7Ap_M#X~t8vAIr}-|<^_Pw(1Mrh0ZgoB-VTrEmPb&=DF2S zhmPK!yJiU#XCd)rWD`xlpFmYiPPckXUcWKq1N>)vXU9 ziHSkCGrAXZK%gYb#pY{F1@?;t0J>V+z5xK46}afjl@lg-6(70ZMVT5Zb$lFBC>!0O zx^IJ`z1HMV){kA8qf&OU4xodZudi7fy}!0xl1e3NM2^vAA4OkFaIzRl^l~oJ+U%x| zHo2BlrqkXC4z?;~afU;qN}5j_DdTGfk0iqTm24ZN_lwDkk-uN@)45tMuOVZq$hk_} zn1Zf#;)3{$>cpnSRpu;2WA8nCokhHuhL<`osWrID$vO&?y-~(RPjjMt)&)Az(ed30 zE#(M79}gYLLzYl^m}!qLsN&m>1m~p z1Ljxu%1g7e`sp$4BdGoa8Bao@Kc+FN)9yyVjV?VZ_!Hy=^KR>)msNiLal4YocCZR} z^zdLYlIL7(AN2NyOa1#f14y~?hK<{{a`bJK!tDLeebvH_*qlW@szYpjO(|aA&}Il~IN+ij~`Mfr(D!(?X-XRZ3s` z0R{UIQgVYCymG3d*a23`M%yHaIx9XS*Sz{9grXLt^Q8mV3&;D5uCzD)0TyRK-8r?) z*!7cdvk2qjq1PpQ7vViqUZ#m5nVcPpO`fodjsc2Sn#AVPr9`4$rc$A+bYlZfq1;)| z*(35P+K>UuW>fO=4aQI3`oGF7NeXu|I`B~ZomODCfA1W*@oUzjE-a_=WYcJXXK(en z9BnlXx7n{AhTzUDAWHauU=782ve{=+Q=`es95{CmIfHE;1q*)3VC3{kY{0UI z)H~9j4fNboMTUx|OUGtIY&`RC*b7UZi&|#W%yR?|CZ59#f|s~9`TKFD);6%Xt$tZi zd783z`W|ZK#~9C3&ZC)LTJ?`)6C$_vL-zF^hcuQ?qqhXN>Z2p_m2QP&Wi34|u@GC- z{$K7G88}HmCRQ*iu1PeKevL-em_i>u!C?fS{Y+Z69O|F#2Lyf3@ffUf^XrB*F?Yp~ zY@3Mn1aYBv>;}(?0z-=uh@@QVq}Bq}n8Zb%S&?pvQ_Gy=WYK3yyW^DnifzmV3)F*a zjL)(_9<^H2StT~>DftSQa2H6Fj80qMui@8jIG9m~g)7_25fYNx&Jr9lbW9t18swNk z%rnIsnHQMlQPT%+>mL_K2CMQ0?d1%vn)f&7`e%RSyz5!#BsSYM#N=ENg3$1zG$bGJ z-yzotK6Q*l)}a&{6Xbr&+g8mYtQzE)#QpbRkNG(~vXr<}Y6mr+WRF?S^EQNwO4)Ih z=Rs)fQ=mbA^c@XHmG(LS%-ej8QBh2uCt@4b?p$nP@5<>hGgUTKdO+$OL=Uo@T5@j+ zvzYO5ml;PzXnJ*#H>Gd=xQg8MutM{(pX=sfa#r%a&tK0l`b1^ETwLO0CT>2v^e%#g8H^l`ox`G#{t0e9sQNif-Hf2oFKqv(%K4Is9_Q(u74_<;GYOY= zQgW#IHp^hcsOrsMW`C&uaL|>eN6<8-$DF%-q&BCcGtD5YQawFP3)mi7hJ`l8W>8Sl z%EFr1=r;tuFF(D3OZLQufqT|>R)TSk{h@qp$Nj2iTV6}iBtdwRbRf+HK3JgxIq!Vk zp1%G(X_er!7Ej#ZtsM0y9^SY_eRY{RCQ+>5^8D%S;L6gT-jg=bO|cp0puTQ-GS7Y?SUGd zfjkUyE$2%#7P7QCK*j!;mCXK?Y+(jVS0Dz`Q)6pNcondC>|9@~)cy|yt{Uy{eY-@# zWlIIYrxPoZszc@Os5T*Zv;fS0Y_MPta;=nOHD|iXp!Soh@%GZ#LVK6r} zt?YLD{fnV6QG04D-G88u_aOD{mpCq9Cto#mB3`v4wuw*IirKN>vz4`|NRdd}bRkuF{BwnKXdk*r<~kL7e! z%?O=JDr93!Cpqq5mm>R&F`qyB7G5Ne+GRBts6*ZvKTm4vr~p)XCN2Ao|T*W4HV1k4#$R=s+hEbjugCVH~U6 z(bNr6Ph8m)or~76uotA?`A+^w> z4T{d__Qk5wq%%6mJCBS>@esasmT3`zZ~!{ST@N^cCZWxFRivP_O2!=!M)H8iEi_xn zOW?}@v}^hJ*@YmWYdI%KN3dVmJj2!gzpohRKR2=ee*Whw_Mfj9;3`IM#AELhC6T2D zxQa~}9{$f)4ES7?KBa*>DcHK($c9`grz6dEN|~?zjjuLB#1h*{^&}G$hWyd;GC@|% zsQDwKU5q1*i~^#$`jnhgn8kPfR8B2j(%fRKPnvH_yZ7A>i8vuE`Hk}V``3D&8;9a= zLevCi=wEsYHuBJs!uKr~|2VA?$;7Hc719-VNSy`q$day@NEf;Kh8N$`@kENh_Ilf+9NK zdkUQOWBh^y@0v-WnT0hE?{FmLc-~@2_kd--5$o-vd}P8$@x2`;%6LC+t+CunWo7DZ zO2wLqiSNr<@yZ1>mQ3S z*!$4|w|^KJjkEzFeu8`sn8+Eacd&+aVa#oHY#VtyX=q`nq-?fSrBlPZdu#J=-AfTH z;(fiRG`kO)j~`DYvIXBvgRy)2Q2qAfa*V(;y`@oPy2@WA8kH4#AhMt_cXs%!DvpKt zgLjISRi&e|R);fMGV$Z5xhFfn$v^i#r*UdO)Oo8Y_E}yye4~LQdtM!#r=`=y@z%t8 zg}Sx{Nq5&`LuKU*?EFW%tXYcq@%CfsRE!^?-YuM%v1AnY^GGSdkr(d=EY9i<6 z{4Ej^y{J))tI=q*oqE(VBqr0ZXg3<{;MwP_IM@_Vk!TEWF@NaryJl(CRaQLvwWP{w zO8nEbDdyEzHMgr#&5uS*eT0n5bbKKC5AG$#hU8CiSHdNZme zCO{lN_9&zI3%@>jXl0L#TvKcJvgY(p}m}avIs<+Xx z^QEsvUV^_+V@NBZHVhi&bGP%=juZUOnIr7k+~~eU#Z6nGHyzZ$b0cdy+wM)y*#y{C9ci!Sw__Dp!z})w|nNclL6N zwM^f)81e;Jy)c|JZ2YC31zV6BHS7=)Z6;UC>vZEQ()?p|+uu&s`I2|&_3Me#b9!F9 znl82OY$A4B@Lh$hZU3!8UGf(ZJTG4-zld6<=Q0hVC+nXg<@klsjG=42yWo&~%9s)H zpzG~}+qq-HZ;ekGe27DyBGR1PFT|hRrS?b05tDWqd*3_IMO=8yS*=2E z^*L{{Rwx!%J!EX6*O~dy0dKk@a-vm)FG!GluuU=SCoH7&azQW4yt;FyR)Ut&BRQ|) z6_fcL#pXa^`0Eu)o#%11a7@|f%e;G^=`{qzj1==3xP5;{8<;aJOVsxp&dx^@XAgeE zZi~v(RoifcRZ$3Vp*?b*o2xaH(Tfpp3rJQa1a<{lZR6e?HsRng-=j^Fi(*Z%T4rDoD z(&LbeES|O48YX`A;inG@2zxL@8eTWUl8N#ox<<_8OHpRINFd0o^m zb34>X#n}^rZmtE|G%*iTC9xrWM|M-TMT9@r@gOaQs9K)M3fVY5)eGqDygM=Cv1roZ zeb+eo5raNI-FKO>8#{LvGC)QLQ#Wo*L(|xCrjT$5<2sJYJ?lw_q`hoQo*#@aV1!+U zBAy1kFG_wL=^ zx8qAY%|8OKAo&UB48GlSy4&cR|3GYV*b8gy0rG|9m$~%TJenmfkHqr+W?2-mu}F-5 z{Np00zDHz58hHvPZBaKhQqnV{WKY@K1#Bh6x^t4l`}E#5(c5c$6|;Y8oIhnFYnb4W z;%so+`@{5zTlSp?H-yxQ-tDp>)@=J?Sb7*4B$HbTzf>45I_4hx_879WHZ7_}O5V*U zvvM%@0K@DIPvlhhj%}$jX%8aIXbh+#0z|johRN zx|M5`_%T9Q_zjjr7zJEdHv$=^7*%XV;YevtSklX=dzN=WKMCITe#1AQlyDP3T3rY=z`f4W$Hhfb9^jZv1I}G z5UjY%RHo`D1P-n{#0yl$wU9#b)TNGgR|a#5?2xJ)OG>IG4QFD49K>R|aiwZteZT|V zedrxPwfsh(Me%D1zLyf~NH|p9M=$5Xo6=P5nyPv~w}s zx8BQ~Q#nn8YTy@<>NrFyNHXCqfGA~4)b&tCjN&7K*jc=5upk)3xD}C<>h5~=U&VhL z`MxjZQod}hyF#@)9oW=*9f)3&hNW%O4MC1UgerZr9ysvR0*sl=IBsz+E!|3BsYcR^ z1ih+@qhi+V1yu`#jlTn>;x(9Alr2pK&Xwxj|rZUA|1v-q$0Uyo7pzZ#VZ zL+lX_2>J$KO%SJ-xkC$pRQ4M=DxmKZbcMhrz%2U8pq!H)rAnqzc^i&DP_bRZH*uMo zD@XtgDWJ#@G%QG*FwnIwD8^h;^$X~vX~xB)Qvo&)NC{s%m;9q2Hx^%t-{7RNg(x`_ zJ7H1ul~2@HEuWSuJ=}RJTionUC7xL*6r8SJ#^(`2D*&jykd0zQwX{G_a7PqQ$1$V} z4{qu!SOzPnGqUAzKUQG&nbplPyPK=FM1%Zq@L$2_=Y9{3&Sg^#e>n~UbY;Y+nU8rX zZqDj-!Br^8-A9t(l+CGPX%;)Ujoe7ZwYfF!R_xWFnb^CQHL5mC%ES_F%YbSh&7?0| z1WX0W;38G3mX@qeX?i$?dF+Mi@A1Dk;=|!`{MW{%M25paNlJ<^x)=R)SFhaqVscO5zRGqGUY7aTMEy z%@9qPKr9TE0vb=KuHS{n$>H++&kw&rTaK4`CoK;MZfJb14;;3ElMD}E7=%`))>YTzS?z#&P@ zM-nW%Xy#eQBSgJrtWJTK5auFease)rA~SVICbm;b=axFwkwE$)xE1XTRJ8|Z++v`^ zr0SEPrUONnpc`2@Xc@dFt93Yeeg~JuH!k3U@I?8d3S%q5DnA#Gn&C`5+%nepf-tbz zeL%RAQ;9&PQM;5+bt%1aJWdHslU79{Cm~a%GS1743^Bl6)5fU~Dju-tmm6eOuTi^! zD_4v}aZ#QW&cjTw3aqG7UhKt)LK~nO9W!EwhwPVMBfu{ND8ctFD^2$c$!jS90rXC9 z_z%VT({Lq+gTcuuNYq>#Vg`-NdV;EQDXNClTY-|*IW{b~+T^>A=Q}KA2ur`D5OO?h z;8&h1Bf-__9b-Td+%EEDG*~g*Y%btR%Zl9Q zD1M=6^(yvf48WWw@Wg62qM$p7rpmq{+UjT|Q=*8dk&i+SSif_pxLGm65le!`K`@NS ziEk;bOb8Jj7{Eg;h1bBBm=E_0GQJORcR@gW0(d1?z$=lhZpp};E>@_tzWg`*+B-{Z zeQau}$pfRAd@YZ?Ww7l4EnMQ|)5IH!s*8LBdCYI}mL3&|B2Y_*iiik;a>&uaTUQBB5#hxVY#$c zY;y)1K8T}4VZsQd$LnMEg$s`expzBAn_YM_m0SuripD^#k0nN+gM)0q8z~o82;13V zs4D8_^~5;RSS&C=iC6qfniT|ivMIMFbv;=61WT_V{u9B>w7Rf0xMI@NsFbfUfOf*5 zVbEIOeX`(|mEy&aD_@o|Q-9ERDAar9h6-gX;dhZhkU|!o&frB8Jn24yDsCv+Q9j@V_J=IK#<8qc15R z;Whgq^~RVY>teRW#Z|5`g^Ppk6?D#0&X|O<<-py<(&D4~fmeGuQvg_1vzV0IRT-e% zA+270O~}(Zr#(PhVT?lHVd~Kf93T+5T7oI8ly`Rk=3AgE!2m5`e-J|#bVk9ya`KbZ zF_@`Xu`3zC_QbtwQJC$591fT=`=7xaKA+j0C^z|+DjnG3ct;d}a;_jg`iHRefYnDs z4JCLyA`{{-^BhE^u;<$%iDGH1-EiL-@S7924e5**6d1VPNA+yR1j zqbkg=Qt6suC3UKEwQ*!Tz!V!Q8f^F_Y(G;Lxp;%WEC=ph1=A>RF>G-lI5% z^)BqxR|=OGou2@W6$?K^Z>&XRE2@cEaY6VZq~Kv6hpCNiOl<;RKvT!0DBX(-q_pqU ztaR+Cxp3pfc)AtyJ`ce7k!GkOQXPHVx0*I3iZanIG+Y7BK)7atxx+6!0Sj>j(JiTK zS#UhU{Y6pGE}-yivK;%lV0HHiDo&<~>S4EuX-6TGHVQ!4Rs6spB})r|08?UEJWotm zKH8uTTCm691R>zKYityIXW;P684#!BUNTrZG z4Y5!fxV9sT2$&$q($^@X)i5=(m01l7y18@|9K--Fjg3?dKoRjL;S=p)<{VK-qs0-- zvb>IWl;JQ`A>h^}M@Diu8x^TdwZ-d}2r~JgnAx8W$b-5%_ZAX`p%hD9Da{i@hre(# zswTV-UKkK9A0Hbyhl-W(BMT0@hZ-QzQxVPBf5=27y9aI&Wl55hVrPn}N$CR*h@D1@ z&6crf)LOi(ydIzx0l-U^IHRIFM$AE|!+DHVTNhps2LNdOu`*PUXvWVhEpikJTqb;B z@v1%;m+mUlSVTVIn8c{-4RT;?xVURY_=0QpB6#ZKkOhiUTN33qxK2nrkBY=C>R|C+ zZkI8!U+I`dOKQon1}sw?Wt@|iHxZZwf|rrU7?q}d($?x4 z!~!Sk*jI2mv6LGLY;a2&OemM&Y`+Y9mdX$tI?S%II6h&``U@d5ZmI?xwI1IW+NYA3+>jzGm*;HgKmqFm+c=p%tRf_S)0lu$H**4L;r?@uN8UAG|E z!m_sZLSKJ~4{}RX#tb|$2wjj;>c`P4F#OI})D(HR;Yc}?Zl!W}D~V=a#*T?ZPZbYw z>>vh3yKe{%JZ<8A!w3L%ts!&gTCB87>l*y_o}_X%R0&u)8X%bR z--v)$_IxsZ9}8v67f0@Mmho!83|^*Dg+?JLY0QPH+{(@$gpU<{rlKX({^A@r!WI|qZYK1Ktye9fQPeB3Jl)ueKAC+VE45|;^9v6WDu1nc>QE_nKrPv94X(dXSNMU|soy7OF_ERP+orOW=s?)Bfy$N`*z|J( zjB(!yyDkKx03w2R@O%hLm$qR0qv5Q5dik4GN0u$iPeL;){>er~dW90IJOjjCxa-UE zLY)A8^$t|NHV;5wM0%mjJ9D_4bYoIz zQ(@3h=R9?&n*=7JFQhFJ#o|)#0}!yQgTO_ATP?V@Y9u3ARt7oTg{OgtsESmat9DpZ z_#smUh0I3@t0;)6O}{IH`Aik{aO!E551$i3nKBQTlrz+Ss=#I+dBa#qQH>%gR(c1PD$g_+&aI+!Uke>SFMc%_5dg zr2x2GM3*3{Y{&s*Yr+P@6s_=KcN|Iv5I~55aS9Lh4IMy{E@^|3WOUZEAJ8t~2B~!h1gaI|d=;>HJ;J=Yrnw`jVx#+*OAC#w;o?;ItcWP( zPhLLY7D}?6@r!7bz)jK>B4luu=?GA!JM4p0RHUG$n8R{N*;UlCYGkV^fFS!NQ!MQV zIfJrVg8(n}9q9E6?Iq73fTsz1wlPVK5>=6_?il-xT5Hi1rh=pg&Y}ccVa#VM)UhFp z&lnw+i~!ycwgS^?B%mQkTVhHhgko)ah}voX$UP?F$~l5;u4j@5nv2KgU1dW9dJvl! z)qio{*oL}rOS6bybiSF<;n9G-wwxec%5ck+ZNZBhj}HuN(bz4P0E*HxW|dhKs4*0Z zk5F~>9yp4Q#^_CDOH&kw!BFSMs09T311PhLF4F}U#0?lAM#StG;h}l?^$sQMT(2x@ zGiJ*Ox_Lx95sKK|!N?O@+CX0J%W*~qy?0RHHzDfDsP^)g1$_CUzuP?~Xr^$h6^;^6{CS4byZ-GU+{G^Cedy@?uBVemC`g$`rP-egmjYxZzfrDo2q00(F`1=Oz&~Ocr3!s; zMX0LQ0aLT;Sg3z;f|&sE#7Z)mPSH~_T^OZOB@QkkfwvkU%7B&Ym`0pMpcw!&V!opA zZ(wpjM0L1X)&=Bn1f+G0<;YqH(3c3_?VDn@M*G16TIB(eysvM`^SK`eUC!yjmmh#K z@#%sKm5eL8XXuMW9;~|kkrsg*Otl9-2b0kgX#2Tpjf75oDgxo)SoLs;D}K~C+BuG^ z)Fo|cU=5cuaOk55~19e04*@KH9E+`Z`=Svgf>4{&f)L}Q(R0@-*Y^v_-M*0!_+0`Oks%REo^7W$S6tH>5_X~3y_ z^&66Ih+n1DXur6cI=CXs^#_Ixh#(pw6)iT2K(@x_tK!>Lyqq-6&%h`@RdAzF2ur#CrwSk9QYfh~`QbB8jU zsH6e{jfEymlr<6OU@-7Uag-GcmY^364G!M}@;uzTXJ|EVofI2$0w2l|cesjW6kO$+ zwW?tS+fh+I;fK?Ol|zTJURx3Zi*_uiO@jIevnsommbl2aSj28$NTTGh*uDUL%ZH)( zsrI$eJ^ui*qI)7Qc@3y|$y~KBu%=ax%dD%E<%L?ul328nn=FIMEZ2uGh#3?Q z5{w1*LRvWtT2K5xh%Bu0UCZuTz_IpAj@GnM;Yg>-q>5hoWhO+%Ia=6#p5YE6{gAGn z1`4HGZH2CvK9P$(Kw;vo*pvsHsC`^7+#70ag3;Kf-?&bW?Z$nPAEHsLBD~8I$c|1r zN;-2FC0yYUCcF~xta*kMp{`9z^$ucKy!hWJ z;FhsnkD}=??q!9ipZXymR-x&Ro{E`vbh`fKk*&QjcI_t++S+bElBpRtuX@hme!!Gy z;EgvmutGRowPwzx7_5m^;{yk(fJvmwu|s7vsfK|mC`LiYNO4lByArr=xh!g?v_CS| zk5TSf2VGo6QBtYQppN!^yhB@Q9kZw|UG)N?%wHzT4v_*o?pvpcc9>}XA}So$$Ssq47eRA z#p15W;@x_V#ivOGykXkFdP~NynJPgqh$tAHcGO7A!7#^Q+>@?T+4Jg^W8d0MW`+~JQxmA8@SlmM@zlcj(3_HMS{iBP3!?ROt zUHl?JY#CY&RCMM{=Y|Lx4gGtS{Lg_3g>gA8j4rE_LcAsD3AHxt!E5EF(wKri&lj)z1l^HEGd1i#qutXowbUePyd3kGS%Dk07#!Mh_}jNMS_5lP);N;4rOb-;7b>ZT zj$oU%01sros~{%hcSJmeMKpmex@sZL;S|e@)gLSP66+&6gi(wsNt~w=KA}>ZnFgs` z5aEZQwhnT>_%k>X%u7-2roKSk|6`C+Lf0BMe&gMTo%a*X@cn2&M(H3d$ zH$cRQdgy{n%*=1@d+@hk&^T}K3zqZAX|5{sOfqi|x3Et1p_+B}lz9ASZ+VgyQX z53wj(3XqCp6L3BNrXn@*bJ3KAc!uytT5L-(^iR7!0zU)5t8ogPpiyxHXV{H|T(04B znN+Q<`hcB&H39?_52|cKvnZz~ zteRO~4%M-0d5UEc-HA+@2k^&HA_-izfmT6IdNIh#taOEb*0D@KRoQS}oi+8p#T`ql0p_2CzAtChQ5KbZJhT7)@=T$*U zVz6Uf&qM)R#L&4wh_G7H9SdfOX_APzpblfIB@@y97f>lD0pUwdDpM_Tn%Bq`A8Q5s zXJ%F-3rewK^qQ#A*zp?S)Ts@Qz8_!IQorf?KngW!&>H8y+@?kwWqHnYup}| zZT7b0*2a)~Q7h1=KIJ=Mf^g2lY06|LLbf5i652z*xm^;ymlhY_ z!e2@|8<)azFz&PfMuYzVs43k>zJef>kd1=lATp(*MOnl~n6aO-S-2-i)zqz*IfJ(> za#ZdmM&nTqJV)R6NS(wsZLYzLJ)VGE^n<>(= zR<8C{lXlcgCqzJ9hSUaygK~_4f%6N6SlPayaXBE0R9|}=8mK_goWF<>$`PgD83?g) zZy7I#3Q7@deV|=dsLSXi#PtC=BdVBmDPJzfT2Qe+Cn|zEk>iVt64vz?3(2Re8B##* zf(pN+kaJU3pn|{x&M21kvDMi7BD7d_2$Z_Vhac17P?e!wY_*-yBp>KnD4XXBbLV0R59Rl+Q)eQaLZ@7eUc%;^Y37Z1OcoGudSDb)m#Fe%&ZT-W-b!N z;A6J{L+(FxA_G$39jian5MOge$SPH6T}2M-A6o)=j)T;+DhK2u!8K^rHxuq!rN6^o z(7Uwy^O^{8_Z+#17lGCF22EMfqqtp0^r-IwO`e;S=pe>6sP{EgX8=K$8J5m&%$2x- z#55x)meB~=Hcnw)kc{WH1cdg;K``;0SbTF9=sR5grBP5~R4mACyt#XcMigPhI?9%F z7HzlyF2xE)7BcAKR}Fax2qwd9ve=3-U)CmhEh@u$b-*pOBf+0E3~l)LkZ}HHuBrVuk`({8Rg`Ls+&dd_6SSwf~I{mVl3I$}!y0EvsLailAjxoq83 zOB=Q`oREO2R&NZ1+EV+A^(@fTeGtdPO;oaOrGld!f(N-{=_-NDwTsxpL*zW?eZUHu z{b6LUQvT+a;Y-M>G{kr61uKk|ZGBvJ!ve+uMT@6Bz%$mODR5C3qHV=aa}XhnA^}Yh z_zMBxQn*TUn%Q=u@WZuA^biSpXs=MIBIH50PjZqks=`&zPz5xD*di%ebC+4% zBG^Ds0JjsNDhb>Mf(pBZ5bh&iL`Pm&2=>Z^P$?GJ?JA3p3JTx97>f)8RRegI5j_%& z4(vX}uS^|YM|h2O17$8O6;TbfM)RzMu>3@c*u`t?Jf02Gprr30kq)AEjbE!FRr;Kp z$b|-SM7pCRQC(>*V(tPo;g>8ISi*?zJKzmQtSJ?fML(n`7&=`3rHF8C<*3mMmGlB0 z*~tfEnBYU@qADLQ3jX1F0^A zX{VCn>I!YZT(T}5uXBOe)X`(ISuUW4Fw!N7^#G-88utyLK)tA1R7p~+m>s-+IDn~p zH33=+Gme7Ae}@TBB}$8YU)OO`I9Id_m)r^osVN&YR9uUcv!g6q^#+*a@I@w^d=>~o zgt$<8T*MeD%fS2+tZ^wShX!5Et@1R=uES#pFeh+tv2|nJ^$_RF(6xfaawzY?+D;Q{ zONhYIBT!)lq{yxCf{PwvbFqtZ+WKG+m(k>61a6Weg8(fMp~UQ?;f9EBGM}jMSrJ>r z!d_DYY`9Ux0=P2L`0i{KlI`9lcsZ933pwy>Tu#!e{YU=gt357YecYv^x$P6W?}x>B zXG9@D`tDhRvJa7vyI_{`oJ5iMayyQW-*LGDbc`#RSY2(hofs1=fL24*OSr0Pbpepk zOd%~|!8CTtka7`{KBZIca!#xw=v6SAmjoqr!WR&u_bwuTMiK}Qq{aoWsO;m1z}iQS zVB!>#9O$+7xehCPieE`qmnc1tz|kroN@^hu%_4J>jo8-xB42fp6>_x#9>P^BgdmIcVT92~riXNaIps|s!k%)ke;7tnh&LWWe z-CJ2)SPidY_?RlLa?wi zYcXJz`A=f5Z*UxJJV1ED)XY?sVHj*K7$TVc_yg3(n(l1g}j@ji@GvQu8Ap8Azg zv18m@6+PWCNgd(4g_Seg)WIUQQsoc^Lq;+*C<9wixY2+B<%M_dKUgLP#MB-Mr^;Y> zqPd;mU0}sa(#zm|!`i`N!^Gz_%38{!xo(c56jc?=i*i9wA+|$rLz)rfh6LyJ1SdVm zj4ak!Ur<^e%vy_YD(HTs6`W?L|P8^4BzfiZ%nwZAQs@pmZEmB2;?q73t3UvwJ49*CKmA! zwpX!mNF2OJ79z9oRImKSBc$dsqmgHk39^JAv=!8~rp8thDAz1IyPOrQx|sb+b7mC= z?c7y25l6(RhN+Dbtl}i7lDNn~VL{Ikmmo(i52eG2(J#R)uK-7$4VYM)C?BY%zffA^ zska;idxbHjY$zr`Kt`b0G|R6JDaiDf;v5kJc*>M85`$?&0M_V%3%4*peqoeK<1dSV z>*}Mm#0jjKEV9WN`j%ag^5?i_YbAJ`zHnJHmjH!KD0L|8CBx18U||RXQ3NWgiVRJw z)GGEatyr!fG#YMN>NE=3U9q^!BQ^#;1I#L!w#xmc1Kb`L;8%f+6PeNja8z-`u|HF; z=QR+o%5iEho|#p)AVrpF^TkboBivL%p$p$kWn^4u_uzqlA5$p1ctnD+Y-v}$mzE21 zVyHXF^)}6HHkS&f#xPpkt4&!O6o%Uzm$5)H@qAx^IABtgvk9v1G29g-U`lPo;CPE7 z-ViC#C>OFATWfHfR^zM$V|6P$4>%vpNxVU!Ic_=%pTB&Fa|@}cT&$UMRS`>os*A!$ z(3<3lR|dgUKJ^Wefbkb~5bbdsqJx?5)Y|43(MJ^x^}3hqxSAb8&`}S97GhCEM1@4xYorhh zR@Nm*BKHJLvg{a}W=>It=R90~=XF!6hPx4|#du>G!g1o;B1wW7&dGiDc)x)LO2DkW zoc3H>I^L3`+fku8^KqmwXliZ*d#QM*Ko=a&W4M&L^$|5{>OUsPoS?CcW-Yejg6aLk z3qWFoPuyCqiyC#lCGNnpmA&F)j%)xHsCCir>Lf8u{-7pQDs0L0K#1X5857m)? zvh+n`j*Et848&@)U;}q*gfYYQIEwIMnD{rdq%B-r`13>~h*sV#v3YHKuXbylqlH!aVnSF8A>A=uc0kC?tMmXTrT{ise{h=vL&$!)A#WW%xeNF z7nie#B&bx`V^|8TqfbfRF!E-Vm;2^sa7cqH7u11z~*ksxaKA$p}NEH(!6Trq3xlx!BtWp=$F`m4V$P5a= zwlx=wvZ{<%42i&}ODzWD4)Fami2jp})xj_QwRaJQzF1RIKKI;s)buj3Z3xMMMH=W)*u9!cR|Ujbti@w4#`AqYS`ux$W@ zMz-Sit(0wY*f_bsyq8myY-%YG+JZFNq4f|#${U9991zXq>}rpuu;tX2#@1Pa00=P#Tok_GmF2}+xovaALq4veDCTkn+da-@q4g4UPXMsQEMuW|E53E2 zzV89I)D=f#;u)^u+iY@%OJY;F=($p(%uH%zX(B_#{1q@7jbXQ%&821pi<-N1uTUbOpHpy)prJhCnQ`Kh-Vo>*q0(e@V-q2 z%m@~Z($?7&>S*M^3_Q-9?s6qg7-m*ZcTrl#I|nfprAnbhGaSltfa(%d2nsZ;mPV6^ z893rlmlD}uzX5POHjjXhj-xhI3qk@f+_U(&Fj(o0%ZL=LuWje3W+TS1OUqc)xP(xH zc2on9o1G|VLtQ7_G{z>Km)z z6{A=He=|oAwb%=ZyN@l(-}P2bNpIiP;@oH3%0wi45^j z_)+EKz<6H-1nfaBI(!LAxXUp%Q6Cso$bC!5Yp4ZP6)FvGQBun=VMi3iFX7<@kehfK zMvhZzT3oOOne>aOL_yK0DM(a}m_MYm)K)HC@5C_0IH=`Dt|jDG4nG$xP4f;zC$v{N zu*rDV4+X4gRN}n&EESiaW!vI+10Yi`b^yu`i{+K%856;VSVk$mFahB_j4==K9;x>X(OSmLlutJn zi!`#5`Azp@8XxxoyP@-opgp^KmAkARgytjHW8u zmbt2qt9LT+{$)Mfy8ws}Q8|;Swlcx$HmGSP8@5h5VdA8zX>6P-Vly^%Z-AJM5J(Z!?~%eX@?(Yb98j6)KS&rNoWx z(LT~E5g45Y97nRP=4o5Ry*C7epKNPsY`9DEvf#zYwtnU0VwL8VzidFl;ctu3+KsZ! zO9Ex}D1Xrk?m&fNGgw`~z9wYliC-Zr%O8bCYX1PDWEm8(QD9jml&Ma^aN*Jnm0VV# z+Lu2v(Wo@) zY;oRvFE0q#z8078Tq5~eg*=|()U9yB5O)KV$PSWnQJ-`8L03E$RsFAdoFD&x~ z5aJ0R2g0RF^OP^r8k7svGWkJ`-D;3we?kdI6p*XAF&M?o+%>m+1m)mbM0h9>X$SX8 z$h6L*s`w(tf34tD{1U}Kxb5I&_dvTuH#}{3sA;v2#{PG{S8%vD1G)<$uIbo6sufW; zL@oaSvM0~?MIo}_-TWT}0wytNGV&L1jv*>nm*DsmxD~_qMMpx|jew@SF()RV1eOx7 z=a+7rgJApuTwBE0nto+DGGB7#QePFr^`&@fhNzGzr?_$Yd<8)Q7Vu-gQqr#eM~jDp z2YezEQ3f719bqte5GOyDH+L`z3gE{{V4~e*9c2 z<>_g0JW8*1EKr(01^%!e7I)!;$DUqJd;mR>xb(zx)UkPNcD{+o`gm=Rq6JJLEQP>^ zn3EIgcLsgLFFa zdOxaALQ+KaEq7WzB}_z0*H_a$NvC+6n5!|>yh!*0P_$M z1-;9QBk)B}IUYsdnvb#N1MEh)gjm9T+`QbWN9T=S6>%fO4t!ki<8d1FNFzxJi$-x8 z1XLuuisf;-GFK-7yJoVb!SkoW0TRYNr#O7ii{yYRPp1I=2~fKl*~Z}n@FQean~86V z^1^*V3no-s1`HWs5vy`{5N=&q(Ul!5E!eHg-TUxW@p0#|=POy^;vAkC-<6b?5fxYN zR2r0%mE)7balp4b*Slm05Bhe9Pt636W z1nuG28*W(N1+r68!+p+g$Bsnh{6vQq!RGc39u2Dj=P5QV!(XaAekI5In-UI(z$^Fi z4clreK8&ECPxnt22h$hqQo6|8l8N(@3IOBN$yuBRsuYSXO)&;agLQ-lEO4U zh=Z4xk@Dpuf^{E|9(Rdq1XY<9%BXV!Em+DjI|x!?KI6E%xZvHFHp(r%xqdgl#O4Wq zluC%{bpkeC>Lr6X7`&FTVHUNGk;;ap>QV|{f?58n#RasT!k!|1axDFP46F4dtJ^#S zJ;l4a^8AJ6I!Oi=#-fsMEl*LRLdG`lbH7QlX>SMTAJi;M`Bs4~XliL7Z+=}dxb zWmA`l44_zSy@*O7IF>?LE^;P_^zb^33v5%$$z{L{#n>=sZwdX{9q0$ANi23Hu+uaO zOM4?E??giRVF6iRWd8v5r~d%C7)$J|AoRfL@DfZp{{SrbrI74=B!lM<3!4XJDU?8O z3Djorc!ZH305*Q4H=T{UB_)0nS$WJeA)K=O*N6G*_^Zvw_-a(I zi7&-`cvciIh5{Dz)*d^-#!L4fzk(pSXB93sDgHCV@IE#Ci7Hoz_+JmgpnR%a5e?iP z$d3Fqef&C3<{K18N$@b{JGl8*&0+ID#joOi72tdy#51{gd#Bkx+4p%>rM=64oc<&H zH2wYjeiA7l`H%@hxqjW q01Zn20ObUHC;4yx04Ak>4S$@HnM|frDU`~T%9Z~B#jKV7FaOyao(Y8j literal 0 HcmV?d00001 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a55da2a5dd71f018e73172faa320db840628f43d GIT binary patch literal 565515 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

exq8} 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%0DvTXE{{T%FQ)X{a1BBVv6|U<93{JyiP}11e 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

aq&va76`X_#_GHzN&k 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

uTBWx7Dxd!zWtUG+2$5|@`#%aF}iM%(Ac1lfE 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

f z4dEK68du>>0vHJG3j8Y&bQi{vq@I2ksC}S=3EEjQhGjUWnl%qGC1t8`jfh_=EE9>8 zG>r&O$VLGl3D50(5ulHigF!Nma4DW@;pn(_^qSj&@~_<8h(fP}g!2;|B0L4&nT;di zYx_*W2w}0|4IC9c$Lb#3{Dqb>&_$@d-{3PcX22`QF=wGtlx0B{J~$L4p+yv0fR zC{h?L+?-*qc@zZ-_V=3vZs}WrJ&aK#%^Na+fg3}L0w-lhaq4wQ@UamCqz2KWpyj&= z?P0Fqr#i0VfSrQ%f;JJ%8p?`v`i>qTw1!Z$XS;;jcau^F3F2v&1GMS}triQngx?ED z$dva;?&UN=B=3NL^-Re|#khp?0Bv^pj8#WyE^SLuJ{ieT0qr>{!sYiPXwcsV6wxEOIKXt&G)B0Ez}%4?&vou@n1u$X1D!avFt1R+E+houalX&RlT znGQhMaGjJ)7J#gU%8x2-L09mgWva)wglQ!jmW?b?6~Z(i=1>w36ZR&bGJvnbc7G_D z1{RY{lCt0wQA|sbK4Z!bm^xj!B~P2XOMjG209JycvJDeWNZ~oqP%|eIfuK55LG~t) zyHQpIaGOK}PY@EECJ7aU!B_sJ+=UBUanvcMKpYeV%wczWjsZ?H2<4`|%|@Z;+%{0D z1py(ial4QbUECyw@VbM(Sn!3M(^+1|wA84839^q9dW8WcgG~M0AUvED2Z_X-ZFbg1 z7k6|{0v>0BpoVF0!iu;}2^dcj)`tZKTE__lj33WHBZ9xPqz1#Q+!u=+u+olEqPU5Il?wS^()R#A=HoAwx&Y02K>IwZ?RSQz^w5Q1C z&=7@W8yQ(4VZo3oK-byUk`eTEK$6z*Wx7y zOs9oS3sCZzLj@5~e$An2oS}NyBjsxwV3;fUSMESyK7-Oad4q4sZdGKMo2n^)DlCG2e3a4K={eb z={~=x`JeJccwf`$He1{FWjt+J@Q9ZtSg8Vn(FhFGKbt*a?Aztyyu9>%uxa4 z_)oBJr5_`xjRS^LjJ=FL-V-P~pDCizv`q`zC|9w%LhGyL>Gvk$YKj+V7*SV`Qwk;l zpHI#d_=#Zg2Y(-C;XBRQmZxA|h*SqNAr+qGzm{f1hH+iOIq{{U5jf+*Pp{&b2rDc|gcmXN!XkjYsg9pzx3wn97m zY$stg3p#d<+6UN=Ds9R)T|0rYiY7t=15o4dm85Y00JgvPVH~??+84@Wp{UdcaGZP` z0GR5qx}mF1^)vFF$n>M`%&Z3Fr-_-!POo$No>IDF#nW)|bwcWn;9L(U9@lrn4aTrlqu5=*i58BsZ-+aaZhZx^*X+wtXb43d8taHU{28AxdzZ6Fx(V< z4PC1pKAcPxOfk_$!qXc-w3wRP_SLOfXH46gr@2vhW8!3vIm%ZJK; zl=VTECixswEz(_I>UG_J4+#2uY5t)%%HEJi0S&nUMh%q8No5@L-%)l7ZJJGGKJskj zJtR~i{w(cWI2*L=wE;*XRN2i&%>yZ>DP(r-Ct$X+(~6)Y^&QjAGLMYc8jp5Cj(2SNibx@VZp z!f%<6NIbZFlGvE-OzhtNE$*KOD2YHN;EB-peS3f!Wbfpsb_pjV2}o+ zp;tzcsO?cLdr+xqDWv$hglJmEU7<+?gJsuuU?vf$4;O0@cZ>saL0w0IJ1qrZyMHO~ zhqgG(siOjjG)Kq+us;ZaWb2|ds3VmkgylG4Osy57uLx7QeBxA~Vqs|QY$KJ!aE01a zqC)i$Zzxz447>3u-)j}Hoa#4#rlqL1VCgi|glI@!q*FzT0^FwFG(s)H6_BjrRMHA> zlsjapP0BnYNOC?{OtC_}p-rI(ssxE6;TfLel8D|)ni$$J0h)nS;9lbKLu@0Li#4GN z76F0+HHgaUR00nwEzs!ro_-1>cfg}MYzgiG#Jj}eQ#@Vnh^m?F4blP{j)jO$5I~$F z;75lEhCfxjsh1hR2wl*fLPp2J8EH=O9;Xs?iH_RXCi#Ofz`b2An?)K>CIbPXDkKc{ zfy#AD-fuH#K=@0YfSl@=$CW(yeuqq1s`boDb--O)29~A(=mww(!Cfl1r51C!DaXXf zG#rF1#xb(u-dvndbJ`3Bk;>{4JIKnzV=5#D+Nqc7Y07ESW;G0S5GiTvT069~o0g3jLj_v^+W!#d}47PBSh~ALooL zX4_AzVA2MPaG)p}6)@0rjeCn~8sC)R4h?D^7;r+TxZULDP$o>8heg8axPm1EGd8M{ z-toe7s>ddXuesYsttd7C`(%DmQGyUR<2~fS8S| zf({0g-A5mU;Q^;Gr@Q7=s+psCP8N+KV97O2ySr5O_+3Vms6A(4JIhK@AP2`bf)>Y!XhK zt@vLF)G%%j%3z@FGEn!$N)#YdvK>dKQL{&ffqo&$8wL8vAC&VYzvgWR)eiTu} zD+eQY9VRFL0J15VSqDh$V4+|$E7b3V{h?#lWzvPu z%4)$WxI}qI+sgNRuAlOnYT}=Rh)%i{AwI~hLYyIxg~{5V6m825D1Y-UtCZ}N1t&!t z06xw1xeFLJJg-r9f;B7$Xf^}Uu{a6V>9}eWZu9P4=dtb4O|WK%1qv~xH^^Kp3W(^i z1X_DdY}KcW2QI7z#)1`q52X($SE5BfArVgZU^N3-QR?M%?*%^dxIvgUX(-^KU;;P? z){UMN(X;DB(fx8{yzmgP2hShE#E}4*Q!N_-HMQ{JsJ0x|Hp$j7ndRzrdP0t8Brc_c z#lH!*<)I&I&xOd?%3zWS;Wn;(iv`r9*!Lo6Ly^cCN6HTB|6kA0PF&HS15zt*j5*6CzHDDtf2zeR}fI|o; z4>3U4riq6rg5il#EpK)TZ<0;OTfqwqoF<7W*Clk!mX21Uq!c|vAS3H8x{on5Bk;4` zrK69tyuGgSrrChy17DK5lnb_uIBEtQvD0XQ;R&b;$VUCkK?|M`L{P#OM&S|Wa>Gg)PF|D_@Dr?fQ=hOkSp$`dqGC>yN_F4C z;Sb>&Km4?rS)HJ{L~TN1C}b2*ipkWEuo6h+G*Q593c0D&?nbH9OcD>u24m$qoy!3Y z?36HY)p<=m6w@y*3EpS8(L7MO1|RPEPtz>a%Cuv={HD@df>3k@hNkE`=y}-Yl=I`J zlSG!*vW8BIG-_pF1r-mJZ$O-8JJiQ<*iJH=@`h2rYQP5NG}o#^=~u$+o>aqwMSw@n z-5<&#otPyy?wbfkfzfmwNb=QNxS?_mk;-t6_Us{8BGOSbBWd1I8BFp-BX@8UMS6~P z`JfW!Hw`lpgokNu| z1P?0fx(7s@rW(NY{hem~YEZFiHUJ`q0s{M$at=XJAx#{LH3kuGPY7O0x$Mb6V?`4( zjZqd&^E-%7qq|*m3Bm|t)KLCZ;HD1S?1d!rDr$webZr^{zz{PoZO|18V3qIr(v)xj zS(Ir5K&JX?v`#)z^)+0MQ1y+xqi=)^n0CGtcJ>e|qD$SPtU%TmLhp(xTgM0i4Jiy)0r+HGYM z;wS9kW}s?$PBLhmR#c%voFqCI%JW$YcJiDmPKOH+vIi(wtq`tY{jfgSgn!uzm_e{g z)FJlttVlxbjVCq>g40upB@M1nU1xR!+vcXx6g|cXS0(MT>7M8G-kbsI7Plc0e$-Ei zgJfxUkk_zX(2Wmb>7L+vcucFHEF zIY!6jWTSXN3r^E$h1V$IqXA{4=?^!B8=sW%-E;+eomA$}cL}tCqKKouQ$%-sr&N9r zy6%7u(f&G-#(%VSo0h=^wFK`wgLgv>>@ZY{0?$9DFRS%)$l&b!A{IQDF-} zM@S*bg~D&xU1mPmKPc@BLL!0+6hDMTWnihJeh^xXEKz6d+FFPhMb&L^ntOXfb(%7) zL2g20s^hmQ@Pcz2T~j5lb>b5#LxP-Y(V(0p9zr!Ig@;0MnrSwUrV4G4^161KV)q{k zJcDgdGO!TgWP`Q2LdXgtD;y!}5}8K!GQfm6Lg27ah0Bn+F_r3ExlQM2S-_wpxJ-~x zxFaEY`;FXA(`ZL}bx8wh!bleIqvi#;T|qGS-O7BVDWi$YmKng|AMqURub)rC7Cpsi zaI&^d$x-WQq$7yhHLnZ*!~jAO00II50tEmE1PBEK1Oov8009CKApvCBHa|%EDe^Bsz%+$ z@KWVRaoN>FeMDnOke*pNwM4SrnrSz&(j+BiF+#_uXnJ@SnrExrP$dSQ4uoMWBG}t| znP`jYc6ABgbJj&+qpB}rOAOLU4IM8$lXZeEzDbSdhLYru!;>VM6sb_|uE<=O7+`HA zH)Lfhq=hD2k~+?`b+S~(t0mbH%8Zd>qpA2DjmWHyF3yy6ct=E!d1ItZjN{y-))~`X z$FV=KfoPo2yN%n)6>NHmjj<&8N;YLN6OAFVGA4xSjrCCs zHaQkIY(l`wX$vD(Jac5*NX{7=O}1N`q-n)LCdaCl5mSAI21U4vY4$BLP|gOL>^v4# zh_X)tdvfYxa$~^SI@#4_OTeQfj+v)+E~1}I-488Hpo+1B`Rd-rM;7VD+ZjR z-r|;8>|}_VFy7`okEN}OqOSy_(k57?n&g@!m8#_=x=|(X9T>61lt_{ssctExi;rd} z%elHLi}qwUgEGmd7{?=%WGM%GYD+l zq(@FZM5Ed!2{F$USs5bY(Bfp3q&6l>OtIBuQH$KvimW2$s*trBNRFfKg&|0?%SEHz zWYSLA2b)_Ddm`->L%`d!snDZr*mdNqHf(OrnKPzGLlUL9wni9=9S@guStcd1JhYK% zQX`f^7ffeTI>jeql4P4DT{zrMQ5&(H40l8#C3_EJqD)Y&$uy3k&5KrIa(%|+`?|dkq&+Ojx-Q%QWM3$0W8M zqheMhk|`8)jWj0tS0}j}5~?M+NurS?uX2%9+{tHE9e*O-9aLDIvARUEiL8pY8)&xV zIAB^wK$UDkGC6L}l=Ed{akTKv#8RW~C9LD+W-Q>Gv6&;O;-Ql37HZ;8~<;ED?U=e4|SwwGg=`HvF0XBdH4|jkBS- z9V|+Q$7Xx7RE@`C`L_S(ARpf2#McVm^Y;=n|nJk+$@^t*l8>Gmql^qoD%8}IUvT;mG znRH7cbS`yFZT$X(t>l%qh^&xFDmINBW?I}(#gXah$?mjtuMB#3n;aPFU`BkAT|zTs z81AU)v!lqMdaCYvxBNrVgZ<`uxTlLAlYQt~bC1kjYjnk}*`wWQJ4Ds&Hm<1F`3rI{ zsC&@~bhVQDni@$}mX(s7vJ$%$Sr-!)bPYTaq-rN=kK#hcpr5>DmeUhdK7w66nH5~H zw32EzQtf_nFQ=^k|#TkHxk0OMC-xUs;IiyQ&cyc zG0PjHaaE5vBOXg}--D*at8$X;VUCgb<- zWss`eYbA8xT}h&Iiu+EdCuHE>NXw<{MaEsknHaGqM++!%sV8Kzg$lV5f8q)>tV3L> zvM~}8D5vCden`75MCv-Ib4`wTA1kINklqh?dEN8X*wVKX?+x6H5tR{kT?$83M&ij9 z#LH=rmyt3xWu#gx>$9qu+kMDPcJ^jlp{6?>-^3*RmC9|Cs`-}F&m~AgNvjriIu*M* zQz0B|YG}q=D?LVT#|f>CH!?OR(Jq#Ru#TT~lG78or1@Gc7MW^<(micwq+JeZb_D3Ch$dz zb;|OGmZ*J2OZZt*@LaiB)kjs)Dk>!kmS~jilcDZT5$UzLZYYkYly#vo$u8u5<4;BI zHB8oC>UWY6Qb_1`XW0~OftfB!ke%SAL~({VH*UnF?<}kljb_V3nu*rga!67lCq$Z| zmqTrd(B|4%{Q1sRorvb-JZ2=M^r_fnCwo4BxA6XW4kq_&_YUUaoX+uQ8`o^!57pxQa$1cw4IUC zjGdZ#aYfQE-8l`kXp2ZZ+pCmyh zimmzM$@rf`rT+i|C8rmJ-}CbIGaF(?_at*_AhjiNe0` zfkD-+h(`B4QdLUFp@jA#rF#*0ER#uHl4-!vcd(eUNtaPX zxbw3riMIA56p|AebY4j`WgC)`dlB4=MP5xtK{_jy=djcH2)k_6a(aXWtfK>>P4*ty z7rM*7OuPv)GNY>5)Sk?51C=4lCtQ4sR-LI4*H03V{ZzJO^ygmdwcvVscByo-GSr6t z^72M~M5cu_u?l?H*Weq6ivNwX=-H}dl8gUY5QtpjcZ6rZbLQ?F?vQCSWB--vizU?3MZ=;sxaUZe@Os8| z9e5OlB-v}Rc{`FWnRdp=?jo^7ksX-tl%95H)bUnHT@h=oq8LPNv!yB=d=hyjACaS}!S|rClcz^oUCgnuCq3cpN6Fqfb&vD;tcK*&JFX zuBg(~=}8|Fvg@(drTer`4$&5;Mf9|hbcEcRMx#*0lAC)mY)2wg$wwmC*O$0((#(n5 zgA@0XAe^el2AZKV@J4lN$x6oEtc}|&ixVRxKQv<)9Jd^>ix|x&nHQ0_X6=a2g2uDl zUM=&Rsk2Sp5o$e$CE%0!j;nG_7$(q!#W@{W6uxEb?CW+ZmXlngNgFZSC8ZWmh4CRn zS5LLCn6=d?yfO_@B;wUGJ=r9a+*)PJOpc!!r=C$am+#g;wxHqR+DQTyhL*jYz~+$xzIp-}IYABf+`a;32KGHTt~p{ayILt^D2 z+eD3!t?qUemROrcUc+>CU{k=g8P?9M3E8ljR*6ESsbr-7C6nR#6>j637M$9!gy3O5ROdjWQnolk#OsnF%~# zoR-#gQ+XS*%Ph#93QEY%C{uye4a zUO%bB&mw-O%25KS!kGAz9ERy(zkZ@9?vQWS*CV#>)SPSUeVakQEsp-qab z1X>e1n`qX{BRLN3o9VLP?a@=#xQ#B^iFUbUwzT%UntXPq%KfWqiesNJbS44HryV7tEY8+9RmcvV_w_WsDFM zmC{3M=xAwO(T1{XXxe=)?1E5}UI@Og-D~YVJ5frZpp+)!_OUS6ajnSt~7STE4kBUZ?l8Q`_kwZHYBQKcS`InJkd-pBh!Zz9P zyqX${NY`H?lVlj~iEM0y#Lej&K22EasCFy}QoxvnM*O;vnG+2Y(oXY4BPcg>W}dZ5 ztXh$maZMF$rct}0syK}+lW`J`ly6f~<=Gy+9c_)T1e14>C$kh9Ch0Ox(i4qy@5wsu z%PkRp6EvTaT53peaU?}`HIgw=i8-O%+DOpRQCTpktdw>n@-2t6Gup*}{{WEw-{^0( z{W)DRyYuuOO&v!EMY%;})Qvre?p_H#$K(A9@*_ zokpC5(a?$M#imb(?zc32N)1{a|s@3_&YtyG&E>y0K#E)Lz1WVbRgc`nS^mC2IW zzFQWbJMUt4cM%IAx+0S`BUU-Mza^)d6N!HIA%Q=aCdWkg8ckC~p;9#Udr;aZG|U(F z4T+YUMc0C?*tPN&Xr-69n(l>9u?eWM5>r-~>#*fa^_GUo;iE=12#wW{-;-xoCWVB_ zCwM|`-ovZzH(Oa^PrRGYMt8sicWFn-A=@jaS1S-rTY#_M|Mj8j^38A7MIs7ienL(HTDkCDKAslFsC`mgCZFmYen(HpLGjUKrT#6QM|Q?LxaHCYf}G)=WFGGE!D4$#qkqHv5fov|#%f z)4j|h)9z#VpU}saB&bWtlfkw#~aC z$j$S`j_jx0qMKWPQkvak?J8KUzR_o4I(Z=?8kGI*g($s_gwIiJ(LENB;Ks04QPDzF zbdgplia8WAM@HHKpXqh@zpn2_8}7P`uJu`CKrxSK!~oeb+trwX%LiNv6B8A& zjg79MvGRWpDH|QlRNAy@>u5txr3p!RMxwboQm>g5XUq0$jxnE4u! zYb0+1!yzLKT4I9~S%ilr;B1uE$5JCCjyKJF*=(~TWSFGLG(g^kk#d168n;7>LXD!3+AWWiklhkf-6Kav5_hPwYscSY zKEdo$$!@4wLs5UaDjGtk*iY>jELSIehB=pUl3t=+;VlKv?HpXAbc}AHBoy4}LM*`*hyN?2h z_a!8Yvbjr>8Bwgp$TZd+QLfW%5v<^H7JCXQvdT=MqaB2pw=BMSG@c!uF83CXQrvnK zu%JpbnWr2xPkn@yp}ImQNgPwcICX)l@+>dMl}f~(ZphNB9SIaTvnWpJalo#~{#TVlv#N$uw-_I+12taZzN=C)(DBWB!sJ)b~;0$sPdtV>~>`$lI&_rp*kG8oxVuL z3-A*8B9~VwQ=y5~i|rQYag`q1h>NFUl4NE%l5LM0k*4izFNjK*-J&*0jN;NXqN!n- z?`3~;rmnn-QnXc_G)3flV9GBjXjYmbF0Ia&c9|R!k6sN}N)i*kOJ;a5%CcJ>LwDTj zWAZ1lqN+%V4ro}j9GXMq`7!gHdZI~F*tg(K3q8>o?(pct>?-P68Q~34d!7%#t3E=c z#ZQtVg;ZV*Nm-&H?jlp^LZ4IIlflGYue8&Tx{doYf2i@*_M0LyqY@lxi(-a~V^0Kb zJ=qs%QTg(m6s(*&A0*L2ERf2;sdpPkicHdNQ4NKP_Fg$ie4i{}c_>?r8qmr3n61#A z3HKFa9Q-lcC{D{pN@XqCSi#dPIvo&FR)(;4C3b0v4{;i^r1EIt4A#ujB9e---S<0V z$gQS!p+^=cCAg`M7O+O%2Ch8%Y)F8jnbDGZ5t7{1)0Ug6z_2SU>{9MdEjwJ4Q$s$c zmA=f=ju5T1S1s4EBv9*>m5VQ(6N+TwRd_w@d&qk$k{qK-gwsWhj*{OZ?~zexSzD0P zQhSloNa#z!)AAa;6-8idYT2cCLR5#jCrEz$=*FB-rlgHb>WN_%Ce?|$5=Ti^%%?v6>Zs@xTI?w^tum<^no-n-*)?>frqZI=ljNzPB=Ap9z@tNsMW)|oX~K~m zgqmEiKaqGWY;Thpx-XTb&dKSfP6LWtu@;WU;5WAB?DA}uf1!4tB_|RRZ5G)X=9tE; z`4U4&)3n{0>E*2>N*&p+shUQE_i|KTsIXG-xmgC87i>a}k%JTjEr~Z4utHIrXF{TQ zMN7feB+?UY2{L+1Q9Cs>99wiKxeHDC9At%l3w{R+7LgcJqA=K46Xj!kp4{6TWr?I- zeTx$tB?Qr_r$|(;>{Xq_eMaAwEN{WZR{5C7{$9$XEO|wfza*tKel8V}yUHKuD>}W)W(nR$xRc4$d*{d#yBxxsi$)mU9 z$}y+7x7iSbav-XOMWjnn&gs%LbvtkKEgdm#%T-8|NnMXoydfzO>u)UBv6fFsJgv@} zR4Af^zG5(2wazQOokfj|ZLZ93y$S5uB^9G|VVf3pAq>H3@=Dq2qumQjPxvU*(5Gn) zWTLZWtl(7nU~l9nZ5%vp+1VF+q4R#knXcNw7~V)OlTuxBs$>#L6g}}m-+KHFzj%ti z;*L!imae%@3POcH-RU}Dz7%7XuO&yPC|YS&Mu@2RusJsznk$jsKP_jZa z#@}XbR>r!GT?GCWk-^7)PTyf*T-N6bxgq89LmuKKYnGzwkqtUX)tz8cscb>tFR)f5 z=?ch2w~{gFL=>d&u94RptdrKwM1v7duK7 z74k=0o2RLE%^d}&1+%{9tM_RWf~Nb?9a*YsStG>DXBfYeFGE}4mrR#q-_yg7;wdIN zp<@IU2##_zC(3$pn#w1j;x$htXO_dNBC=>MnAoz5EX!qMm75Z6jWeRM&0Tn`CzIcq z4L7?&REIhm`3mo5Q}D>D>}ja^C#kYVoYQ3H<#9xGU8iH0XyN?N@e{hT5|Vc)ok^!A z*$rsR89ID1JkdGyw3S`?8kE?oJF(2w)N5jTjqY`h-;&weaypg!!qt9HTIpnZ!_{nh zjP1t)gCS^Y_`x-j#oOKnVT3t0LyNeW)F=E(6 zN3k8bHf~EoGTfeoM&Ho&Dw>aiv)407p8 zQ1xPmsVRIT)7FvFDAU-aMP(`@h~|d-ns)XrL2Z&+k*m5Cy5y`&pFN%t?_yIZ4OO7Y?^5(pAlD6V&b03jqmfZ(u23PB6S^|qxz@B}Nt zmOyZ6a4QriP%OcvSZHx5#jQ8{-tX^^-#-lV%$%7slk?0obLO1SLGEQjWM0QD;aZnc zc{=v8E)sbmc<;u$*&K0StjKjDUk6F_rr}1Tx zOd=&fNdoOoxu9mkI4>lZ6BkhqtL)p=SxngikUUAgMYbHy(*06?Y9NhO7Dpa@RCJuC zX|F2%dRj1SqP#VB^%EM7-Gl9ubdoZypT_%I2(ncA7Lm5e_}9L!&d)B6_S)Fj5QkqlF0yWgWq)M< ziHWz)5l$c|!4YQ;K8aO|l2pI-LRK}y5JOk&WX{F`ZBgoh=QMD}9g!q?>Fn(aF9qM{ zxRe+2JS&P}N!7y^8aHu}VKoA4vdaSn?$k}A)do<%7oV`9E`n>pF7)YCM&6w5_$rSc zNKZnd83!}el&_uuY<~xK%A>Za`{3-K#CFCYKv>qtTnVgGaMMs7slG|BL7*+^+o6s` z2nz5Ke;~@BFT<9AI5*z@=SmW;A=j#m_!O%n`!S~Eu@;mi5p3Dbf*W%3#|B@byEfQe z=KTUi&jpQLGw?`5vvz?6@ztx~zpPmp$CDCRPt#A24lKFYHj5K^_$A6lKjyuuVw31BE>p@ME3^HnEwVo|XBWvHJV2Zi7 zrcUly{A(QRxnTM6sjqu$ux3(Tt1U0JJ@`KxgbJw)U{QTF?>!rB8#_4xQGFS=xxy;9 zyfugJ=Q_dsvI;H{FkcUyKCDxNsqxMl2n=wYp02bM@mkP!(frWBT*%<1=PZKbyrAQR z-gEK6`)u2mqU>S(u40QPu&2%mp7__cq>+5Vh;k+YCsTst>J%Hr}jTfo?TZ>JjL^uHK2G zK|+}^`>yIfXyR^ZB{~@2F~rT1>K02Xr4&v#N#?MmHukSy>%C5rNrahM2rXU}b~riK zamw4qIY3lv*F!T;+2ZZ_XQIUTW)p(71v#JuvxYaNhd4L+yrQOyrxfTl43@F{T=S&i zYw^$nc6l=7MUDakO6j88={%xEw!wU9*Y#Bj#SOL~?a1drYEE`vUMFMRw9b<)nXKMr zg8Ck_AUJ{Uj?K}vGRtBHIXXC&T=X3ILUVz6LBgVTNuH1qIy?Hu9~lk3RX_4%eow1*MhSEI68Uy88(#mXZFwJ_J7sp6ck zyQ{LTOx^)%3Toj>8qosLdl%0IKc+OP=mi-B3+3I5)(8$8B!vk?TYZ|-2p8|epzcjaR7sKKq8w}>fDJRw*5oZpi#XurB_kotK4`bLYM(68@Z<fUD1TcBW3+F7dfe~H zFb{B_zDTn-e#4kj7 zx38(j=o2dJ1~#|)bB;yMHAgg4TTXls=O`|sx4Jh0UY2cXo=rKGH&uq`cS1J}&nbslyi&><4EToG4UDnN$~Z zT+Rz61k|U+eKcd(`(sYwvrmeh?XRw7zXMysfK_P$O!%s0B2o<0)lk2 z>=+-O486`9ZeDEgcffWlCP#}}yE|zdI;?dlNn9t=bGXaqceh;#vOX+&p9JOY?`;&m znHjyX2M%^*?(gc;T@Bh@ZaH~9!F7ox<@S0{>s)*NRaTu9aW@mnl2qb2w3x#Pu-1MO^oZBi8k;&$q}i-C!qJm`oS~u8F6r(Q-Sn~$Gr@H#3G};GAnqrP?bHsj>4%bC*X zoupWyw{;_^LKcl1YH~<@o-ciwxl|qNebE)G%*BMt4ugV9{%Z5w78k66E573Q*tPJ- zcE;z4PR^{UEzKDaiA1BFq00{&+5+FU=m+!**)z}$cRS;n*m4|NH)tOF7Wflu-)>8f zwASy>Dgh0gK2~n@l@m*~yIz^XyPYr1w6{O%Ei?%yM%jxu=KE4iCA=WzTIR54IQN!E zUxfY&Y0#kK#KD<%EE8gf$O4D_N%H!?$K%WLA9nQX_zjNEIXK#EWo;O^rKI!s7F5HM zGiUqb3d)hl9vyv$MlUmlU9ma;w;5?Hc~pT;l)$U)fLq3r3V<~TJ?z@I8u>bA+{o4! z*_ZnzRARRF0_p&vV)@jDAxEYXGJAh)HyFGNrT25D_YWOxqhw-S7Bjy1g!rN`DJ`{- zJ*`-Z2Aimfph)Orql9>B{I04xQYMZB81C$a@Q<&V(bPsO)fUt^eB7TX9i>#=J(nqw z{Q)1yHVJVCLsHj&gZ%{*F>L8MJd?5nWxhDovm4TRF!mA-L(miyq;Fb-{fFXPqS8G5 zy+ivi3Ltojgaqk*fvpJgary^gNA3N=%V zm*XwOVgSrvP+`GF%R4oO?oic&j0=1Vkj=jOdbyKa2_Z6QR7F zHYUh1VdQ7EhfSHxYuHT;Pi1{Up?xn+oS)(jW#Tr7dFDfhFNEYKKcbrago;wg#!Qu| z^%R}r+zM^{grAP4JC@I<55djsNO3iaxSQ`67b&njh$t`w!YpQMQe)R3GGM2o$^oA# z7CA7B(Ts3Ss>&nzl=Xdt(2WhsYwWFjhWlnL*xZ_%w`hW;9*<8+2xZ-s_Dwqsv`1}u zil}ikSC*tsEb7Nwnap9|JB4LYh7Lt&N(tt|Fr0GBrcA2T&OsGd5oGx;*Z zL#FLa(>%6=!R(wViKnI+GG^^Z#M5Uj(xFUPog?wPg|E`A>dzE&>0Vt{OOn4ztelTo z6cWmR&S4W7+mmN4X7^2KAxFZaYqiYF)j(A2+y|V@`1&N)G1;-`l`_w4YHd;WQw-P` ztSprGBp*Z5I=MiZT!)z&NO&J^@I3&gD@a*JarXGbI$$Wy987O6tfRPHa5Z}MSYf5Q z$|pib^qlEP@7>DF_QAR#U)ebMI~0^pRSFny zc@*;g;X5F%0K$`*8_k?KLvr1P%%mB7`nPg{TUuzcv8JXjL>C5%VXBp-{V*aVY(P@B zva8z!8F-ZbL@;*UFcs-HUf_H2c8~b)m z5Q*I0zn$1uMhn;c;OC8*q#z6(->-dgX({``^q%3t3ttCL&^e=@sEdPqZXxWXz!@#V zzcyIGtuLA@fsgIoB9UbklYl-zA5LYXDZ2UrXSyf-Lqz`1X%E=SE8U=>z%-o}0ECr1 zFU@K@XBzw0NL)HNOaPiHG4Qcv$Ta?xH9MQ$4*vZASk0)Z8V;l`N8!p*IqV!e>=l#C zBt`R&%b=E;*ocQ~u~0lRs>)wbEhYgA1L%mpoXvQW!z1#)GY9pc081@9IM&s}w`m9i zIK6qmosR8rFf~gONPL{C^*%{{6em>a^SKZ&Cbw=t0r8|p z*kJ48`1Gcm%uwhvL`9Jz2EWjHtAt9p~ zz}u=Ui7=e_$2E@wBA*DXO#s`dD?i)2Nz9N8^-bIPy%Atj!#x4^)%rU9L@Fwo`AKOx z?tnT;*~~XsH|*;EA;oD@lX9yGlYbf2J^`x(+W#F@mW&OuPz-Ldan78zUHf(Cf3^1f zC#?{$_^v%rJaYwj9e2TcB)x*gd*;Hly_OpQj&V=le7?Gr@V%4 zmdk{)H|-vRX9o2%l{biCb72Irg^a%BIR|QsoZ;*ERl(k_wFWjafKC$*GR=G)JyTSm zQ6}{9$`=*HiewA|VZMEcnoo1)8Pu@mvaTA@Pjl$4D0cq=*l#FpbU=CtOCopidbnD* zDgJU!Y6^BEKv_8*{XLzjhnb~?SmYo~BBetjS!!vx*W`mX*-oc}!J8eu-If_KU603( z_n0!BhvEi=Kb0nwkSaJ)#Ys}{quT@YUlz&v6&-&oD~z6g6&KaPNcfcea940s2jigh#)i@+B zV3WPEh^6-T>;6VUng9!p2~sJUNIP~1E~Pp%mC++XH&L0EBBT5|QHLlg=Vvx4efciH z)OsHq3IC}|eRO{a;uY=;)3ak`jFHMP`j9`u_gDC;22O*;epVzx>8}$7CeA9&KeIdU z2mP^*pJcS(HtLw8&MN*Gr~2B)mc z3~%O-tcBT3V21@WzXDyiZ5z6O<&2WiOF_4tW~r9G6osz zPg9mU;DY}LuP6>Il2uZfHL%nvY7OuGsm;>Cb}GkGbV(U-;4v~^LJx^9G=)`$r8M!0 zeWn_PPWv&V8Xe8NF20^K^$3@lHaEl(}M5$0EhQ`$y>gTesgv`r$Up)8AsB} zc2k|)jS8IAdZFxZA4d9XtQI1dvZ1Gh99C(?>Nq4fJ-D`{YIGu}-)y5t;!O zTY*xGawR9MU;I3qm#-pz`L!_sFflB!5zGNi{k)6}7VmTz-oSXL26)8lu6YIUd6`}m zC@k9Sv3a~iOA-v$ngi(;*;~(KPwcYI53?z@7vT&A5s#g($1?{Vyo1^+Q&K10LM1nx zyY^Z|lq;Q*3NzM+KNpU4SPG(CuvnIqB1kTD@S75KXJf`#nW*W;c7=bE8u@8)WKPGT zWp)n5-#DB3@nU^`Ih)5f2>iM}kav+n6b{$`_8X%LW5-Y6JNJ`Hw2D3U53lm$*jJ2$ z^)A^g8(+D?G;L+hodUK(EAd`uY(TSSLRhwF?S~0gXCYzv!I2~viT<)QYLQ5x-z}`HEKTC@FmKP zyp`R2Duz28h#78fVi!(t6n~j>xt4z*!Hj>jZjjvbQ+(DNSTux>nrPATFtFfGn4SGN zxVrboBJ(xT2D6;8?(PIgcF6Mc9!mYQ<;AXt)0hg_x9~+r@b~5!;cT|+xr!1Vz4{TD z0{+sOO3uz~5y|TTA+4q3yoSQ6BAKPHJ^HR+=1huA&8=h(JIGE|O}I&3Nncp|x?RXy zF>7VGg6UVv!PV}sKVe3%7>|Y*GGC}ebCv)$nQCLbH8&mK9=qp0_Kn$Vv|=7P3O!m= z4BGiiw|3~Kv!dYzhC_7Vnahg>_s9anZ}vxZohmS#uj$&{BV)sD`SkLuhoci7uts@x zV^bt`Y z%aE!AFcFFVKo69K*~TuR!bFELQbl(sH}ZHz3i^Yu zt2m-zO@oFo;@%tiB*D$t9}68?%P5`T?i){ zR@>*4|L;!_<&t>m;2u~U(VCenRl!a;;r&{(JvQCiAxn#5bV)Jk&;OSoh;m!9V{6D6 ziHvBN{84gaI9>OHp+dvjus?q)nY+@2IrPy7iQ*(6E8t)X=zD zzOqL~G)MS#RNnYsUuqyDT5rSozKqRCogYV3-n{WCN{1 z)CKvn?xg*CE8Oz(>wn3;%l_?SdcJdy_GresKXWR-%HRBw)_l{{&wqJ9Urf+Q>X*a+ z9g2V0zmybn8WS2;ZWrW#hhTr&S$YF1GYhewoIZ}Jt}feh{5I&5`((X>M!t0v3WZ+g z7jLUy+E3m*Hy@>q-GCMW$(#1fEs{l}?9$`cop|VF%9>)LfmT5$5z}gG<{u<$+a=c` z=T04wv$Yo%uaKu=MC-|w!N7e)ZFEc|Uk*RQDIjP}RP(tRuuSShy{!3#@g;8w^hWW9 z!KA2jIC=cU%J90BmLV*|#Shhx*}v{cYG_SvPWu%e^Dz{Fj$a(}J?Q>)9u#3J$sC`0Frq5(r(yeXlR3c+7U558n>z%G}@J4cYf5hD&AypQ>hHMCYEf2>}ByAC_g z53lj7|BgaErgYpI^;g7$GP3=~z@{1x@1@TrgH}u=wP!OTz9+JP;h$zN9?wFCf9m}* zFK9)E&>P^t^LU#R5wkhZ5DvU~(0%yp&SuXhZQ}mrR|~!BM-E9L$JqfVHYvp`IL9bf z+4Sd!8|1vrSCq(RfGNJrcVhD7wf^Cl=-FIKaDXmD363bY($%J{fAJh)nua`Dyd{yj z!@mjDX*um95}4iTTQ43PT6$K}q93{Fe7c?2Nb{MA{H}Wxr@V8$d2772Gkkr1Ycjd> z>rQ1Su-?B$dFKdst+gsQDIx-t%{?c|0o-3gIx_X=o=74ljZ$-X&fZpBCPVFS{4d~w zh%otlo0A$E6n{)nAqbw;3dc5BN=!9P+@0SJb|6pc7yiF~Yk%EQi!hn`ZzrPLG<3O{ zWU87@=jD&ZuYubd*;>%NUiGXAtA>HBeY^W*kRjlKF@5^ zWM1WHt%a1ZN+yj$_OlM3Ag;f} zFm$;~9iA*)i8y`Yo$2b;xScS_OR7#N+ySuVQj$T5qDm;)ugG4FkpB5%j~{gsX4*1& zdNYHmRVkMh_ky{+5tAqdq+{d6ZQ*dOfMQi(!H!d%0t-Hw+#DmvW9tc#|3RL&*9P&* zSQ<@TJB>2yS{uejHSo*U1Ve}}#D3Z4Tyx*^JhH2e0yCtf%+6wSDA1~ zUTS`2nzMEHAFITI!ZUM8K`l6Hq$XIzz%s#p@VI?a4RKVudc)c?425kg2yg8Ji!e2n z_1`uu6aH*(R2Ph&ntpYH!-h`2!fXe9ub0!{;N;}Ck*g<^ag>(n25ShY@$-A$!&+YP`2ZAQ%Gj6YH%Ui#9^cVUhDFoTO3#2)+vX5#3sgvgDy_B9|Ns`YIbwuMWp99ChAtxC-Iqn7N456pp+UQFvTcP%` zj1`B5`?VaDnAv1Q{gNK3tinW)Mr(^tyTaDfGsFqz3zs73K>#?M*xSHny14I}0 zD~>0|lmwex5j~VFg*#F=a!)P)@QSlc3ev+t^8-i&t+<&A_!Q7?zAkk#dntVxt{b5DPs3^;LNt|h4iBQeNcK!(U2;y zG~xnLj%i_VkJd z_+hke{$94zg`u@&US`DXF#P=2od~PWTU7Yi`S-WOT3BPRQ|1#@m2A78V{4;4!-nQ? z--vwz9-uY;Nw(MS+`aUfENHO*nOOTM*y1KTGXL!UC!l~g0s$aVnPaMDMTyyj$ifh z;(py}@65jambtrnW-g4uI8FBocNoNUF|;OM#;>m?O3iKEOpV>Y;{33A_2YI;F7lch z@%{R>--~qZOqPNS_qsk-Q_=x=) zhwEoaQm3@2MXDMtHUE^6B-Cb-af)!!q51~Efq9$M8uS(dhR9BpM5Do*va~%0{qA*G zmM$xl9Kz=-wK?K_bo=X$&~u6u4S%aEyf}HczJm&jyh{96%;MEV6rMarHu-gw;0q=Q zQni5Rx~D!WSpC5JO>%yDIXTwdb2yWPDMkZ$5n8>VqU}Mp1+BCz^u!&8;1JL?%jEgk;cCXr^j)9)yXrssBf4%j zBmIZb;~{~HC6qR(-*w@;b+#(hw%m+GWZ$nl$36%c#L6*#Jky}#!Qt=#DJMWpr2A&< zLNOsEzw_4}hS}qRo8`N%ZDg9bO^-1W&H%se+~du#zcjr4p~ig+xWjg>KZIKr6F)_rB!>n6z_-P~SO$arZ&o=FtdxQ*E{g#Nly zpfUI=0<-?TGLx}*z2xh<4fZ6YHD&i^^Ckh`;uCpS{Zf$-!gS?$bK&Kq`kd@-0#lD~ z%yik{W`EXDVQ74Hf)2m}9*#=NAhQNuwN9+jqU3HznIL^MsNu8^PFPK5@$7$tcbm&%CoR@$#PplLhcBN}pARz-anw`nF zN+AyHeVt9WFbPdQf7YDzVS3Jn?eC{DiU|?Dk&}G&tDOw{sOzU!6|)9YH)EZA`$F!H zlvj~^zwUH}&C9OOR2{wT?91`{6v#;Urx8vy^PP;#5vm~eZ2NEaeVXQ5@sUPpnYZ&s z?657KR}MfA3Ta4oHFG4c9D8~Y*CeGQyVbg6gPVc7flSG^tNr-vPHc{8y1r-$O%yIQ zLT{Cpcrzm}J0Aa#jdUiQG1gp#^R-BwZy?cKu5hEs-_PO9u~y?gnS1=5W8d8Vas&6Z z?&nAAz%QN3p;)2TRCGT)OcEdUVsfMDT}(8dOvzdPB&vMHq?-Fa>)u-!{iY2K3J!stn*Y! z@vl4S^p9YYdNY9p!1u>LRC#mAJ7KEroRY`&%SSaYgEQi8{cf{1Y91ZuMP2s}D3QRn zxTmk8%|A)hMH`x!n_HfR9gZ*@Hlus$kD~Du!K04eG3hcU!ss-Zz)LLdo4R&SK;P@QPl9Z<36ki6RZRCKRM)7b0e**_6O=iCk9|BLrunc zY36N6ZX3oIVJXMu3#LNs^i*F=a2oRi`>2LY3K;>r`i3>WWz)wk2I6Qn1f!Ih9ISks4sL0r|-*;*Zn ze%)#58MSIP%E7OP;e z_~)hAb!9$B|F(J63Vz3hBCZ`&Ev7sVdqpnZB23XfBF*m=2vX)*lHJFd?8W=)$zIU5 zgb$yjwse2p>5jxC$FJ4S++P<}IWs*I6kcVUb_dpy6-Nc*R~sgenTHnC= z_~idDpTl**s7&VS$$W-weBR#B@@&4CZDKe*C`i#wlOlIRS5r(q4~NrGDIYIV*43mw zlhara#_Q9#OD= z@u+^han|i)trd!2NU;LOWKo;TqkY+GZ*VmIfI+V^H2J%WVNsawc1Vq$-OkUtNuMjL z>n|tV{`;NJHFVd_{VzV$D=x3yR-UN3-5hL>ne{hyp172*cgA1VP5$WY?WjEAemzgq z+ZYdA*k>hcksr55K36j=(#ZVzd@2MS$?(mk{5bQ&?aPoFNO1Buhl%5Nw3gL$`L3Zq zpHGHpoo9Zdwf5@{I^tzWvR<%#R$d{Q*YP52TTSq~Gb_LFQuiW~#>jEzQA9vUGUV4C zsqZeO$N5LM0U`O2NLr@sIQ5oqbj)~5it&2)L>=>kZ?vy)i|@Y~?5+LinAsNJ#(zux z%^3er2K$pnW45L7-;%T+3}b?mm*y85Dr$y=cCDX-C+f7jSnq$+^#6Zqm;RGsbj)N+ z_cs6Eft7rqah0$C>yF5G%yziwb$*_1*>TNPbAl@BHUK0AIWW53wX#d==f9W(iH_-uBl7Ut07dvT=lOfz zYuKs$qW{F3uJI+~p5eO1_h(!_4sl^sg=Z;LvB4$5dh^L#G5jf)vNQGkBY#cCW1GFg zin%uVQ;=_f$!Ycg5t^Qj_U&{|f5W~qRDe$Cd*M4Dow1W@zG!Z02W-;m$Z?+ruU_k9 z5Y)35Ef$Nu=+G>r&eK;X=+qQYG;3jYauy$&8Pd+924mWer|pMhq%s`|Lk|u8tf3xi zBiPF7FDSLch|a9zzv(6<-?UeFR1T~yqMkC>c|y4P3<{;(OHL8*npKpi_J=eKlLD=FfD{*?h{y- zjv6PTqBa}*s}hn}z=ow}n#1MW1a}k%#h2|653o(Q!p%&O?USKOx(+F3lT6E zU&1|_Wo6o4yYVx9SdE0QIZ(+uX55$EV}X8K1fK8MLHQbj1|{v6My z&*mKZt2|L`vS>@Nyvm{S93`}skyG|Wl;$W54s?wBypE`@G@b%w^vMfR0<7nIztEr6 zUYD!)1E^(^r`J+1e1||s#o$D>p^dQlQ_n03o4v=5jujijzXeDn|Awpq{Jrd%T!78c z>(f_C#5Q7^I(jT%!$99Oidp*Nu=%W6o51apwj$F{-(469hSi|3iITGE>Ffq;dcW0u zmmWr;TNis%+X~mF_{DvHje9DF73w;BZ8UGB^yXsFlvA&D;L%GHl&V_)>@;geYYo-X zOIBg2u0uQ3v7?+Qw1-^!Vz*oNEYfwI)%vC|ls*(`vAYD=llc_)tZy`>#c@mwjL@sh zg`izLo~r=f6zAP9O0T6LLA9}!vLCXOon$k-1=6Kr0HoFtx(jQWg>6CvBMUK9zz7an zs+($7=|#+C6sKNJ#KfmG>1Avey_d!L$9^!ZZu*nD*-da>u&5#Oz`tL0q8=*sDb81o z`7eoa7Jo=zkakN@x!}nrk|7G1n|I5CC8zAnfv$#s9LiTb=9B)e*4sw&s~@YgNiXtV zp3C(1yix+M41fmo8`}=05=s}!!KUfvdJF9y(6Zg$jg=CLr^(?!prMZf(`AgUSgI4j zR8+l>?4>PzAo8ZdFN-(*9h&_54MFV8!*j`)oolxFYmdHZcA>H2q{rSnK{HEEi1k4H zNXn!u0@2vN5ML)cl@(7jDH`w@Li&~N?hiDbdxq^c@2a)fM}sgHT`}>46p+9SU}Pzl zKx!>eaoBKB;5=1HPWKJN0t@i(ZK_0w0f!y$r9Z_urdn8MrCX1#!<^69UY#;8NiHx> z;^1Ub%#TMbmF}fy;uT#FA@fNp3xYBGjU8maqlud0fA-ZzltKmpSHrJ)QkEQxQU`zP zFtyJvybd>ZU;3Q8vYo-?>ctwhYu4}tbn|xWT95G9cc}6@iU|1{$Zqa=>qtom-`iMy zR9zu-WOp}JZNe7{I3T4(+)Ir8Joek4R~#Ei_@=m2zUk$6M} z;2g|f@`{T<<69&=l6fZVj(GF6FEe&gE@k2OAX1zDVgw1^y`$TL*~9SMVf?u9hsPZ4n8qF&L9!)<^2k zj+WA6>qj7+&zQPXEw}?hOBxt2(Dn020QhB}Z%{Z`Jk^~TP}f57x6b8(2$R4<(KRn5 z#5X?0<4)PXct4Zqe_*H7VJiM(SAxxo>-+i7dO@N?Wl8h2lH>)x@NFAj47RQQ1x{Qv zy%o{5vK2H*t^cS}bnVmzQ_K5CvVQKOrGHtAWZGB!I`a6*hfBtANbe+^`7on9pz=)D z)Vx(7H`xzZJTdum1(|Ml_tM5W#x-%NO>!yHxWp~@+2+Lsu@#z{?)=Oog;G?NB+;S& zsbd$K$Jkt2J1nCx@^>)!s4GC4{-`6M)P`EBmtg0s^CS=Krj-`@o%S{v5-i1Q;u6f{ z!KDR+V8?`9A!ia(nQ9`ig6MBn7hyI2IOj)2+3PFs^dRu0MOj5?CPn}oWDw+n z2rZyL2P4ge)A?H-r$UMnE!5O>oEqEcL{eq@#Mqve#}=$Avx^l$tW_ zONf;@lp|64l|(#DEx|4rdCxB^PNjjg>wsBKg;ny@s^b<7vG&rHq4XAoBaPN!tvY3B zOR_Px51R=fYFV(|<0rC-j6EcBsqR`eC9vn29!jvgKcuNyoY@W`Mtj+R7xH`&A&Im& zkEf<}=m_ZJx)?tc2LPcDkxL9^R<%m;+CI(Kxybj;hkw`k6d`pI3ViE)LO}>nhT338 z0*jt?M*B|#Z|<_RgE^#^UmCwL#gYq}|3X*?#6Bz|?`X+Ho!0rVACtk~(XWz(?P5J( z%`lXW`Y_e2XAxjKix$H24(>+v3#iT#Qv(w0baosTB%}7O`~XAN)sU57;FdUUDb$zk zYxmQ!^03lid!xsFTip02W>pPs*9YnkT_5K3Z}!dPrF|U**?Qq ze;~Y(3uWOKQ!Yi=Ju<{vc5?7ep^}QiMlcO1ta2p-Q6PqHThy*%+qBTxPCS*j zsmNTB9gVmYK}VI0#1F5`xz=Cx~uhPfnamt_&WYS9<`SsRXX@!}6lR*<L`j0un~^j$ii12}b#!x&~Kh6(b6{OP$Ll zFUZc}Psax^{9X{1jkh&`Oph8z)sF%*A~cj2b0S3&3H2v6=sGEIa(ZmJ2G81}Wz>5B zvs>)KOLQHc6EAO<60>6$gE*$*o?g@h`RMs!m|BD}(H|8|<9+1?>r}279KE1T@)}X` zyiUP_A1|DRwXM}%oj8<<3qZZJ(oo%8U-uV(?8j?KfNSpMCxhaje$}=YlCEU%($Bb$ zyc^8B*9=iq*Avd`}Do%1hnYRc5DDNws;PI%N zm+h-ccPd^m9fW2(H0 zY)m|;LD&EUzd?L-*&g%&b~n_iD7Ji>ZNoy@iXlN#P~da8(FnO4%u zNnu)A-2g3PhqoKg>%Ij%Qhg-W%&jLxn)kDAaB|T?ZP0%kgvc-&YTd0rLop_`qOWBiS zsf@-2H|k7-g%8EM04^>hGuy zHbdjaqrci5f~b?o)H;}5D3~*FUNJ=b6_&GK8{ckGp7f(li}TY;U9GwfVF)YutgkkJ z;u18sIC>g*sKCKfCBZo9o+c{Ye`KQR*`E9`ExK>9kIf1mQvpp#MjGtnj%@Pfb(B`) zexsPGX=MHAO)7~NmEwL{+>2dJw8o2a_X(&bwo((yHqga!Fzo*!a~k0F&$(>{qEJm@ za;&nzmB|<{odt*g5H;WK8{|xyNjt9$1qJ>N+{;ao1g2#>)J}Uo`gG4=PtU;nbBClc z>sy0V=S6MtW6)F_Lc)-noe$`f9Hl5#r|WhRCkeFF(slSYD3P*~ULdJmF5t^#nwFnav9a~oNHmwElWO4^^i0W$nj5Q5t;7@h5dO_XBh4BF7A{W!biM5`*t2uit?OLi7OE|AJkWg&&sydP=3ECjy)A^k z)hqaxLP;pgWKZv=rggAQl*v8oOGzlA9D;y({fylI$$wYZas-8&Bf+voiF(tpd+(jh z8fiy8RO#%-wtTkGq?M>GI!q^yRPpUgAYJ*2aSL;Jimrcg?|~Z)WQ3%mX{T4o6pQ)( zh8nCSI6C~!WDTp~VRU`JkXKQpv{|KSIOW>}2Z?bq;jjH>@kD7KxtT;!c3K$8I{5B`F`nm03 zyVa%c;80T$B48X4^T5(+U0lr7B%pF1U7GKGKU<%U?-ArMdY@hUTyPtKmB}^2FW}iS zU?^*Rd%f;~?6&M&MR^J8l^Njd12|)zKOoTVVTlbLQxe^aht(F%b28il@Tk}U`7g_Z zSVJlrW&hi|WK3TOb#LG|^s~}9=yNFedSO_>sQoS5{0^rhsjSM*`WPr{GXY!1IY- zPPUJ0QjM>V>=J324wo9A^S2qQRcMcRp)E3>QttJY;f2$wTUR@T|BL zs}jy=cu!SK@DVbgt(I<@WaT!Zr?~2*sgD->Q;bAd!8Hzf>FK933DubfEaNz9KFs)s ziPZX^y!Yv&TLwZxm~`mYKd&vca(LD?2_&LjfC(mHPw1uujNCrH2x8X#DJn5r_A+T> zGf+A5F)O(UHBpQUTyYyE>y>Ql&%CiH#(YhLRP@OD7hlKQoTh}O8fES=8COczYpzka zN)9gsCAZ2n?#h`Ni<-`vrv=1GR+i{^B@Js%G@+l+6H$60p8VaGwbFr_6qctLK$rmi z;g|qQx=B<<93(9eYK%9`&=jK(D_9U(8Tr*ZX;HPc0T;jmAtXsf8sz{rCk z5v3A|ya}T0-WfM0cHY86ALOelA3KDe#QKTq$hq#nv*DNBvJ_e6sr@$CjnJeRA$!wT zd5Y%E-dY9;-k+PF&>VOp&K)869qg3Ejn)1NTB0q)JP+})=iZw`V3)*nB@9w<<*FN3vO*#I=d%xWn zF1X)?B8NS0pzDRmzh`wdfHVdGFStv+j=+qTLP-;JCcxZ+m$8DzVY=^rTlZ9F19v+y z>CbNX3@)a`I9WpQvSh6uX-76Fhl)$zwxfGQl;@Fbpwx5Ms1tU2*--77K2E`s`&F`P z!nqA^A?goUU0%Kd$}e$Br*S&u`;uN&j9~J87BNaQzfWbB@i^67;jl0PBrRfea$mRX z@!kSIL-PH0TP9OsUmZ|Arl(-hX(|3&z+bl$YQi7owgm=XWpT*CG6OW%AWhf>^J_nf*nl7t37 zpUaIq0%|7+EFsu(l1TDU{lj&qdZ&(>&vr#h=dtd>+s1n=`BiwMgj%$2L&`hiR>$-R z;IN3a(jp%5a76n5Huc_dO)cG{x7VW{P*LfMfImV)F9%GJB5(ylNFX4g_w&#bK#KHw zK|p#;Xwna%6A%dyItbDNf`m{^s0t{(_vV}P-22D-2lL6ESyM7(X3ySht?zOiPql@L zsaKU}docK|g!!ttDyc=R5Inn1n$$S06rvZk<@onMxp9;sv+K0RPxaIaLN(+PfL|Do z((k_|mhJY4>s3l$RUk|(fdZ#a>*zpPO~(+}Kafw6e~&MHe^?fEWSR|T23q?xJ9`3B zuEkJl2f-u>&ay}@un{BH$0F8W=rcdB3S!=ommKfaalTfj&o;6FdQUVV_>!>H6Yte)~}aimh<|9KFThS%WQqx2ex zR7vwaC{1Pta)ue)$*%2gk}g%akm4KNDs9%VS$n^5-fB@&S{M03xr^JxN^zPCF^rWm zl?0f?-xlT@6dhrcVbg~@hIM~;9~M`nJUGEs@QL7Ip&2)(mzfTQHaIv}GeNvoipIz1 zbWhm8t*FH;(#>GwjzthGl+RRERa{wfm3S0WqK=Yr>$VT}iFj%T_lc{R(;4hd3558j zO;G9Ic1ETkSqmv?MdbxyeNEt0GVw;CSb&OTvrSPgnWX%7&Q<$$+XLEWa_ur6C$f>W zi#J(81G5wv?z9*=RB}D0zD_%L!btG3qr>h!UP)oT9kGj^Mpthqu1lTWfz=(7q?lw z^fnB*{KeYX)L-o45R>d|@F3ypwUlMyS|6mmGYEWwgnXN7DnS{IVSr?7!g3z^qb49)lsAk8(`_4~VS z0D*rO$0qDI-Yp)qs5PbVdnnA5Gqec0S#devCIv4**?mKfE8ed+ zw4vI6)+n)iTAtj>gT5zu!)%}iH@yNDT4cWEAg!dOH4^#yzHP~Vhp=2~*qLznf+fWa zHFQR^_2c^}y`_NnIeG~TI-5L{`*$%twVE+(AWdv)y_bqAtQ6}kwlTW3+ciU!O1>K6 z4Pc(t(g$ACe(V{TNSbDezc?8<{jBnnD3V`HL}_QV6@~u3_H;EBJ_bY9NbA%Ol5?c(ky=h2l4yj%sxEN)^m)*QW%h11SjjyNON! z-YtNMrXCL}6xG4WEfFQd_%Q$`!nTXhO4!&$=aGQ}>5(B54(1%)KvHb^rVqbY3bh~P z-lt)_LM<7BaJ|}?OtM@`1GH^MQ40?tykGEPlOr?F^SHwQmlPik19PQ5RR5B6lZn$F zaxm`(Ff=J#BVw4oiaU`6vhI}g5e}T~WCZq;rg64H1par@hTb@4U>@T@0XnhS_W;S} z>F-W(iht8iKw9Yp$=jzY=Ba?_ni(reKHsO(Y09&O#o)eJsi(-|585AcbFB%(CKZD2 zLjqZC!lTsG?SQ5HH0Rm{Zx>DF6IXPKTqf{G=JjO5hb7GCD9@DJg}a~Lr%*qzuOv}M zC+?NE=j@69UE78Qrj}w}v=r%&XRuh*0RI_~8_dw&EDS?tJ3Q4^&;XYi!$q~yk%Cgi z6SxHpozko&W7SOIAbIf1tf(62bS`k^w=q7EZ0CGJvPjCe5$V#6iImEp!0)18Tyrt+ zXbG@a4|WFhO=3mHlLf-*P{Sw5J_sd5KO@Dw_^qToS;yP{yfOT~sHCtCCc0m7*@D+W zr@9P~BV2~-702&S#HkBCo8QTg9zk?d&;Fx|~ zV$U;^zR##ybUwnndv$|2FnxQ;(zX++j6Ov9#A@p#fO2s5E`ZU0YmFi^DRu!63^n~+0tQX_}&b&$U(ZQwfe@`YX5(xIws6)Bv3;}vm6Vol<`emt&}9X2EQ<0fVlW?khxu$Yb%8$_O(Vl*Y9T(M zs9{G}Bv2_VRsT7kcVTB`7T5ZX>9`!3l}+Q1DEeTQDjZ?l3&wM{FeFG$o8}JPkPJl# zz^_SYY^V}2wlDDT=^+}(kU;p8I2?5Z5sF=mX42Syg3rtCj=$zs|TGL=M)700x5 z#pw^1l7T3XuBLNJ*Fd^X$Yw;HQ6yna%9WvJtbDrq!8Zm}-Q-ixxRmwRe#&jRWOmEf#T>yy}xdr5$~@%9^I4%YXK zzm>kvpCPS$TG>ey=e80Sk0*>t-$PK=B!VD*vXO1Cwck`y9+As4$~@S0ZY`zchDUJy|4FWdPj!wfj|Hd+WH9ZjVe`?Q&HwUf9l6bnlNdAoO@N)iM#>{f0i@^-mz3{FT$j!TFIIX8xMj6NSby(cgj zul;f%g{TXd&`V03KGN-G?*jIA9rMUhg7JBrM-Fh{S9%>(nl66s}*xNd+D&o<^!;3FszfXi80mTg;e*nNl8 zPS(m6E@ePCQO3jKUTzvx6A|>!cp#2L%=l%^Xt94<%p2Z;;@Dkd=-|^+exiyI$x?h8 zSekMQ5YRMtkF9cS<_3~1f}lyID)Ek`cu;vV(gEe;Y$oMHcZ|-}8I~Jdi|LAzD3;M- zfjVQ0(d_~EC3zI$c1h0eOn8D~3zt`PUhc&G#}-TaDX@Vr?#bqJy5HGj2xtv9{CG2; zQE9x|67nJt92(a1^#!*Unm|gqpzGZB_FC-KQ7$hmSQb0wlASAR-w~<`bU$|f{>uVbHd{Z=mG312%ER|yt z3pHQV800SYNnyA$8SkjLk0Wf4tX;EDh973PEhTV&t7&T0M2<47IuuA-u|$tY%Y9J1 z<3GCEU;nN;VzFdK5sJWq83#ybIqFPOBwjCSZDN1J4gp<&XIBAp<0q|(7&w-)v3O2DsekUW2rl@ZA;(i zOpTMrIIGJOWhVbz^c`XPgXc}#AlcJ5_CQWf=>s^ZCwG1P4yCT$yf5gnzjdN-+_z{E zpJ>s9Lft=K=GMv2#N#;3Y0#p&uIlij6U<&8~(s8 zbZHEgiZ;9?yN+XllaFK`xd+tkwy6%pvzp;oA~;Gl;Rp-9oj6LN9MhgNl0-5+TJisS zGY)miQQE{Gt{J6*%DnEHB!%D5tN@sN8!ghhco1LWZv)LvSr+oN5`VeX{CIF=n77W< z#s~g);-)`ZUtZVm^TSOZsd}>}dO7o$C_3`RG|5oof25~atO6MvrS@3BD}a0BYF&s$ zNTA}wm8~`wx94eck|fpu$^XH9NZf=0aSxR^qLK`6>IIGg_j=yf)>%7-h~(c&&ye0s z@&OIgSrwa>qQ{9&ElU>D17zpIN(0<^1-nKFXe)53y?(Z*2GpLOnR3fQ1NLeL?`xA0 zBQ*3g;6#8OEw64NFUaPSU1WHo<;{T^epufG5g5%=7FpK`CDFu6oa!wG1xm%w@PrkV z=DRY@biB@MRf5ojBGdgaqsmWs=6yBk-PAuHMQ}V|@(#c^6;c3vH#tG#aK&DyKcXAa zg`+rKqX|?~pcHQi$o*4gfATwq<1gJe9moXKA!n_!6!KX9IYE|X5*NXqEqv=+$HTg( z{2`82Q*QL6G7aZjM7O^v-xs#{#{@}*>y^UgOX8tlT{9j@OR8es`3njIoMYSSm)h9` zT-UTW`sTD(GkTwAe55XVz$JV!|8dMs4F92Jl6d_=qsG9F+AR$a_Pq0~1L0T)w^>Vf zx7IX8Aj)weO{=`o**$RqRh;ZxZk_2$Ge($2Jt)Rl;l|1TI3`uQ=ehTZ=)0wM48N$; zzi&9^I~=GgGhsY(`mV8}#CtCQB!L0LHEGSk!gfgQ0B*x`Q0WP{p*<;88*B8a#C=OM zn=|n*6iHrlf+B685ln*cXKBiUSh=9`Wa!*D&{i8LciX0317jcxe(uShE9w=jL~hD-+7T@Qy#VDZvuGrGo^aBK7^oQMj6@U!xtk-9O&eBZJg?}+a&1< zQSLOqd%@X;ulR!$lAi=QW`XJnOr|?4cLRWsrN7E$;-L}pGF4s^D6*D)9wYJiRRVWjze@YZ>N=x} zXgiF`vQnu2$i^m~jr=U?ic>5RP#rHuKz+)va&9{>?z5pi$m5ZJ4d=uAIOZG({iz0^ zmlSTKS(*A--a}L1zyvKnXTp!Am1R21af>x>wUB#O{wbnDLYp`mEebEC583;>bgKbf z*9RevE;Ap7@G9Sa4tYHK0Ndw(Nx>!B$0a<#oxaPRYek;&4$IRdon@Q$Aa$9}uyJIg zj^$b6QL;=S1Qo=URzdidf1A%~jAH+2!hi&RJHq~{%88_+n_M)go&6ZN$wzwm_Dg`r zMw15TW2fw`k7A51kYra$wY1EiL~-Z*=X7ZsxWx9S36xl&vVXjvGAUVEr7XfCJ2m>B zR11z)MPVleF}qu7j`#=tdafmF&kH+l`5!yI=TOlf-(5NZ?+dMeDlk;6a;Q-y`&O&3zJ1pG3Oq(G*#s)CF8UVTJH-78x)??wmMBRLV_3HdUShS3@?%qFOe{g2x$; zlF;A@T{QIevxSXQ!4XOmnwToQd1#}pT6^ditmD#wat{vnvgSM6&o43z)Yuw=A*&VF z(Y>vDN5MYz3%Vt5iJBQ5sW$8Ff#EtMe2KYd_oUs&x+*}9nLWDBGCnX z%0N7;cQa&ts6B03#V7dQyIB%Nv8w-uKLq)(+3k({n1L-_f^4szSs=U#+~R`ev}%PR`hC!bdP- z6RRa<`tOV5gNtAqMi`U{XNU63>`ukU+xBnVY1Ee57g|Vx0TLCSN{ipXI)(_n5N_bg z2s+Rv*O1DqhIf($SO;y+#+uc5qXV=hKHz`$Pjt`Nw{~pgU21<2F2etH>b3?WS_@Ee;)UThpj{V?a#oi9^B_vck)^bS5Sm;dx|##|;oLUbjg zjsB0+N}xxd<-xusGl!rI${`!28ss^&6Xz;!G?AJr{7@UO!YHZ=J3HBlU8=g|qs5j5 zNN4huzAY_ost;j9N(LM0|Gwsw9lYkzZN^$d$BiGXquB8#khEboCn8^lNV8UE_xwKv zJ@a@|)zSQstI<3a0w?~5o@GnJ;ajB+bGip>-e(U=+W*$%{GaMfMzW3mB5Chi(RHMW zP@nq|YDZhc-%2Zsw%V{;JM2_pRzXz4C_~$y!mJu*cCel$V4A(91Vd#Z^M+p$0=LPP zO~$xsi_=7v3@8t+go|b-2y#jG<`;KcWFI-YP5CSAh{8Z^0@{^P#lFqsKH;o`mb7Xm zV^tk(Wkk&>wmijwrCBGbrQ(CbAGRFPuZbcXDF6A2z&dRcBGcqyU&|LFoTutfoDz*N zx;vsqjTl28KFEfHOIC($9=bs*WD|RuTxsJOx$P-+t!JqartR;VDDVVVq`1D?txFS| z7_E55rDXa@y5RZ(oC7AN(akC427EaNOqodlNG+8ujM30m5D1{w@n?X#QR`3fdR>&B zW$La34-1Jh^0uY|E+SPrlb82&JB$P)jiq0RO{|RnSTmI=FoM%Sk6@IUG5#`dc!Gxv zOk9^zRyr+wlU*Tp`oRg)G)`QZ-}|vR7XqaEA=xIpXZ`CC#0SQzW7rp1L{c-zxX ztJ1UI*M6*i0G%5`gv)9O**}5|hU15(Wqx_+1&m>;O~OY^W)hPY!<)6qF|AsQ=8P0* zeO#@VFis>|t~7|D{7RGhsZbJpFlLH4_cB1GK&c(-!p2+jlk2It(IO|637!y1e!{6YoH*s{)h zW>g`Oyd2JCu==UL-R4Hfs$apMjeTtnul`>0{Vbb&Sh}#;NMY5qf@|ycf?Y9c*`At) zGf&1H8-%;fA%#2>a-}(vkA=SVMAPl1d^pKs+$<-g??>=;u}WAYnxMS1oVqsV$GOUe zwfu^9w&6_t^~%5Vx;s{cIPwfxipC%mGjIG;BK7<}qHuQBV06m|&i1tSjQ#%Y4koII(N zz2UO4FP1tHoPaM374|oMu(-34lX(86x1x9A4l$*eBlndSBv*7t_lXm>Jn6^8>p@2~ z0qCCNVOVbKLNYwWoxn%?&_Ad$O_`aS99iQbI6NSZyBhi$sQ?EwOZc~i9o6Nwa6{YfA;z3W0RE|xfVTP5+k7e|K z{v)s*bDGN)n+Ot}Zn$kzvxHD>0Pdg_b-9dbnGCyZKw92|h>sI>i(>)ij*H?T$U@Rg zdXY?`Z%+lA0n1N8_?&s=PazS znC_23TMH{b-^+T$WbE}>52de&t129Pn2Lofs%WPg)O)>=kR14Btz$XHYq(dqZiicI zT{=3F_U)Sz9vGU93zBGGR_03O_lz2-JA#$2kn746ks;qN=>#amQOS;1+00suX=Cw zo`iBF^Xc=n##G#V#>2qAF(PrI-tL1oe(|oM6~W`pT7IA+CI3s5=5WgG#qnqx2ImCQEAitsTkJfQ`q34GFAZoaJab*`GgBU$SntweP7IkTw<#o+H z*XjC&()!Q5$b7{!k;z>6WEx64m&;@*b7`vJwXx}q#8ZUlRzhlbNlM4>dZ0Tm zzGWMTjb}guGDI}|0Tf~Kx6w^Gj2xyGDW^jYxUCVwJUYM5#5n%i_)++zN>o5v&1aZb z@Rw+GVleF>0rKnNe>hTGL-{wM8?n7n)&La}*#+qIJ$}4H6M-15ZnSS=@Kq6H`Uj{5 zC=N$Uhvc%zPw1MP`C-d;OW(5o)O$k_joM7LHY*(*P_URWc^@c{Ze_*AjJ`CmCK7O4 z6JKOz^5d`NJtby{Q)!%W?h^3uaq4$ggi*1Qv?5hWNuj?WDAA>xS8WmMKDw_F{xB!y z#$L}jK~`I_330)V8DWU&$1#I!^?0=vc476r`1t7Qq{8-JE!KIsLqIK@; z`#b_@^5ya@(nnmp%n|rw{E;HoabO_2S8r3RP%~02nM;`-QWIkQo_VL>EY*hJGffcR zOdAU1YIGWVq#<~ND()}&RK>F&@FoqvLxH!@QvQ^6+387m`6hKKt>%If$TNd=*_I-F ztqdKVPBqr>Z?zLkL(t{)V9-`QN=L#V?x%&ZIQryejp}c|iev$U(f_!+D zG`uUGk4cgO$a8XP#!cYkXp-}`OXgX;Bwvwdny*H)+=6UaTU4^Ss*pik)w@wXgV;oo zbEUJdZyM13&q=DaK8_C3FwZwA^o4?~+GX5++bvq>yF@@Axvas%O6s0!vo#xk{E`vi z{0Su^yRJd5r;@JB6-UA0=KhlgR=ju9aZmMq2E~I{10AR5LHB*e`^%}(EAPB=FGTxe zTzzV45O-^CPb8O8lW1CS0!hD z`j$WCwC!uDcQ$s)JGb5?Zr3IFphREu>uJ5L=7BRIg_yYi<^T)bbP)f%u4S79d;C29 zt_~sPHd4;WrYa*(p1)3|m-O^gwi7$l^s?V8YbJolQf81JuC+;*lkX9KO2Mya`db7v zY&$)}T_D-4p2YQJcDLI5m%o@7W;*cW!k5(zp_^J(Z;;9^y4ClJUVx|kjIm?tMb@5X z@URtw&rA3P9sR`OKrvTW*dGanE~yQ@?M?LOta;t(2|BH_o4z8JQZ2HPbxj@*XXWJN zhU$$}qI44 z8)O@iyAnEYE+X_gMM*Ut!a4;Qbcp@xPGaUSxPR6CB5 z@|P(k)1Juqs#5W?#DSBuwl30sNy>`5jf6UO`_-A3|BR{UcK^C$Qz5z*j=dD#;G^aL zeR9fL@%ek%BY}t)ba4ziQ8Cc|*gTz!Y`QUwN0uUFo^Na#$*emL$q&-+=T(s=@_Kj7 z$+cW$(m<`}jQDMfzlI8RpcA~i{1?z^Q=h&uXy(?^$W$Xvk^}1Aq~`d(yrFCKaE!W1 z8&Chlbm~Qc=Y8GouD9GqO}v%tVs$RAILmE0CWiY@V14ukpR@ifxS^DutESNCl-cQ5 zc-P+E#Uss25;`|&Ijbzy>5WKP60xv<%-Je?F{H#H={IodihjsY#4F2mgsE%UZ7g|@fqLlVjFx=&}LBqy~LQRC3{zS4hG+pnFtv1zZqkSAK4+xa$?;Ai--jaeS zuEzV@(l~$7onLq*;J(hQkJ0LW=jkM~y!4PN_v-CGVUxNV2;Loe&XlTG_kQ@b^E-g$1y;4QP1XdN`>TYC-?P7J6o*oP*#J!?Q4KbyhQ?|J($f8W6O2<6* zle}EEZ{)9?H{FX9v=wxNp5FYn?nL=23ZF12&3yKFA*BlPKPCJX0xqyk&RkQS89R5f z?UsKC;u-sQ>f<+Eq8`vHId4tIQLX#?xCQ+$?maG!u;fv4vD_WUTv9BpTj?BEJX4k7 z2-2xFLNa5=MZe2z_O%N2lpsu%9!cXZOnql(NkFnf z#sflY&hZn$#iho2L&Q;kr*zHC$WTT~W_bZp;-@U0@7+XHn(dR+%GI<*ud@ME0P;!0 zmQdEL6jr~O{u~i^0kA0iUa#)I(iR_|2)bLVnsMXhDEZZpKuWK>@$3f{m9V)7SG?ju znKzrN_6Cg1HM*eZ>2=TD8;eC;-1F~?y=xyj<`r8Fep@8!dB5vcgU~FGpN+a7;tn9l zJG5p`Hq0ENwtT1s!y}GDq;VP?Jj47R?s^(QvvMMaX|E%LwD2|+K}$6Bpl z1K{6D(Mm6cJI7^eO@t6{`Nt&%-?gGUWdus;B_Msk&$M_#vYsXGL96``* zYxt4_1;-2B43VUJs@+JK^#X&oBz~l%R(j!+W_$c9j@8)0^Hy6^Ue;ZiR>{r8E!Y0~ zgQ>=Ue!jaC9CFxDi%6`Mliwgpu9b9y%w|_!lzf%vGQqmdZZ8$yagGV-xEW&lCF5nS zqfb?BCGQP%3w;lgj9Z84PC#B3-1Ro#FLhf{75Ul3+tYsRN`a@`llKJ`ysv%o3vXCD zA1mddA(p`CIkNKJraMtz$-N?tNT?O*-v31SB`ILm?3CBqpQB{&yYBXY0aFQj+FtpW zL8PQibX#sbE6`=ex{!7GY4KXoA+RrP(cq00a%E)F=y)~}4Mjem5cC|BDGaY78pDn8 z5{(wJ!JLeC1_wXFNd-_M4!f}{^J_6up?R6)#tINGR;@T6oEzdY+Ol1~+dds0v*|gS z+LU;cpGUL-tKvu)8c0d4Ag9qQN*g%!#@~!(1nw9yc6D?^rUxNK2JOP!wk7IJoozZ{ z(0+PkXvSLwAy&zIougjyo=7h0YpP*@?sK6aCa+>S!*)a0IXYFmpT!Ug(y9Q<_Z?G? zH{xGS-bmE*bb=;Z^eLEv>9z#jz8MuJP{e4SuV4~VUqs|{1GW~4GIeLR`^;#C{KlME z{A|F3m@>UIF1?U=kC4efc@*n`{t4G3883@)vP`?iKz@&lB%t*B_Cazeo=1rbr`6`3 zfshT?rdkv41VF zZ@?{z9KNOzmo9im$zG@MhZQAn687*x<>kn&ffgs{e%v-}&LrM2=y9#&lL<-8U&#V4 zWuO%p*{k#JBrW*W*r&Xyj=m0SyoD=~fGEz=zF|7X8UCxR=~&l)CD!Pe%OkJsmaSfz zQO9km!1Rss{^kN?T^$H_FEj63oM4~PZ)Hkh zRRbV1)lPpbTgxgSL{91)s|d^mX=cD=|DbpJ49P_I>~BdCj>{VJaN)o9>3t*P*~c8U ziJ*`)Blb6$Q0W{2QvTRt2)$71K1*ltn3l*78dfB2k$A@-AL*flZiUXbI~QB0pNj4b zUU)!^&FKra%Z23VfwrgAIND}?F+)okDGl|09T9mT7K{mpjecLPIDMk^wzO<1?B4x8 zW_nvNy8w3}t&TJpu;EvQs0;ZTM$|H8Ui5~j8gxC;sQET=!F~Y!saz1HmiUAzbp{L{ zDO-|B`F(A9Eu7`-@#S32!rL*>`M(0mPwJRewG%J%m~!BM<-)kb{{1Y$EXEy}9QmmW zuMjsd;Vd=+yJZz8!YlHZlQj$2e};}NJEPR1e_!(>GBYC%m=b4CF8KoDR**lqQei3{vMHM5v2*l6be%W7q26@F&c zdDo&CmTWh0#;+bgJiSvCb5&!u2X0}41%3S@0Kq=lBe7)*SVGC~Ym#Prs?iYv6{mvT zPaKT)RFnSuxlg@y`~v%*Co^kTTJ;AGhlS;x|Ep<^&BXG9Y`l-Cc@-go1VJ5hu!lU& zd_xU(N@f6vq5vN(TM@%x^J$0M(fbBbgC8!TSJPa-j_C91^}XWzGrbk%O}Ux-JRM97 zT8?bb(OFHNh5FBcugnS&=)C=NJxc~L86Ga$I9W3}w99oUXj>HVWh;~65?ZtVw8ajc zf;!h6XI}d5?yC1N^X(@mtT9ZyqS3g-?`wP!aZKLQyuq#-uI7C8N_cAOa-)-deLeih zE`Iay0`qm3*J#|3#+M)sB&qXyj<$!T(yCQw?xD>92O{(E)3j==ahfP zV2v5tRZATYKeLN#$@A~Dk?jdS8@h5Y*jKGu9x3i*9|;!~GBDcg>^W*l{J*3AZ-b`kllSIs6`&$RUhC^H6i1-$CJXH^GTCw^~(r!1Mm7Cm)#%6()G%o?jjfCH(C|VoP%dN zLIKLN{$*=t?h$O*E3wWc=9-K@411N~2Q~@)t`z~l?8sNA)T90Q!Zb1+9dj`>x?y>% zs9#iQap?Q?gy-CKfS!p=CzRoVlCd^~>v_h&N*EycuT%`{Aj&b=wt#eS@HhVFL?%rp zME!=J(O8&5<(uTGXk}&ddE`H>_E$FtRq8$0GoAI>R_WCWAC7S|Nv z_WK%T&xvPPu+dCIwbsz>XR_UHFw@lA47eHA4;N`jBZ?~|hnJa^qlb6Ddlc2EvRb>H zzMIT6`BTZv*IQ@8qyn-k5}r7bpX67@*O~x&CawgZc3Nh`r}^5KJa6oQ>zb8k?@f0z z!!c-TNT4dd4q?X5;|~pKK{U@(+5P{X^6~g%T0jLSChxhd_JZrOX)DSp0YjrTgVfktKTA`}qXZ?x& z`cAXz3y{EF*}}0*f@b5h<9I5~PZ{mMhC09luawk0^5%sNo?_?X!-6h1E^l>yUSqus z3fuNzvvW~TTvM-d!&D5@!iZ72*Uz#Gx@0$=GI!Ro#S4S;tp@PCF8Hc_?6jz>%iqsv zW6W^>*{QIRw&lyQw5IHOU!RlZ(v$4|x!CfW_d7=x%6^vRFY}9+{;4L~dw`i1GA%I% zhs3MRdEo0&WCZ)zRV|Zoa;y#`(k3CDRuva|D-lN37ls_-d|n9o@q!6!z82DCPO1y? z-Z!Pw4Bi>nHO0Z28-(I=bho~2)Vw$@F--;QLa!c2)IQ@W*rNp2wpa^tKo-+M7hg;j z?JHhzMQ04N5LH4@D%SsG5=rW;{$isU`l59NbhWh0?`!(=MX%4)?kv5<_?Rr`6`?sW zyY*^qY6r-R*H2fnRD4Xk79O`G^2k~c+1$Ncj&;u%1TyTth>5{rh?DU4ye@%0E+mzA1}(uCjF z{z*M4Ij$X8-o8Hx+t#{jyE+PwI?L|ty^8Lr#~*Tpm#9mbD?J&X=$suozq_h_kbYse zzO5hr74drC@Cp`AWD06r1cCB5m=Rng?z@aQX9#Kuz<;sc@s-mgkl- zFLMFfeU{xoyBWdjs#aAvC&%pm+=OkAC{3xEP zh+vi1PtSDK`1NYN8)CnoykRYKYN)4p2uWr?d<8*4We4leKY1c5@dwYrK zI+GQ6W^i%WcUkh#0TEY}T)(QX9xQtJ>$vXV@d+dX`}s z25;XU%ftIn2A}DyORMWGcHJWhSGfBvcGDhgRwp(#rlEN*S_htHNOhOxFuc4s-rEE6 z8GLBk=HXx%=Cr;KGsu5aZujgmC1vJNJ(78bYsh8Ji88iBr1QV?!`Ck0`6HgQu#ZWO z;|a&7fSC*0ID=9F)3^PoSIb095;vB>#l&TY#H93O$3^G$>n2NXt#{FV6J9T9qJpzo zT$=zz`{dfv_M2%vtJF7JO1#3p7`xiZaFvMhrAy|&F=Mrp*{^+stzC$ubMevJDeRoV z`qyoj74?dW3%kqWt9o*Eb=Kzpog=$T;eY2SQO$qHN5V|po7;W$;3{(>)LLO#w#kmr z2@Bt2LIs&T$2*q-=ggb5;rLbZ%J(ACBJeNsvJmtTV`cU0;EB^kbb^)d#n%%HYUhQ1 z!T!Z4UU3i%X}x;Hgh~0Wj5HPnORu48cDCjAc{F^Y(+I0YgthvH77y1j8w9!Y+e$$% z@#4u^%8wl3E^2s@-3gO=>2}2E?E8PqtOb4KhHmVoPN7wi(yn_y&NKI>OA5lVF7G2; z8hEvnwn++ZFDRBvf$Wq|r@oRp6Z(WPp+lUS>t0`6r785ocaf}Vhi+lL<@h<4c%pj; z{Ho0ABx1tjOl}JP&m};AJm)kENUM}S!+rLLDZlGa(_PoyR)4|V3s0FuA$w$i&X%cy zPl~)-*yb`R9h%VuH`{F7q~NpJGz=i7F9!cP6b;vY*JAN%I(}` zHQ=To?951lTl;Dtb1zOP+$8+IW^r+sdF$L)Ru9}6*eAzU7Idj$>OR{ht+(+0b6J`l zKHOGA((p-aqLj836%!|}?jLI37|o(et{$#$!p^hjt0%4$eC;YHuf(<=DUDA_rupSP z9nDTNJ9+)Zu55rhk&!gMxLEMM?LrE0ZsX2h;^Y@kt6J;(!buE1o~oYSJ zzM)>Z=2S2jTJ-*>(?@p^^LK=YTvm|KhkkO0guvXZeO#?6tH{(oa9z{t#BGZm5;-puU89fwRNg($AGTmKaHesA4;Q99eL;r=zlb8gdKs_g z)hoAc?Tq>Zo8HUSodG{f&YqHu`LANS&DJirI#5~!{FlWi9XjKeLWQ)Ic2&`Nb-O=T zR&-4Tw2Mj0AUwS5Xk#?}-n6D~!l2_-E5B9pH`0iMPPCcl7ek#ObM6WGcav-&{dkW* zx%OSCEw2c!DcMU1^pEk}FaD#~f z@g%fFtY#ykJNW)p+0~LvCW5_WlA$}Sz7^jfKGcAcbl!7yt2VCxW!4uMA%Z!`4ihXs zcR8FCTJ1C_VS|UF5N*%2&H@z&)e+^Lti5**>@elI2nm*@UfLQZWLElOt|FH|8#5`SZsAAj|Az?) z9}e>ftXT^CqnP&Puta&64~A6KC}i>P?}ngsf71OTTb=-(a9J)=DtPj8D|uMFpf68& zZ&FSqNd1z%0ySw)iImkk(h$!C6Gr32#>($rRn}gA+_>KHJdGT>iS-VtZX9A9g)AWN zU)RN1XED`dKP#D_MNS4rDu6U=^{&^uG!9b1m}kCsX*f37Xs+FR+DK8HflIMD$4PKL z{`9`eM;xLN1m6+&-9ECIrR_69koQR;Hc#pzl-|)c;-gChz z*hbCJCDyHIg{d|^GGP9hEnjs{jGasV|7F9}L0A3t)Psx6bAdC#0z8v~%y11>XI4ZP zF?TE3Bb9>-*-fU%+p?p7%QR`{%r1mhncZ&F4zA`mLXheP%<}Ne|CV<$NrB_cBI@ZC z%l7Er{6dUc4)b1sP&xCo2xke-lV0vzh1IXBMT}w5V`rUR%vhmJ$)midhZpRd%AN%a zSPvT0vFS#LZNaY-VaCDyRqq|M65Gxw)iU@xlS3E*J1V(k%HL-c90)UfpJ4uNXjJ{_ zRa$_r8i|=6*fP@)ee9&&*ju$kW}0%9xT$+)I8P00{_i+s8<@=mXdabaifylikN>__ zB1kK2*)BLJ>MXQtP-k`lwf=hcvWyzcOn*@?EB;$c`HXgzrsQkK>@Vdi=IY;Sw=sNp zua2p%cuim>IOVpxbxQc1dN&|Ru>l|!itpw&4CEPd>buzJ5x$w(A_lJ}y0N>tZ-YX) zwQt3?GpwZKCKlbC^=d`8`Zh>Z&3N5ri)dRVVOO$qQky{Y(w^(uamOSEZEK*x;IWij ztwSKP7;{>iqXShc4roA+tuCP&``ElGL~>6$f1)j7V4=jdaFo2HiA+{4P}>tDee^P~ zYsBpcH|)U^W^eaZ85U+nstD{TfrmWewkpavb&VKW6UMaX>BxkQ!ZE_^od~fEi%>!B zrz1m>Zjv)Cvch!LODIL`(r~zZkyEk_H19o%KF4$1BM02C|mzu&TBfaioP&$Ae5<>j+sLFv$dVobhqFMRr=bKA*#w3a%&z~4iEK-@BEegn*>nEN z=Fdxezoy%8@5dO}Pd+{SBhfXX!PBMTg_kbG_GVhB+AWhiTx$Lwp0?OlRh_5Ae2Qu5 z3aZ|qxb_{XDYU^tS^(boMO5o^;Gn_q?0fu#JgecW^y$tL2~A6 ztHDg)DQ~NtD$#jGvx>K2<4CjBN;GvygNKhlZ%p%5jEkRr3`I0sSf9%ODAn0=;EJmv zMUy06hNFIVj{Z?$LF8v}8l$w`+iM%xi=KtdeOs`0&(`t(ve6r`Et*#VIDVAjz3t$% zggI*4c5}9H4jU3!fM=RJ7DP)_?WuVPH0B7$_MEn=m2YM=Yk11U>^iaQ?|=G{AI4H9 zvVo8*Z3c{gx78D2YVx5@+j>OUAB99lRn7Zm>4#!gLd)le4cz$lUWeb;KpqyquK|W^ zw@koF3VTXU9tw_?Fk&IDh>v0$Z=v`Y?L&;qCDY9@X-J*8R3}Ji z$wIvL`yC}7skW53(q@ppssG%|8h}kHUr`*DzqDVm_W^!WIC9D_H=U8gqb+igyf9pf z1uQJ-*jq`OI@S6FJ?8X(**-+y$O@5qDCXbTUP;w+wW{$BNy#SQH8_z}@Rn$_*y3Y_ z3Dy9P@-YphQ|6KjFh1ypibM3PhbgVZ%LW~1sHE3d+9#wIh6qt%3 z<*`}Ikdx5vR^aS;=9b(EBZj3Tj*p-sJM%nyzx=4J&)mdqN!A4)G!bH z@FDK|-Nw)exm}Kn2XF-nD~Q9O@v(Gs2rx?|4gUnlN4B;7M&|;x5ZdDBPIwNa*BuS5 zR8yU_{6b{I_8UAyP_fVstr7<)_nS0GlpGq61H<=Cx_hz=vuiCzsbvTi(-&HtaP$^_ z(?=Gyz{Vmm+aF@}F%VyI=k_7#jmFN1KaP1jBRAbQYfH1Zali1Je;b!O>OK;&Di;3E zEii5~I`&z`2y^q(RGRxJ zb0<88Y()2T%CKunPls;xl3@+3DocnVL;LY~-cUfimzHboG|rqu3@QX=`;Vk_p_QrC z-ZPzK$jpd9!nahdYIfNW()$GMyK*Hk784B(x*?QBf6#;9F!p5=?;m~NBl_in^5T@qpfv*^(vj{sj6m|48I~PM4z9#2BjGdBGzhA1$4~3;NW= q+w2sFA?qJ&%JhEf?^|{7`{lA#f>-pJeU82FeDu9=BY*xk{r>}XZ&Gyt literal 0 HcmV?d00001 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json new file mode 100644 index 0000000..338ea6a --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json new file mode 100644 index 0000000..8792aa5 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "gZm002w7q9yLOkltxT76TWGfdZX.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7af8e51243ce0205201c86c17a8687e211229c2a GIT binary patch literal 357910 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 HAz4A6DHj7k{$3CAqy31un4UVJ5<&ES%iZ@)r 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�nRFKV&Me3l% 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 aDQ6k(rWNv0H*Csie|OO zP)n<`6;JZLXVJs)`-rMdZY;N87i;s(Cd9I6`-6tT${ELR?SchEPZ+%YsD9v9>EXTM zwZDcQk$646xe2+x;<#Z+>r&FbIU$`jWVle{ZU)ZW*JYt~0o;WTA=U^B9UOWs304ica^&2jNT*5Dmei zy+1BGJSP|})4E{Y`b<85Ru1ShXBEI80%J6YI-TVu4n^}25fpkRE4GVVV9#oiH9P&o zcd|4?oZmEGX@h}hf&T!wwi5_YQ=C9-@ZDn=17F59`+D+V{0__ni?vISx|`T{h~{&= zDAeq^A;2}^!Yl-CV+{y#FqJgchc8##9r&?Bc!P15h41xWovb*@bN@#$BKBgGj7P?d`!SbhwfU0!tOu=*rPah0u-Mz_e6KNsuNIj@8bQ;DbBC+yol?a300|%9T}qaWFsxPk5@2 zBe-XgFz_fW$v7*6f?jKp4J!A5DCKuBD#cAp)+&qfKdUuSW!Ap@I7z3OL z9v57%#~h9-y>Mj^Xtxg-b-+FFeZ&AaPT$5zgd8KY_XBuGbQp6cx(nv9kX_&MKBf@r z6m;(t9LDk7$nH}M3JMeBeaRD1vquRi*N-_DXuP(}KuUf07E^$6P%Fl%gf}1D+-9jv zHfWyU0CG2eV30WQ=H;rc-s=;pY|0BC{dJsQddM>Y_f8^%2R3hRuub6&BOSeFn{3>2 zHp$0&aTyg(UgZmPxj+y-aR%Su^^X1B>A~P&;Fv}J{{V0uQ)}jVG9Bw)kNnN(Qx{m< zglligV-R$Wr&Afi8uB;=ySR6XAyoll=BdNwGh7Ic1*@+HASEwd;{kecb(AP6g(93@ z3?xKjnZ?ddpkl&-^OGo(T^RBW$9}moo+$G$90DbL!UT6V4g+@3(&Hs}P8GG&Z@GJ% zIC{;sY{EzyS}UCF2c9MaoZkLnw^MxLO-tK|4rA{#EC4rfX|Gw)*@*I|S)^wUvrs1E zd~sSJxKS!8ZNe~5)6tI4`%Eb}?u|GFdAjIKB!Q;Sn9+gg;lL=D<}I{_C@hEkV=4-c z7iK|eyjh#+($ZxVu2fJ31;$Y!J?lDDu5eWw=l=k3r(PHCBlS8g%L85)5d2*F&F@cU z4IjWe&uq9nqDSzUuy;eAGfv!Ed`#IU?u=RvLsRZ(6}_wOY=161i><#oEg>ekM*_#Q z02Ojxc`=UQAOL0JHfJsI)c8`iQ9`%RAE=tSPs8fiF#Luio0AIyp~Hc2 z4LzBs=S0|I)!Ib0aV~=F@sDJa#p|;x<5S{$kO0tVnA%?X{lSuJ)5ysbT~Pl3k61-? zw03-CRTkOp!J;?E&0La;+(vK20DSw1w>8?#t>%rW;}ZHN(}VLNy21W20FCi5$dSP@ z@TmCXH!_-x)p<2_#wLrT*l-?@IUEw!JB&4z59@JFw=|sGNI>PhRe+!K5*I{u>4B)* zG|nnntO#-Oj%FtS*-XD4n8i82+cr9D?kbiG#zDZ&^8SYn=Ktt#70dCc& z8yPdaf{4zsSl7Rq6;H zB^02z61qBaVjapbH71l$&A^J5Oyrbz^~D-oHR}l5wF%jP4$G=!(djO_aam4=o7GOVQf_!GWv2P6Hr_n$_Vl(7HCS516;bF8Iy}c@;UG;9l>B zA|+mCZU7s{$&7mOz<-=l7I7vTHaHih;E%sEZd+|81&3N;?ow@&lM#B^&LOHZk1#`4 zq|x3M9uwXiQB|wPID#v@gwT#5M}|!(6P!?~UpSdmEHijiB3Nw23qYU8{{UFTj)<@M z#&i+kv@ntza7J};PE%d9Pcf@^$Kl9Ddne35B#A!jHC6&wtU4$)eQ=M;=vkKSZGni~ z$9|3@zfXwI4IVRvBG5?TS+OX_uio4b`_3+J7N}zesFIt?mC!9aa?t(&?40AQ^%iUS zU{G!c&)jBKtv!BYixyl{Lj~TX%Z+Q1>Vf6Pw6Y@?i7VVceZYcfo18gB6Vn0-T4_$a zz*i7~eZxKbYy98@l|1z3vy+J8(Uu%iKl#<$++qj{WEN~cAx7l zs~e039q%ErPIDbp2O8_sDMY})KDXXYHap8~OvX|TdN6G#!&=1ZpSLI#RI^!NaPRnF zAzHWazlM|Fod-h?NI{O{%$+To? zhzg9K=)icerA(j_<3t4A!l|f-A9HR?$2h3bOhN`Ezz|)cVWkS2EVv5X^C7i)Qz(_1 z)*4VN{9r>{bcS?V9H$tPLl5nXXg2ZKWY(kooJ*_6k3Vy+CE?MX6&!+Vg#E~Dnt{V$ z40vI{tfwEWbPw%}ys7!lSHS1j4R)6xLd%P!9~HrYU(@~K?Qe!62Xj!!N)W+zT-xP0 zfQ~N2baBncWsA@JWmdni#XaTwGVxw?c8&^RN#xGOU`7L_H-_5M&46%uoa0p?!)E4C z+NB0)(fWIq(X`%CSUGxU6i`KDn_O|oa^X`(#m8_lj&|UXY#v_l*zV1S2|6?rBXJwf zCq#Ul%!=W<9{o%2lApTy$b#^w19S0-ACchs%PfX!an&h>;w7?6fCI}Qp%~Z!AZc~ShbDWB$$C4V_=JkvNXIH!jzMah5)vMZmVjH4q z-1&kxqN_8GE`zI(U}(R_a}lQge9NMW3H9y6ZVH=2AU^`VeZ-E!ZeWhHsGMflyWva~ z{{S9gK!$+fLe{_OhF)3ZWc@TieK=h42N;H~=-xASURL!FxV#bmS;PT#{{Z6|ZEqi$ z-xOg&&0jDYg1qN+Ey{je7@{S7V6YR7HwyjcV_u28bX`4D?k|edd&D}w&u`4V1P`V( zP&{yWh}~lrzfKB>UGDw;PdWRDgA!rDZqNjy2sA7 zk(Rb^xtlEH%hp0H*zP+seeeEbi3Dsi5!GMqhER@7L;$3`r^5Jw5&DzbG0Dj(m$WBq* zaVk5`16|Vs2P<7*H|vw%%+xzFQ10ox;(SvR=`qx8r(G@~1Y=M=dvJH0v<&B-Rxu)) z-U1*^!O+W19ILEmMh@H2mIygHle`-|r^D!C*f5k<;lp^L+(V28VJ}6%x4hPJ?B3e^ zVEZnkimHhmhgqoDed7%osW_%u=;0W-1K=Otu{^zXx$hKg7JGsSs*!VqCJ*8Jj2e;K zKe3g171B&q$)zpK$pYSh~G9?!?8#eqyY3 zhiiJk=$#|Pz}(R2zThuT7lpte^`T#Tz=YG;IO)NScK%KrFZyo7Z3A@0F1noa zoQgl5u}v9WWGS?8J4W6(n1n~;S=NSh{l`MX+-}ZXb-ajgd&=EQI6S}rwZQ?UoY%Y+ z0W{}T95CheFL>(|>qa#+_uN|MlQe@}{l=0p=OIx8U3-t+512t7w)vM)u=|LqZDDQ+ zvM}~veqm10S7g8#_95SHZFL>oB^w)2b%G$bIevS96h0V<2#acL%N6+RX@KFd7rc7{ z4)2(-Qqat+D@}d4gWleL<%Ec5SnCNZ+ou6kQCM{|P24mwDA^pp>k2AE3tFR|dT}tG zkTL<=ZullVEH_tf2vYrJAn4P^DRUE^Faou>;;A4okh^$rTFoNS<_vak4f-b-8rs#1 zg3_k0Y9Y%^2_%F4%o>OnpEGqsqrGD&r~PFtQnwHHoFeMCF$x2A39J+f8ie;aQJ=i7 z4rw7P)g}Q*KRa`Q9vf4aAY( zR~bS2`G{lVjB0H3burs(p~ofpl#wqNS1tiLf7=ocTR(GXAZnXmm~g{lP`sVywIAyq1=l!(v?Jd31=Av@;ZafP%x`*26O^Na>>CR9v6Upz_>ue&isin|Y7 z0$iSda+Fcb_Z#4Gt{mFJ=t=V(foJtwhMj}Y+!l#ziBW0joM07I*95o?t?1_%2?0y5 z@0Pn=zj33CenMqTmkSMz zzcGSs+jZ~e2co(_c*H`6`^g|9N0$+`D#!gy1w<0ixgp@tJ>`lTY2%b1p{{5L zC6&)td@$-NRC$K?ArsnhF>#6U~3`p2X5Tp z4pfmc2yw6H?gex~{kUyjU*Z_byJIpc>v#0aG${W7d{w1KL%Wc2fsTl&h&O1A;V_`? z*H|@DJSTau6quCuL0+Z`P(EOXYs31O+gOg=NSi|Oa+;)@Z#X4Y2L_+#9>fvg<2Ib5 zhE-A%o6Z1_>$n+Vy|F5B7dB>~@9rtm99(s&K0Ck!6`*;%UHjKq%H_Jo^bkgQaD?7m zDyK6>R?f}Lg^vTn`(SL?LOB?OGC=JzG?ZPOelZo)deXgMSW{^9&hVWi)6OIi2}izS zpfvb)E3fhs()2sh?6 zm!|6rvfWxU2%^NUONhasHwSPfsoRcBBty&s(zH7abxpW}uXc5u)Y;Y-yk@9I-Fb|K zphE&Q>T~2Ip=@H5))Xy04p`VQM59z+Ji@s&XqW=7iF!52 z*^8j2_nXbY#JMakjy!W~wK~OAgz)z)vLVgdV5?PP?Z9k0CJ)?^htnN#I^l75;i=oMa?n1K|gOe#1nXfS7 zr2FO(`4To`4(=}uMv|aTX=AcnVOVn?=O{4zaZqzjz3UB+Vrv!-nuxfe213WI3zjur z{+I-%SDBMkVO@O5XeS2+o$JOZT3vPS3PT2Bn3g-3MM?{&Hwf{AG-!9g{W76C+Tcj% z$*hZ~_vRwB2)HVAIh}crOCC*Ouue;o`CXYO2+!q%fRh{pXZL0Rak|zZMP4$*EDmt7 zK>Kn?IX3*tHC=hZ6vTA*F)qj;;B4JLiEXwvu5`d*cg%!?PNxPX7RM zf(EX~XYL;oMbW(_g#2Uy!`9%f4LGV$%TRERLy7y&KSYqjZFC&` z#A4pKaRm_rPqzuG$L=)jYe-htHnnD(~(uMF;uD#Ale*6g|y!bRFDKoi<^RC~IF2xfPS0 ztAJP^g~;UuIpM%JL+X2!%E9dCIx6vyO*tkgy*0bWe2h}6=;qBjLmjozXYK=5o&xSWbfZJ76Kvf`~K#22IPQiZ&Uk|x_b_XB8=r>7Tqejf52 z@xjSY$3{?|2_Fnk!ko+_b8aUGle|8$h7)%T#h#9Han1Z(f;7@Jtc{_F#wH0v+<+jNP$OXE@o&9}Dg* z2`nbk2kGI1a3QmItW>18wf(~%8x!e^#R1!8`-@9*8hv=iBZq?Fqk3n@5xW$p(u6M&AuDUr<2)+Ekh{REUQv_D9>Kx-((!Fso-48Y12*m#REYjcO9n=eMDiGAk zgm$&-tN=#TYk=*rXVU=Ld*9rJTK@o(0YX<;yBNt#*s6}cId)R{zH(`VyBMC(`NC!C zBKL;iAAM)a$Ekrzms;-@r$2H6t?OB#q4#__p|{7l1$LX(D^AIQP$&Cx4MChSRSj=g zr8IaB0l?!C5y-_XD>mdtw*LSbILhuPdBiwMeErP`eDBP4vu4T0XhDs*Ko0P=QiHw3 zz^pd<+m3(|a%GdqH_%{ofSqDOJrgxT0KvoqYsL}_d)@7DR0&(-D2uElowt>E!ARI+ zb*$MAKH^GKdQTV>-a#)Iz<~9|JOW#s0ygiU=H>_vU_VS$NzZ)XAo3~gxJ`o)CLER! zx1q9X?IRk71KMH0#OzO?*vUv&hny>TQL`X(Z}*& zfhZ}wwpB`Fb~}FJN@Kwsppwed?jivbLEbVKHtx8_-q=yVqjdc+jOT*qH491>V?ALy z$Uu|pRsR5(F%aI|Koo&f5*BRU@ewO2!Oj5;+pIIv@^E~{Cw+V~Xq7e{=OQKMCL9^q z+@1~rWtk7T=APwBG$NYbSgzc0%ZwDfv}Yn}Zx!S(w|H;-VcsDC{Ei?vml#v{zGMnS zlMSIjH2uU%g>c9sERJY|*E+z3YdQY_S+!vQ09%dd(sX~E-MTYZAb{sr0(9)}ddVHU zb(^&;aM|Aa^A^J6OP6UPv-riqN=IGcXt!JLWE5B%{%}YpzPU}hJHa;2HRiDpn|@?D z#sQTYQ`?eza(C2!mjJ^285aj#=*%_(6h|BhsK0{+s_+~YOWOYc7`qYSTo&v0G6ig1 z<)7hzARb3^5(x>h#tCENf|QzQU}S4}#1yLDD^nL=F{KDvTx{S3Aof$gn7yehgc)t_x>=Q z?+Lyc)+iz&jR!Sh1SnE0P+fyd^DR4eIxq?rG>>@zN=2Px(%Yrr$6OC9hJe%z2OtxK z!PF0?Xo0Zrz~F3-?$m?xA(|XCwj!*-4k^s?;2P_Y>g9?wIqkSB6h{H%HTUjHJGRzA zN<+UcA&LjwLZDry6zDP=c)>%s-_|Nk78*e&hun0M8`cZDOjrXayz3r}Ro@c|Qn=%; zF3IyMN9ucsBJ%TrIdw80+zg+>;62?k*o9&JG78;lZ~WmnZ`KVC2IhxtauBt#4j-5h@}j-d%urGVfA8ESCW-)U`GMO@UrfD#LuuQ-ZXK{g z6X&?g4#jmdnu5!nSv5R;z*kCd%ww+mK4YX5FPq0v_+~`(kGPvP_AeN_AsEaQ=&ze0jvn5QFeDX>W&SZXLNqTo1y4SPZS{ZG zW;lY)fs}_HyUGbrP{AKR>lFrskGK_~AJOwRN!{XOb_^M}1PF{WdxgLPj~ro>X2SLF z5^uJfsCksCJsvgm#00jG_ngH8dHai#LtEn#gV=v_1zZIF__*1){SkNWJMzs*f;!r> z0_f;ZCI>)W>vG~qbaRVV=xTeP!DLSW@%JOMWBOth`Q88{Ma72c=a~m`Ya%=jGBZoN za7AtR<^k5-^^8kJ*~W3C<;UJZfbE=fj~J+T=M$lIn|zr)6yEU?cU$>^c&6w(${V2v zoH4*#p7ckW8$VZ}Ix#X|>g6C1gO?j#YH}=s2grrn)tRw3flmBU6Pt z!9>@FG*@y?@zw*LPneNLw&T!-soLZOk1#Epa@QM;%vFY-o#7V}nC>aCp0i>-It;O# ztk_wHgixM;E^bi@?(vJ+!!E|UNg6TdQ+t>K z)&(S26NqOmBQz}Bh#3_ZasF5KXgp$U{j&Tx7S z=Doy%jsuEhhJ$3U7;a1j;aq7k3ezE_4My?u)kpZntf^vZyGVX{k3bb}w9H6@MBe#473CXVr5p##tj@# z0gR*;rbITD7a}D#%xo!1Tz8xT?+G)vPnlZ{Lz8(5Dw!Q_&i9Bb)|0%04+aV1`r;Rt zf!0f*NyXcn?uOX@2AL64v7vm$LR-S^bC9**asyeVZsb}~njK(5WPiU0imQrjNM-%?u*x{xg$hy7iBtP9}83 zMI((2Kb))yN&YLj<8Lqy3!R+@NfXac-InOR_FgpZSEpib#;|zR; zk1!y4*@7Q~tP5KY=Xfv@BE(G70q<;4u9Msd8xu*4K;yo3`s5aJ+;C4Ov2aMzg)w3_ zonA*7G=jOq7e|7BoTBBiG1b_nzToLAt^VZP4#vE5M2{4nWdsdTb6y-B@Homqw^_-i zd4IkuS67FT#ERJEl6Q$9@tV~T%R9T`Q5-!0&501o-Xfa^Xc0maaL9I!u{ zIdGKQfa$}`dBZP+h5#pe8WapLq~2>_L!b%|qQZmDv^>k0Geh-;x~IS+786clhL zsN&S*(&$(HV2&cEm+zS9Bk(z&!*fxAwwC)4$xNz(hCinBZQwhyqsm-a0Og@s2+x@ra_m268`6b%7M;d+KJ-62mSR zVWHu~Jc2``BE>aNc)-bx=)wYt9eayG(_9?a#s?uQx916ip**+DnF<)|`7?1h<^&S# z&dQxWt_lPWFbl~!`H=yP*N$@T1)k%z3&qZVhRiiXRLPE6g2#&f++U#TI*(#Fg48_DcnZZd2c=4e2Qq~jm8*MX84EBnEay6K!$ z5=dZdb;Q&%3PBy5`W(;9Xk{ku4S*o1;}mWTtY|+-d6EL&m!HgNN`oIGh@oqlD={0p zIx-B((sAfr{+U}XVXSr`Qhdalb+BFx5((ZMXnDP4H?Qt+01AI)!E{vF*6>I@V^si6 zxGe-jcvx#6nCac5=*5U^BDk7nw$3IXK#s1Pi54f95HRJ|It5hS%R!N0dc{XTa?Cld z_x(J|Jc^$h#()Jn@XkR2hC4m8Mze@47Gcn4jxS%h9QstIO)kK3{jM>2YhA7a5Jy)x zyK*vNU`64(!p6HWer0i=9BK)p5Z>8gTr_{I2>==Tow(aQ8+DL?sf$?Ll7EL2Noa1opD~I9hypzS046aJ+lZ~I z+u@G4BS|>QujhE^N&DsvMjcu(n!D8B`ee!NbGQ9L`~tU+G{J? z!=C0qH=N)cH|KwtY1K)77(^Qkq=U@L(Gbf9JvaeLwee1}(QARZ3zgX~A{8BL(Y-mxbS1$r=m;8rLo=ijxC#ht^@;AQ+5?;LAXr(-07E+(J5V zd0ngY%Iq+dh%i*SEo9bc{9uVs1Kxf4VXOc*3SMc}Xms7UOuvCYyOf}d%ZegC84~YO zhAoQ-Lq1#B!?h;9Z{`4DFxTM35OSPl-CC47CzvXgyBC<^PHNy)G+jSlu#!NXafL|G zrE(hAa^fi+{^rQ@y#3H}b&XQbpK#SzaQwp0;B(E*sTdkFXs_oYNZqZ-H{m_Nn%F$X zP?GWYAQO?xg#n=9)>gpdw|I!vqsiluT5E^qTCjow;wKp?`9kZK@LMxPh;-~H{ z`sZd;rl%in6g;bg-!d|q^EN!b-D?Ryfir-c;k%{?5{Cfy^C=K`&^gG|+*P~EQ6+E8 zIu+x#qkZ-Aibt!*vhdDN$xRML?&Qz7dZu4cy zh|6sbrI9k?lJnWdE#U_1kaHXX0oX6h0nb2oE?9f_#BZ6y7p?MPw~HR3{+JZlXyhh9 zT4NBSwvgEVa=MT{2kr(~4#)P!fTBTd#z>lB>5-vbxYj*GG(dNnKv7#xvqNY>ly(p> zoDc`ryf8r*9)Pbn(x&e?EO6a=hBi$jiL4Z%;9#H~G60Er-ZeAR72E+sC!%U~GH9>N zfFvi3K;Q1joAdK3A;G)GUfc*TiWu(2s!+ z6=u)A;7K4}x4g09>V9H-=4$Gh4OaN;<`Gm{))3T*3{veunl2)dwb!#XD1GF)(TZ8_ z3I@oyJjNry>3En9B0uM>0aq4p7FUtq%(%3vL;T}l7k|#Mq-Zzhu{O=P?Yxc+&Wr?t3_W~jO9H|7}_nUyQibvia+-ZR+kd6(ak02)2ngbXh)>PtqZmU zH-F9FnXK3hOuPYyDh`dcgo5s)hX&0%Xr5;h#8X$iN7J@;A^#RsvVvNAHP zEe<+u!1v%ZV(EaOc)7P__H%P(mM=Jvv~V1qexGg$gxz(2t_9Vce;4K*M6OT<4K(Bw zpf`QQ5sP{IfL6zu%)~F8T)~;m%|`hi?w&GN)8kJVAm5*S+Hj&{LVCy z?sJq4)PIIzo4E3rikH=9?g6|rrcFW9lmva#f|c$43}rzt7$q=7Vpa%EKb(RMwe{@E znrRNOFGG=Wl!1soh6t_R{{Z=dGI{cDT?ztwFseUe`Cpipy^TDoH=80xfK(FV+_DXh`H zlyA5-C>a{Bb&U zAIu^XxTl$6!d>4ohO5lH!>l*H_dE4B*CcXu%2Bt)CTK?LykDkYxhBsJRj<&i=}VbF-09=_p(=@aHED(*g*U7oUh%9%Q8e|5b~b5?Yqa9?h)g#S5u7C zUWT&z8BICxbY(zP*X+kjq(bXk!_)xj=Nc_W&L$lQ(`P0^h1Uwkw?leUw=KLmPH}3X z8}ZgCS36v4m8XA9wXKck6VQWzBBNbpQ9x7rVyO*oVQ&ORiu1m*3Y}SWk=DX z#V}kf4sh|YD_FTVGh$u@{m0$8vrS(yL!IFS=-wj>@rXWDjthC0C)KoYa#(twGNr;5 z>lg1FAMDNh$jx0TdHu+xO8(&JBs$hHKn{G7&E9je&ha6|?8&jRb=1R?-Bo1%{pUW%^O_1byfUcAsV(H*aG%P({ zE-5Z5Pvpm3l6P3< zW4deLLCeqdoAOPA9M{_8YrwPNxgFyW(GpWh$Y$<7cW zD3-Z;-8k+Z;qE52AKwvxpxzx@Bd^>M1vZ!@~ElpxXPS3a#wZ(I2!2)sSBv1!;lRi}wj0D(CXELkdzixk#VuO?U-sBSL-hhvsey zxQHvQn7#u2r?`cYIxjIOn>$Pdo4nwokom@L>ovS#Q`mbk;aj@(ynI-^xVwPx470XG zkIYqfGR=8hZ0+VuZTG*x;sqC>8IaRlj8mSLi`?BnJwe0we_(tc|t0uP&$0I|dU zTw$7RpYu2gCilfU#7Ri+Sh{jeOr}w0Xbm*qnN>uA%6FDX9+vY@k~Y8B%+}Is1paZ@ zqOVw#I$s&E>2{qsv3DQ$9!(A@0{!y>7w~<=72(@+RF*o*R5zX)GOzGugx89g3INxx zA|$nNl`m#b!^wNlS2c%3b+SX=2Qy~pP63+ zuJcE2m)z7RJgb#s@lyh<4-vlc)T}C68f$w^-w28sV5^n^+}i?-CSrd$TB7_<#2_jnlWk=*Ye?1YE52pT_AmNo2%1X z#PC`iF+|aMM_9lqCal&9{)Y`<6u&r`Lng-s26FODjU`cXoNVp&$){3(XDCiIe$2JE zpW_A%R^ZX5;y`{gYAFM(inrXDF~uQCG&lnxx&1e$P?(XBhi z69}*`Dfx4RQ9K8kXJLQ`xd&I6Z)JkB|)5@`GUC9YDg8c^iz>@RuDM%4>%yAOWsAtpzpbm_Sjsd5j@#oa8hY=0i2D{xA(4J>pin zpE$>aE0Z3c?Zk^+vKd%w2SyIo00}bawHCdZDcf*?d8Kx0=(}wZU)yIIx(zMqWRteP*Xzs7=`JAjq4i{Jdk6B zw&Yj?Tyry9FFoXNqddnr0N1Q=(Z1Wkf;94p-al<^H4knpYenBU02SKt{Nj~NRW9HD zV~`OIpYIzSgnKtQ2@tO*<|mTq@?^qj+v$h_gcrZLK#dv)iJ!6$-m+T2>0^6x!jWIP zT~b%ZR4~ zEjr-mwCR(2~;yzssOiO*9abH@e;Lqz1nHIuc$5Zq7=83t!9 zaOI6#!`GODs>Qix-;L)C6?E`VFy>vHe;BO;foAoI!@moVIlgB=N1vED5#Jr}yaXza z^}pOd?&ml{+DMq30TdN9kYN6FS{8t8nvR3?v;?gOOMQ}ZGr z{{T1UI6EHwUJRXUr1)^60YraXE@^pApD~QBN%hOZQitET4hmSkV=)iS+|-3JIhhk$ zNrZ#YzJCramcPJdHVdM6KH{b)Pbq*Deq)Mv{Bd&PNy|ABiSCL>b! zt}*T!Cr?V=bAlGr*f)i={!FT}=uRZSL>A&z5=SAvw#Q5y?ei%k_ipf~ zCh$(o1!u*}8__=C5jG9}V7HBTjRBV8gel~I)_OafVgS(&{J?_oijR!K(P52m%ZQ{d zA|+*iwi~mD_rzV`sa9i~y3%M1xvp2k_z?VZydO_k>V8A%_>QIyjKpB*Q3H;(Mg)n3xWq&R{xS64j1Yf; zaE6^9nF|eiGH^xGxg=K2%n_8P_s8Y}1dFpY3%36NcZ!a8o1#w1nrL=h+Es>BMoAMb zmD#6_X6eZpu?_w>Fc9lz<)!7Q!2%@Iz;vqV#Hj2#d71WgKjthYQL!Yz5^oBkKn=Z& zl#JK)Orany$IRBx>fS-oMn+}32Vcd?t6<}KKt{efdxQodB?-^&JD?z0gL&7#a7nX! z$c~n^yr@6}T#hZUfZfd-cU26?RRyJtm#f=1P;}EpIH=9aE2O#F@ zgH3sc3t6TGsK{2TR+G1V;>0!TjN3r(G}w z-&+Q^i2$m8zj8oB^MYv8q4S42<#=K(EfYpWb;UrnG}Arg-p9N$8is~*iV8e8e&wSb z?;+r?rYa)qG@Ru%hFP`mITKEY%+mRK_cgn)U>R})y*sWY0Y98tY1aPECKm^N{{Yq{ zY=3(Gm=&ZWocLtd6iwM zas#IyxNT2iqnt`~61N1mMJ6rbMyY?!dDwD(;w|rwrUq`h;lcrUcyW4G@=Gq$EB5DH*@j!B?5kGP}VF~h1 z8a%a&)uMkLVEi6DS@Slv3&qOPR?BhbAZ%odO{;Q=dh6ko5Og;Cn-spx40Xwy!s)>9 z=Kwtu>5YJfSmK+m%}!=&rSbOx+P!7IpWJk4p11+6uk(~czMsY?NM1ac0&4O(y!hMi z%#@=B`k7N?2K~u2gbF`#HU+FO4Lxe}gK)kvw1?!x4F|;5zU8W07;7RAR}G=4oPhomwPne;y|5nl45{5mS1rjJM$!kZyD7s3<^S1Pu|Qd zEsp^*8+;VXF9;?fE){3{z)l1C-m{e*D?sEXae@Ru}jNbWITl9 zmkFo|!gY?>ulaIT+J<9&R@g8;E*sYT!o|& z!>0MkB9JHS$^m=}ip77fJ`H~4+6X>mI2rx0+oA=g1`j|zT&(4{c_eejJcjGcB)z1_ zT^0F)oIr&$ywc)DoU4WN3=|DE2bjuLQ)ow6dgZikjtm066Z0J|+55clcJpwgBXQg( z`M_$DxEvseH0NCB;WX{%86lL*BJb0jiqnR$bwh~`b48%xOQgU98b^5*xXLbFYoZLs zJ_4o@*_FjuqaqEG&yH+^{a``R>`bQu5HSX+IQSR^D2b+T4xNG5e{u*lyb!Z@kD0>h zgQth{2-xAyHwKe#iIN~uc3tH(gt>6jT)knmgZ}`&WRTN_>CWe8x)T`kuLEKZ6oMqtT=H8xfRs`G^*Mj_wjr9ZZ|Cz!=nLV7Tu)44>`C zj1Eo}(dXHnvwRe$6G*K$&BjPwTgxzMqFKBk6IVxAl$;ich)c!+h-Ddz?&6xJ;s;(A211;cXCIgE!WJ^UTDZ#}T%&?AZ+_Q?T|P+&JGltl(U4UVL$**KE;>R0g4idF~H7#smyO z+ImW5SOhwJea;Q+eCA+G1=${3gCzwyZc!UW;4XiWHB3YZ2S+%oh4$xE^&GltPK*i; z9bv_te@v;w(G*HamV`H)18fm?^I}=0X=>^yQ1ZQ$NgwbJ9)Pt6R9&wsortm za?x4%W%2J8(BG~}2ErIr3*$Q{eld3L36x>BrOhTNxeQQ;Z_GfTrz3*YylWzU12GIx zznGf2NiMy~?KN4vk=0_{2ms{5z+%JPH40mgu60A54sSM?0L#yPsJyS1;M0H#MpUXnaVu;&VYuRd5!q4X<8dJ{{R>} z#O=bl0+l1r`uUq40ifMJ<@KsD+lI?=M}_$0Y$bqfxFl)Aqdmn&A?EO4XbysIgy$4A0FKvYbmWDvoMO3S+Z{4%moE!ryjf2L3#`_jMWg0B zLJj`U3`L9OqlS3-osu1v@)U+J@X1gtBp6qJF-xe7uJA8~2IfrJpIo#DF~O-%Yee7K6%hr7i@ zC1If36t9>JH5T)XBfx7AAY8r8aHa^@p59#LHOBR<8YI`IRY6{iP$v7h{FBqpNC-46 z_+&^>IeV6c$nUklNLKdslmK{QzL~lacZJy%Io`LDU`05!ud3@J+y`QDnj>Vi$rX_5 z-OPtB9t=@iH^sn>wLiX22Fzw|JWuhINxdU`3gVul zwR`-;#;+v6bgUP44k5}$7k3e=dg37$gu@upe{q15b}z#OJf)MLaV!?a!56Au{{T3M z-L&59_X9hOX7Kbk&u83<>k)Tw zD)wXE1+EG~&lnVPTdH0{giKpQ)j(~B#aNAAXI&I!v zp|%-#wp?Jv6P7B6RMYM(wAZUI*9AtJxd*^|-dOTMbMUyh08%`Uxk9LnDs!7KM+~VZ z`1dq|8QH8NL!#W;1*-m-fp_7}#dg^7gdoy#7Ucmqc4mTaI8Y}BdAhix1V_CyT?ZDi3_$T(Eg^mxW>3+13ui#3mug zc<%tvlaFs}*YSQ#LC_>D_QiwQn^PdhL)lqwXzivI(q$P%VMu zk?T7{oI$PP8UmZ9`;R0JZ|6tM z){_K%Cz!q0h2O3~7Ha`^CijC4tq?de2eYEy90W|h>sU<)G`J>!j~aK$g0iqazjC6d z?ix@UOsiqIg}<&4PNb2P{{U_jm67m%;H7e_k~484x|uoRl}7*Vm2 z?VO~ef&I-iOUFD0Q)yYL8V$$X)KrUr?GSZwk&3^ghJj0oW3_nA1U6%|nmA2juS1J< zj>?0+J#o;U%vIKs(;jA>v*z&x?1Zed z^l_Rt$A??RMG3)_o%i2JWlb=Fv4884z@vYdhoO$}V|FLl;uJM7#|e1(iKab$&V<(; z8ECLZKtt`FOf;LGIALmhIG~j-%+jPTuUNETE}Rac>xqmF(9!b*3b)E&6|M(& zF8&-~c-|v{2dt*IS-~dPB7kdwtvWb+%Yi3C-o~^(~`{C2|pJm zwbvEn2Lfs)9YrBBMaUdAqp@)~NTM8O^E_wuz(j(qw*qwYV(9V1VWLO;KXB;LEOi(xg7Qs`@46#8}{@=LuD0O)y|mKU-t+& zAaC~8JTKzeFz^d(b+5RH4YL{0k6$vVN|f_2W3TU?G=-Q+%}OSwTM;SWZO2qk<;xb0G6U#1~A{KzKu=z9KfMGB5)CX+(o`bdWvEzHJT?TXYbg9>lMU%1J^#~*V^0G;ogWu05DQ-d)$ z2guJ{ubiu&-BZwN(Zx|&`e=?#3UM?_%!;H3vPj2;xYS5o?k@vSOym7N2r!KBB(vY|s zfx*AGDFw-mzwPTTO@G;rBN35vYe1i-YeXbd@rk`e;P~O&N+U9W6pa_}xG7=2PHt*4 z!IN0w%lO_D_#?r+;E=WcMkeTyuiS=_R}yGf^>G8S>8)b3{><$s>ybG}qZs9-(72jZ z9XMTU;J`-czHx>ER@;Sj(Ym_6WHF?*y*a}GlO0qeO7WT+PB+VqVs`1{HV69K#I_@# z?^qxvol~#eaBV*IFqZrWo!|F_U9Lm78vshDF!vZ?i2OfrwH854Ah10=eq_(9O>Yrk zE|XIChOp7Yg?Ys4;Sl1?RO!`^OCU8gtrIo;=+3~&%J41`4B7tASzO16)fquB%RMo#h8_c2hNv}@~%iHoJe??Mjgk)f&H0#0Wi zZb5sm_`w^3^N5FVa)lm2Qx)#4-*4nh&61M>oNo&rL2+}Uf zy{8i33I0ZDiXQ$~{^8Lo(zk8pOKYafF2 zHJ1CUE(!=m*~RlM5;haBt{sHYXE=owsWW*_#nYg1D#5xn{WC++^G-~#uAJ5|PF|h3 z$WXI<3&W2}E&hxHd=~(qH9*nm&B7#f@Gf(98rHO%FtlxkBr!1^$gK|;&GOb-xnDgYfXjV zG12o%*0IN+Z5<8@F1o)j88VHGczzBAK@eO3Yv|tbGZ*KaWOHwk{4hhv4!gh(of9Z0 zvR+IlEf;w@Kl_D8@?V(R#FtzgF`*s1{{R^s6nD{)L>H~O3UBjSO~PQ1>~VqL8tdVdJtySEK#vd8=1>3!K8^q(EpJWA*crCO<=_go-DfnqCqK~2 z0#(AK_Y8j>JYsQR>}v$W0tD1BMFZ!UXDEW}`TLvzX4{Lj+zdpAIb7AR!-G^~*V&vz zP`8mvKVQt%r#eg zb&6o?oBj-~Q}Y=ot`1it7b5COmYvggt>v&+Q+P#QM+S_UQs;XL zWb^I^b=Bt+u}r3e`g<{9Vw(KGQ=2iILgnig05aUZ#Qy+zEy*yk10l6~`Gast{g`aN zBFO6wAq{S@D`>l{3@BOVxG;5H%}cC&l&AU_uqa3RmpFP?x%jm~o4d|Q%4a`{{rRkT}xMAK2ZqStM|aDp^# zX0wnw6nT|9_}&?ng0rY%3huE+)_cY%B5QO{xGFt|hk3{mz3-EZrcxh+9kpPrW|^!y zb3VRhBk5x|$_o6$YfDAtetgAlm$|4A^xb`!+CdSj91d#XFcXM%jRgRn!TW$hXw@{# z0j%8Nz=+n zckV+p>R+ZH;Ui;z$&%amk%yk(N)VsS$VE-C3Md1!mBG+IG78bH6VDl{)a;&^6^5=} zv=;aO0Nh6IxWN!DbmsyPt^VOWCC1MC#{5{yWQnbFlCV^N=iGJHLN+)hA|gU%%H?2) zm0fyfz)9Ww$AmDjBUkv!8ou8q3<6YKdIbwV#vr#c7MQjt-nWTrIP;FpYpaoeZNB0z zu$vzL09-c%$qZLZx|{|TyJv=j8cL_|m~>Cy3|oHoaWX(fLF0@HDX>rXi(i9n!W-Mv z#qd1Wc!5R#08590#_r_U8?&rkC(dY?C7jWt4qSq7!t_z;Fu84Eh~;F|#}$;*tXiU- zzBof`7$r3~9MYYbyiu4|C-PwS=+=w@p{^T}>3+-sc_%oHQMXPM-A;Jx9xF5fmKq;& z-e)SY+SlWCl^$6*&VN}w&W490A!iel2Lf%+c>%CZ`5Z9@a(Uh@c0kr_%Yje@2bl=; zv~n&gwQ!qf=1@XRIewqGw!rmtn57h7&3AGnV5|2VBBB$6EV%>uap(oRvHi=M4fBaY zk}nv53UYI0blv{G=Nd9|hA{Hl^OPK>;rWwmAD0O2sorQ0;fRU|3{@Jn6mf!gS~6r> zyEzRD&wOCy(Ivt>z5LES7XS(sYrpx6(?A+={AJtvyy9{x@zU{&NECG70kgA;VQCQ?naY42ch?iM=8fOO~X4FsXli~?D`%-Sj>$NBlhq@hh=1xpP+vDri(6TIeK znimp)4i&^!ys4V3ZsRmfP9O6sn0H=bk>^03zGca`AD7H<4Q)j*)BuR7qY)70>q&~= zMvf*H4Q_VeC$b3ljCO$J{LKnl)+1}J$n5+Y&O;{Y{{SwfW8cgK8P~eULb1r#3b=hB8acz*f9arxKq6gCf{Vsd!D#o) z8ZRk0$qIZ$xQu^XLWE0^CYl(S0XSN|++qnEG81A*IB*TE#)@|GhD8j!OqL&^^8sv; z+kwb{^MD4ge&XaSX$%DdL@asMGKwnojw-h78pTd_ewiYg4t`~tXbCps5fqbcI0$Ej zdf+OWHP^&3{VB3_$o+7^g6ebOa9DDoq;p`^7IXIi*5-A98_wWbg9ZG<(5S1JefxyA zhSxaA6R0@TjWhIZ!j)c3ZB$b0+(t+hOp{tvjuCyB3oO70_1N;{0XciTD+%7mC5_jP z<}0z@qmC4t?<_X+BNS5@u7ZZV|C5WYh=$FmGb(`b$xkxv22_mtQ- z3DBW5Od26}f@>_`HYcVwZ(W};)M8leFbvlHgC&Ha%HPaE09Hp;?|9i~4Ng-BU7Qy| za10uB*x;iPG&DR-A_Goh4wL_gamd)a7UhyPV6MADN zRJFly0Uk8*a3tzDlBRMTa08pP&9!K8jRweO;b^f-g#=q@adOfYZeq4FpR*MRbJ6o7 z$4(x(2GPAt<{fu|&N_Qt<*?hu%>cdH?2YMk-gSv2~X zp0LvQaEqaC@c0+cq!;~}O5|uYa6qGZ<^Bwa?sjQ0u1$S}<2E9IFSz>{ z-6k8j7~-^CYWQHfpw{v=op$0)8!&iVq(s(i5dp=+prm}Ik zlN_Bh{CSY<>@g9hkC+J!YhE(IPKN$rQ3VPTWG>J8%7~tRd5ZB0hMm4Mk*FxI9%N2OX9ynKzf478>)gPkXp??r z2y{9>##K~Ehm1ify$I^yMH0e$l1<3Pnj9^LhX)w~Vg%ksp|*x}I0)AFjMJufjJeL@7x^avM9y@Ths=; zVMUr%!Yvk!6uS1`n*MC8q^Q6-mo6WchP za+we0evC8;aH^3bfrpp`$jC@oFfsPqZ;GmQg+=$MT}BdzBfI%z@+4vqyD zV+bAp056#Ps?rXYTo#-SEt>xKVXniqCjkkY2#0DE9f&{KLp&I8Pv=!%O1Pq zz`c(+)#OLpg*UeDLCicMkxNn_;Jc^_I&hXo3$F3K)XM7RD>giwu61RZQNxNcdjRfb(Hx^BGi4dTOadZKPk%n*R)YfbgH39t@f6^$&sRuX=p1oyxNZl%EU)U0)57GE<%5%Sg!jE`<*4&jE|;RDjOG%F_U9;u1qsv zD8KJ00y9AMg|_gs17!}y-UOh!bJfcXaJb7D02+{SA_PIfgn~Z@HeAkp$cv|Lig0BBhVF0c z8L3)Sf38#&9>P-(V{42=yKV+FplqDD%R%Dc(!91Azz!s45Uz@NU~j-b2L=^w{(+Vh zXHPhG)3Ya8ua$LiQ3OdJZYT<8A%r8Q@K57@yT_KULOg!pMH~j?7hpK~j8f70^A$PO z)&vs#p1D(Mo!mY%P7}pe5C9r#;f!)Ps5YQ~&LnXg)6C0ehQ#X(UIwv0-4WiLS;97B zJ85B@qjf_YkkdvV5VXuP8XTp#9v8WRtHXv61TU@#8rK+ZuX?%32Oq{ZiSvv!8YIch zSHHLr8fus-Y9~G1K?xIsrNOx8x9(_79`k%L38aorW-GQUEP;kjM-N;=1|S9uU?mXI z;NrP2;M?;ML{GYypfbYM(swh-a+_B#PSbMIR16$^#OGNYV252lIDd13KS1Xk8nkHs zF|i@beEo3)*s5#~a&ZQsheMLHhlk899MOl&5Q2hFoi0xJ?qFLo^^tzZIZ{K)xDX}Z zI33ochj=?jhS#GS&u z8%lB8j1^aMWuUxA1jRs(ft+E5FL1#rX+g;P=G%b)HsLrM&S-FGiKt-|fz~5H+rR!} zyQwMg%Z($OfKuDgN$vx4(aR2)uGzd40!ETm~R{V{;8@pP_g6v3`0B8ql>J^}~X|7w-(prKF-*#=n^}(ljpk{}D?b-1wFAzw?r2U-4B3-+0#=cs`}ZUc z_c%tx%lY#FmtfXALHjXxr8yZ4 zkn(RNgz)IZ>KB)<+&QIBIm6;Bf-TwJa=6pEnw41V)-l)(j~?PU@!uU7M1eV(rpG;X zk4mG)N|#rz?s5&iE&!4<<~m5{PC97!ct_Uj%ykC<97D4~znCMojQfHB6z`CjTRy*x ztbw}T3P6_;Zk>i~3qlCI||{;^hz zoVpgn5U4oc$&pTlFL|ZCI@H2!kl=zuRWDW1;64N5z!+RffeQTZ5MPXl;U{^skT}#-9i8ULT4#72MSbD9-Y1_f7lY;mE9($j z2+uK5$M4*D=S$C+^p?`$k3)xb%E_(?reJK<-nYgL15;yc!VtQC+;lWYCyorD&$%4Z z*I(l(98DhJmg&)s;>&1xi?$nU*_2No;KIqmC0tsT2UxO2n)qWBpZ@@t9l{zncdpFg zF47!-EU*Ayb{J^rgK!XlE8enf_6)5%UX^L4%KsGa)G#`Z)MATH1OTnh<^t5(O7Q z?)<_nKt$lk3Bc@d@@GD+Z--dTq1gjii8u#`8(F-K(Z{^vs)&8mnIuWUy2hSFaqe%s z$kPA_7m9M@Q;r>;{4p&9O_1XascPUI#`fwMDN}<(vBhE)=i}AI8{pT_GjxDfe}^h+ ze5-QFWd5IqL4h5dmjPD%(bn*hQC)|a2|>w_a0N$q00bQc$84Ube&MY>^m~BBfbHub zCiAFxnaQ9WfzdHx1G)1ygrmaq_W?%_k5?mPhj(~dO}SpMe1v{rBBg9z@r}LX?*p>LxH{~5CwMa)G$JiDE@xniN>dW zo?z1h0BC>${^VGQIdy+=P+)ES`G(rS*Gz;?&4wH_bn+Q@ji2Go>vB5xcq@Fv=0e$d zUoqk!n$ox;2)-(!2D{Bm`#7Avb#c$69fL z9Z?}i}(Kkgqgoa*8n=MER&2h0J30@aI3ta=(fwC@W?f0 z{Rfz5B3pMH+M(M3EdUbSuk7=JkG?R{9EX_)CUJ(uI2c9wpMLHz3a}b+sMOt_=Rn__ zIaCb?a~_oRGkfgi1=D%7+Bc6$8`cB|uEzunzL_PQvc=mTJr1#r$v>9j3%kX+4&Tq* zSi&%21f*z(nJQ5FGG&8?>_Aq}=w_wa8T0Sv6XrZFrXYnl^5e0O&$$k?yuIh5Cr!VZ zr6^U7FcyKD$%@~3D(P2gHGt6=s}*=hyxazsOf-@PlQ?F{dE@s4pm;q!&1eyu=3^Xf z(PkPrV_1T6nTY#5K4axbfOCeaSlIRV8Kk_NIOxdik%7nTI@1=wH*#=btJ)N0r#Zqj z9yq`w0P~aFzk97_+noXe2Qc>;M%I?`R$AK0Mkfki{{V(8_Kj9w3=fm7YvXxJo9F|# zxVs2BOkF?8+haZON{OzMST} z4sq1bo8BP+#F%9-ToXG;9Io*;j1;**g*RAywJr$W(ah_tIubCoTh%bg`v=W`vl@aH zXvGex+knYP@%K8D)AuwsCi2h?1>Jv~s*3REsC|0Mx>qgdB&aJ;Bd@qRLIJn^%-An& zpC52q39cK$fGCIMaIV0cA3iwfuSbqM?bev;Ike*OOqNiCPR!UM=`KP+M}A@7aHa6` z7YVX`23gbrKD}Y=l&$o@u2PKE%8N*Ml{cqJdpC(nR&H~?u&_)C0DCQFa5js?nA%8i z^8CQ9>#||RT=2bP9hcvXJq0^{VH63(^Ci=mo!lMQ3_|7;{{ZQLZF$zP+&`Z<(-o~T z!3tGqb6Z2GSumg>1;Ha_PB8;1?)i(6{kJlJarNah?kX2}v7rvLMc3A+I3D0r(^#me zH4ofvi`+R=mp&OOj z8N+F*@b2d_Nw{1xf9g;C1d{;jIhQPfg;p!qnX?4t)(Cih`H&Pw>$SoKSMwezeXb}N zrYnmLCQ(&o<#Xd(myewgD&Z zGg>CYr!_Tm{DFW03C;99kH0ZG(hkGS5iFw3M8~F-A^yyql<~Ryh$@!l))Z3_4_`B( zst%$!;Rfc8AC7TwkWV!c*3Bej)%mS(#IOE(WB}LH; z2sEa!xmK}cfxyX=6aN4vu`m*#M-fp(4GD!Vz_x#ks%j>(&@D+f&Pfs*wl5hM6_YmtJM1nIQPDbF6`+g( z)@$u}mgKu#YUaq%HHs0M;ML6=Z@n1=;1y08KwjN`Vr;iy;Ht+QJ$=L??*9N7MVqGe z3=vyX9eUc&zcREj-0tBFqHU%Qz~^g$1>&4>tbwABw;_OAeHf?;p-G!7mwp)J4J|+S z0BQSq!52kzX+C6~Lf#vq=tA1AG*+so69TP%FiQY$eHbF`R@WCoXxZW3Rpt#pFPMw?MKUqgHn;3_Z%uu ze&GOTL3nZ5Uaf2}N~zLH`*DDF39ZwE^B6%IqU?P!VYPq$I0eW>@8fufS7^cjRQuE1 z#3npn=lbIHOlR%H36iN^F`WS%E#69GLtNjuZu@%@cFvCU5 zxMt!T>)V4t&F{;Bg4$`9DBP7(jDk8hTuhrc3vpJ!kK^|>1Gw)DoTx#>41cBrMcl31 zF{vx#tb4b%H&noMadTZHq4A26!e`W$H`5k3z2o3b$4N*&T zW)b&;Ap-pv4XNPZwkp@$nNxW@#i;xvtkQEJ4FSA{QEHKgjEO~vaZ9(~o?!sd`e!9X zw9YXU%23`Q)QxQ9n9_l~8NiA->f*I@b&CV3XuRY$%hTKjv|Z-82|Bji^RpVnT)pEwh}Q~$fT4NzU{!afWGGXN z7GT~O6Sg%RM>S4t!2*VB9H>lWAk=6_%#z*c^?+GGNuTXeqWmKfdm<6oF`95qndoMDVd`d|in<8PP8 zCNR1qV*t=T2TAS=M=hTH!2E))%Zp1^HS@gO+2~##H~>4Qir%~8m0K1XB^j%^1pK6@Lln7_-_@=$p@ni@x+4gM^t;pcS4doSv(@hqHTXN2!l8V4 zp5vH_-?*5ZxhEJRQ4wcu7!-6(;KNg=*^DMMfZ)XFkZ5?g*a>YG;*u^m$Xo!*>bwkI zT+=xWZUA?P080D*GhP8ndB9ajgN}=Vn_j8JNIL{_SV)x|ns3we>kGSRg5Dw{yfzzh zUT}e=I8EFLQ6REzMN%yj2&2!s($8#v%Kh^+92hLMEK-)3^Hk;ow zHawHOsYppPNute}=~J`rM5~VvG98vZf2?6DIRnK8DI`oo;~RaL+15>NYa?pCPVhND zw7bZR+H&g~MHSX9Sl1^E*TCuSMnoXyJz_#Gj!?u4tS?wYu&ir%Z9ozl4qV)>y5~<5 zImufb+@+zRQV0J4GDVYR3`96;WWnMb>LEY&%p7sUBA+*ec*Kt;NAb<1t#MfDE#|qv zsLpUu1_7ez=l32E4R&{w*hiNTE=UNM0YgAc2YMPVpQqd!+AM|Mu&jqg4A%@pZdp(_ zEC3CO*_H3iaLq5d6Ev>29xh{*`HD)EehY$9+C$9YV2ypwYOikfyk?3f5Ht2+AkPPLDIy6!b5$GX32=ch1jPe^ z;}8zZtRj#J{V{4DI&_Xi6j>_C?Y%6@orT`8Z$r0x-YHyK?|gNeS65WVbZEY~5FN5B z5*r+25IdQ$ugGwQA7{fV5c2W<@pd}k!$A;ZwrK7?VG0lj{{Y4@CqV}vJ|kPMvHELc zD&+dXfRn9n1*2i&{{V+K1Z1jzY?82wbj+~_O{2^Uqa70I#smRJ+=<|>EC_{(fvZ5| z^~)4!M3UfGK=g3j0oZKs{9u3yoM1AP-Q^&9A;(w%3B@a|WG2MvFx5>?e8yCEJFhth zBMnVKGerjf0K<%3A=^_qHVEXzqA@1>%_Bp$ZNgPJ88^-;ViciHh4(0}UIR<_1ZXS% zPclf&LAU|M`lcLBEz@%s9;3PZ=F;s$#Bka%TQ_HUun~G~AFgYuqGYRAN$c|wQDEdojfvh7j@piBHM`PbMD~hxahgStFlgO~lK`AvrV?Ta#_>_qgT;w} zBkE@;oJ>J4-ZE;;tLry-=rx-P92{)(J4)zsnXfA)`G!rPy@l3FuFf94z|zEJ>6B#@ z`!E5{vB1QbnK;%Z98T{rfGZjw2{_&d2-6y4_Z=wgYs;Grw8Ak=%|Ytq6|bB30M^9R z$8mIT%&0}&H)s9JDoRwzyT}QZ!a>TZo?mfphkE_ZX;^_YVWN2la~9B)KF#2@j#>9K zWe%qCC`(&#z!bm6C0#4yjCzO{8&XT|$L2Z=%>s3__4t_xzZZD)-Lu-5_}#{$P->kbdIjQ;$G#l{(eMLFU8$vqb$D z4{9c+Yze8vOw;n@%Z|b3FgYO&?zmSZ2;f-=JUh(=x?h0e9tJdh&ArS5CM{e+)h@;Z z&v*D{x*Iv0GO1sw&*mb73vyObY2h<~^U6%5S5t$Dh3R@Y!X2m%Y@$yu81I$LW{PSk zh9XS`)>VMvR3dzA&4s{f{l;-Vh~@Jj!)>lOptpn*s&9^Lp_pWj%IU6&;1m%YIx;wdQ3tbbuAnClC zbJKg6Z8YmOsTYSCHk2SSMgY4$WLQ;mGlF*p{{Y-%Sm~>PL!@QrI0;D?48q=<67G!!)CMw`(`yY6_cNi0{I5^ zb$Y-xScM(t<qe3B!}y zg(W}Rm8VxBh`^@@!voSGwYXT74Z_`*gZ}_ou$-UyM|U4FB5}QUjH_-)1{AWu{{`Gkdw!h~f>-GRS%Bd}5}%`Hn>>o%6ez7=U)td4QWQ9%CWmYc5wp zu&Cu0kW=dSnj^5!vp!R>hh1Q=e`|yW!Rx#W2QIag@NK`iu(nqQlo%mj^P0gef0nR! zl{q&I0P;<|khxeN;HjyrKh zpxaKLxSR#8@0*I78fZBFG0-W5eZ%OMTxAHY)@>cSL;YsXS{sB?rh)hF3T>mq5PIV8 z7hY6$o6lm*+Z0#&>m>nNxWcv2KzhV-yXU<)A!2x*OKEH*mibe zi@#I3fJ;MkVQ%zIGv2Wns7m~qVT;7U7(CeED8onH;Mpff5QwT)YmBC)n=hCQfwJQ? z0M+RH%|XMwb;f9!iaf#XIWR#!6A&v=R~8ziK>n;0&^6=xg058NONN64h8o;4{{Zup z2;>#XNXop=kpQfjqG=dJso324>d7xYr~15s&wyIY#unm2y6o0 zYKuo9iLr#g5Iy)W~aLuRm}arj3TEWG#njj=Ix*u>M?{Xi{{U+eIlqqXd=% zf^A&XTHynnLWB1?oxu!4Sn)aD6G{>u^^l6Th#e*j#Hs%CM4rVfjA}Yv9I(>SG~-l3 z#v!Ep&O(6TIx24*n2$qsm)iAnP^u2_RNnU-V%d3Ip-uz5>w_ak3%*1*ae>a4&o26P(l z2@>5d3|XpOr|rZerHE=^2s>8ythVYvyZcP#Ro&yfJyqY+UE%{Bh#Rl2DK?b+41=JM zdG*H{!d!Wr;(VtVw2vgNk8uLk0Y``P841UK#x>)ktHxETwif`uwaKcSC>s69A_UN9 zWTugFcD>V!m1f}K$rea|UygA|{BUC1l{y`ny1d<-xu6>~-}{6eCjS7O+lOmUnGm}? zW4D!i^C*PV6jqtq?3+D?Qfsc0#ufllQcaATyPoZ?d0`PQ?F$;`?H2<};z_&?I& zi_6@xW?ChAIn4y@@8%>?yk~4H z6F0G8uZ~fS59^G4v~l^2?RK#`a&Ko_95oP!jKawWJhLHS+&Z$uQ{2#$?m-@V{w z2ytO*6D;c{Fyj78o9++iQxVYd_XKu<3irMn-*KfD+i^!&N~D9y1*m~RJbKzhYvZRcACF%9kop+RSeTc5f_2i z?g3D}~l3|YuQ#3W_m}Z8J zG? za0_=np915zqEIf|fr$=U;^d{hCA2V)B3p!>FsZx?&KSoLz0K!4+txtF(M*f8Z(L$T z+k?d1w+5!>APBQhfr_s_D>Npq&a$hi{4+)kXq;eK-Uj)@ znk(Ln5HJ&L?-fk$cEsP;29g$z^2mdm*X9gl{{Z@~c9=-Jm&~mY zuRCy|rETvJvzwr__+zI)fzKZtYPa zASgy)@@#tL$e>G2N1Rb99r9sNQ?aELnp01JvjC{A|%X2Qd>S>Q{(WXL1c?=~2# z_+tk2q~0=$+wNJTpw<#BX2ZM=1Dkb(4LH~41xp1!;ZW6R+*JV9tm7%^wQ&Q!`42Hl zrns399xWY?XaT5l&9`E3G7Kn^Ogz*z!KH2Mj8vuAlO%5I@w@~PF{UM@a*6v#x>$$7vMDX4$Efdt;qQv+h8gk9v9 zb~*Dl4pD64Vmi`rYax1z13)9myTw7(7Yhh$(VKy@tp5NW$(D%9YG74boXy-3I#@5y zxNS~LPP3qbb*Ol1KLsfF?km?4ih<=9b-c5ahn}O zj5w*nPkD|2lzI9!jFqJcrH#-+p|y=`5(&-qz`zhlJh|9VtLShZ%0%|#D%kb&7hYQA z$69wFzI?(BfNUP%5Du&sXe#z(Bmp&fGN1zS_&BK(gQ+sn9c@g~4-F}c3?%QCnaByf zpkd&*`+J=fPG@d%L<`Z@QdpfH;ySnl_%UOnise^B$=)d_vcXs=Yd4OiN z=OXR8?U;D(v3eH*{Y+b+R*qeA+z<+)sdbtF?2lqzu!D?Uns2!5upd{=nN}}J+lVNw zdcGMRIB|dzUAySbF}l-&DRydOM7QS&d(L>`{TxHoB(4N4au5Nm5l3TxxC1E@?i#yV z?*bWAb$rMmcdz3pJg$M3n0QBfacXyAb$|>4^N8^jPbrF}BH}~>EIr{)aj~9dNdk7` z(zVTd)(Lw{F^nif5ex?xycMdm`7kS_2Od>bA1*P`z$M=CPeTQBTwF$O7^Mn|%!P?m z*ZN|$Vsgsm;&sK#2Zx*=Mrrx?EPx-*%$ENEIh3MFfQTsFU}Ylg;3YhbIRo9m3$Jh7 z-p0(B2Uc1xYoH=WgMh$CTfjS;7nWxt%ceub$;>1F0CqEy;RAkaH@e?h(Qh&1yV+37 z&Ycc1Gk6{!+_F`491b87hMr8Jt3utg?i$LbycslY;rr``A}hV~?Z(xWx8a-SHXD|h zlE*fIIvz5T!O?xoQD1AE(<_pY<0Ua13 zsCNEvz$cDeMKJH5F?ki|oGVKm8vSQ6bwYgn#4%DtA$`cxX7=QZ9ev(xtp{PEnAEBf z-k-R!Hh9yVk|Md^8A$uO_wx-Kkd*n_XCf6j?YNOg8fS(f{!FO43nT6!ZPRDWIZ58S z!fm4KISW@>hCevFGlHi>fQ4gv-Oa)qkqkycrk&;3D!ax4G2RPlxie67eKK%~#POP^ z8=7}qY`_Uq)3C&LHA$>_1?l|a3UW?&tlfYRq|P!Mx;b$j>86^?hQnA7^M(LLvSG%a zoppwTavM5wN7DBUlFwY+rEo8s9`Mq& z+sEcz(^Hb;4_AQeBedzN=D>1A>)6O;FV_^jkA_uVK>q;z8OaEX^}lchUGeb1IT33l z9WCqkoVe@^b1}QpYunZ{Q);u7$!p&a80pmg@9s@S3XR)N&hT^TxU*XB1(3XtOl?r?p{N_8?D zpgv^;P8u-O1484uYhT53>n4g!)XzNfVQ7(d@x}$ofQ%^%FikcQ^uauk9%lxy!~Xyr z7$V_6gDq3}bAb`ro0zY%a>T~%Y>(U`*3{v^sSdzz`NB=u1E7v6RD3_f%nIUat{E8b zMGUb)H`U_+1tEt0&`+48gq`tEG2}{GG58TU;5ssJ0lGaf%A_>68i-#LEC78r4gi|^ zxC3GV-V;<`j5@uV#`bkKXChg~AZ$+XqJgB!Q~Un_%xQPW8MM-4c~-00g3IP-70YML zZxGis@vO6pT$Yq(_P{%Gpi%y*g*X$FtT{(bm_~?3-*VQ6NO}CmD+QyRi~w)IVN^D@ zb(at(iL^Y+G@uXeFjV~>a!^Om>g6Ydi`~Q)a*Ga5Rlgh5$jaSNOmMCe6rH+fZUOZR?s* z1<2Ca8}P*^&>UO~Ypc#$ta8dM3Cs1urR8caXPSDr12fKdvlZWrHF% z)F5?*LJqJQ;;ri)PDx3F6gCwuj2fgE6V|=!B*k5cyD?&fc;R8ctAJF86z{nsXh zfWi^NNd1YtX=-id{V_!W&*E{3F)I! zi8ov87;2jjuXB7NEj)ZPUUtRqGf3Lt633!v5OEJ2qMuDa-e?OKS0<2zWWY`Y%C8RC&bSXo@X$(h-*J1U)ckQo9sTPOMj$85 zSp50cP-(bv*6_O&hxWk&7sbSiq<;g3?3-8}=7?_e1{qP5MzKegPmV;7{09&H6uG;O zaH4paEn0YBy_TEt3uU*{?Q0r}o+IIBN!29&3*_+_wBtJ-I)2yR>yg3a%< zBP{PUI!*h5o7ShyH6+*j#YnhurFm0NnZQYi4R7u$6|HMHI?&(ilnJ!c^D4NftEryr zteA|xYI}8(1x4F)>Ri}*^n7qLLr43-O0gbS+_W$_E59>ZIkEK8{;wEV(6rP0l&FKG z*W8a{m59LP*P+8bxr?UakPY|O=4umvf7VVlm0sL<R{&4^{G(NuO zv~eNt+@@4r&MAPovg^>zi?d0B0ly#H2@(tjvJTM!*Em~1czyFKuE8g)DcnsGU)*4h z$ZJjwsnqhTimD&~0Gh*e0dzWJ+m~$GS)j=+Eg?C;92F{HfskAfHWxX`P!J5g0+)4z;S>_?pKno8J)@qvdzT-NIdyF>oE*i@L+s_jXDp9>kmU{Q4aU*y-s6pD2hVZ^5&4WcaHZaiM-9-^RlrLP@6YEosGlxU9_@cP!9=lC zcQH4>EzU6gAMYmp>G$qUoF_R%GLm(h5wnA);FPh_%+l}coB&XT)-tvZPji7ycXZ=z zfT@@Ah_a|zG1Ckm{W@{33=-VZxA|ad;HaB0(i;b-`O0Wo2^R?(?`MhgBb7<;d%rOR zhqYu1pmMe@O!lBX_Z9^Dd2j@RDBd-Km^`7|iz%liaROGE_Zmgg!^FcWql6$XPJBIk5BlI5>uu*0-Ms752wl&(EF1nV}Lqr(biZS8K_} zEGH%240aPYu5b?`9$%QW2d@c%EQvN8E+bk%8gCFnr6n*FQ3@BIxB#|>hn!H<1>Bf2 zeGJIPU#_NZFbB-$({4JDaUj@_=`!e!@F>M$#S)en8anX7yr9Y1KHN394E{5PKii7C zOT#n@2SLstExtTuT{pZmAfHDCUnat5B^_~*ElO^%0T>>u&R9^J6P!o!D>U3Hy@dHO zRmib9&EnEf)VXzNedNVOX5W|yR53B30m-}s@pj^kn`G{0>rJ&wGnBNO`}v6If&&~_ z3!|By!M+__0Fa5JHj7%ts1EtSUQDBL^XY&MUEsSDjk3&#Lyi+7Es$tj7Q>B=YbsI! zMCJK~x-0pYDK$c;zsSG!V1;Z{}RKnYJkUeGF7v@|; zu}T*nz<{M>iB#geKXDQ$I9^`x8DUmCH-vp1zYXu^R1BpIjR~RiS){l{`Pjh(cBWsp zJ)D??3;R&>DvE4Jc_<@c4(C~Fs{|X_);nwsxXK;5*)WDl#ntr2cPO&&8GBU|vnxTh z-{xM!b9?!kyAdGPBYfBhf0 zDaIa`xjZJH&CVv+*7?>XrcRDoai(>M&}%`P`EfX_uxPUc0tat!zoo-#jUXFk=N?{^ zPi{`m#__`D&cpARIz(M0v5|SfaXmIHVxPHji zxo^3=S~c?WU?a+~&T;n%X=roK6gDS6nAE(t`!PoZV5W&U!GuBUlW2}DqQ3QWZC)Hj zQhNg`mQBL|ZLr0IOVbnqdGGEUb+7bwkliE0kgt&i!BkV8ra~Gyeq?mVbN(IU*dDa^~h=z2){4}5*o^?lB zJ!0o~1L-j{SP?dJP^J`L!V~k{-L)`trxc!DE{srs>5c*Pc)0PoYiLiI8%f*m?gyKO zcFPP0QE^81X$(732A_X%fK)&!$>!jI{f0t`d@_Xt^X^4}DYIB=8p=Ui4~!yzVcu>^ z;qwg(Ul!+QY)r14`HH|N8M>_tOq##J(}{Kjcax!5bVS)NuX#nL#x;jH^F~7h98)A? zqq~KA2a~_tf?5=@aczaZqV%hWG!^fR zL_<{fQ2UEfZl)wC5|}{tg1x3KyLtXtMn$h$#Ck)GrfJTB&A`j!T}(Ks^`^YZrkh=4 zSF#I~p?uN&9E!!7;j;pG=uYs8sYp&3qTBxf4$ROb4UhMfiLy_aiU8Da1w;nbnp_G; z7RyW{QERZ#mq5ue+ukvTFkWeh0Hb(UhH^Lnt=-H^r>+LXPnWE1=SMgzR!mXb6g8>Q zfm^Sk-fTzv_4~5lGEnm;hckZ@EKJ zIX<{NiVZ}_NjJCLjc#PFenxyeEiLXLE8){;MRv8!((3)+=>Vke;7?@ad^%c1aBkpM4XJf zS7TYbEXbwd!w*ZdCg;4c;eN2pI~{amo@VXdSf6+1UNlydUy#VP!{o>IsiCrA>yzom zN3f57^AH;~{{ZU_4JlA+;mX#z$O;Dct!C=dNN)fz)RgQ@B?-KjlK|_SG2%>128I)P z5+lLq6+4ELtBB>IpDskdj1eZr*Es~)+3tAYb2FhOdBP%pH~{Uf`eWfT&EqSC5jb2E zX3}Z zsLpF1%u0g74r)=I*+A0JUNF45Y#TpZWzx#1bBYSdu5bW_7gr6TwCv3@LFaAZsA;aR z+yh|yimf#RD`Sn~CWf+ieYpjJu8+*2h_`nzY@3Api46sob$~)G8GXwEXi|Cmirc2K zwxA}mWm<22?*UMNPk6xP&D`(qR-qvW9%MYIZC`Li?JK?i08F@m61C06Q~H0L2%_xw zlCZ1klagtzA)BF3KDdpF$j&mg0FhiKiYXpo%8RfM6Re6To(HBI6uUT8tHKhl58+2q zlvSwPfa@-a9eu%N0Salv3a9)b?r?nw4zc8vZREh>d_%7cP@t>ski?TnYX_uEIM{9~ z+yshlM8vJqhA*KFVMQe=ddG@Y%1vr_uoX`43x$Suz98sJU2m(_C)1`tf!MI{KCmcBc=vuUF(di07yiOlvA${S;a__ z83#oWdDd=TK|>In6x#RPvI{}Ej@iviI2;;KpPu6lM0@69DXt4%90t+697u`>He6Lx zS~7Cdyy7|*9UGWT`{96*4!$^nMBnZW`(OyAH;cN|){Hp5rRgUaho!av)v7w)NsxWf@?oX47WQ9E6iDyzJxoocu=|W7xN> z4Tz5+)y{6!{*E+-J0a8FE_(w8G?@TpCN8itBfM@6Ni%p^UJkHW7KO(S60h;zCr}rU zZp=uooQzQwMHhHAedf*|F$<9zz1|FnT^KWeVZWco4}6}#F(@-do#2g9Uxm$3qVqb) z$~_luh ztiT9b70rkfn~ftVo5&Uu>vfK>NliFJDYK99ny@cJ5wpqW_lODEvykD~VXNc%m>P6J z1MY7zH~h?wKyv-WETLb9R>80~@Oou{B6e^^>jSq<2a_&FOrymO<>OluYUK--wK(xu z)^n^UhMA?_WyM7bHZ@ofM@jL{UThE79^S#zh5R;{0Z8No1S8>w=6?LZXruQuIdhFK z+;SSh1zc6?ZBOlidmw6LWaA9Wjy1D1_86Tup9_GzM7$VCvRlUo zta`%c1AEkPAsB2rnH`oNfM%s^Cfe@?n~>!&uMAj@G=OfIp;m8VV|5#JxXLEat;sdY zPuzoF{w6lkf4tc|c|K$#**e}N5vL*D$^=6xXs0GZ5xw6s={R-!g4vol`-x%&w(!gf zvyJV=4XVMc02M`#;^WHYW(x+G5<>KQObf2z<2O)Y1b4=ib7|CnTzHV3Ge-#L^X5>T z?xs?E3@;f#(m`HLU{Y3_yY~n|G(LQ;TuYposmU%WOT@aj++eU{9=*6=azEePFu6@{ zpK;OokoYJK}m6*|X~3KZvtZ;qo8!Xscu=0JSTEq8}q{&cnkE1|3$#oC`Xsz#P(k;g#e=}!FvEhgZc_7|yfQ{v zjAtftmmn6*tjIX_VFSaiqmH09``#oQYq8F@{Kek-rqAJva7&><{9=ivX}C^tS_l%Y z;ttFtpW`S{mX&(Bp)!J~g(coWAW4yYEd{6|$&70|f5|oKG!M`ofav2K>ncIicOausmz=#egULvyC|o_~gqqn>K0S z#4GULZ*HbPtCj9S&@0QF7gp)@#CR?-c5kmRKeKtl6PteGwNQJ>D^fpjEnxVbWL#iz zOI$?42OS?AxP<5Pcq3rumj3`#tQNo#(&4={pP(~U!s{E@=gxe}s3z_jqXUKSBpO^v zEZMt(#|7Hya#B-H^GN{N8_f_D;_~9QG!*;%WR9n5<0+xu(=^>C&0y*R^>wUEr2KpS zGDeL={{ZG#pcF0XL=_Q>h*!=q$$CDF#-5o;f!02y%6(*HOIY}rOb{ujj0k0J1|CsZni%kxXpHh zZKiRW7x6JW6#mB&h!JGn$Ksh~(9>o>D19$|Wkt`~i!Lp0`Od;7W828Fle#H-eRP{11zW1|qu$d0ULH8BiMWaLcg*BWDqPc%Dl+*tJ;c`Qa(DLKl2otb7 za4A7Zx>q+zPTkbQiLjBNG8BM(>Bj{nhNiNhAc8IiBgekrp>kL;5~Mkph6Q5&Sb?fk z!60|r&Jr-;!+P?|k%u!UGrn9;yty6@O)BZcZ+kn*z1K!so$39+(Lml(FE2@mn-Wi< zfZ3XVKPEe6^!mWp9bmR~-cZ!qPAAL~2V_C#4`C^%Syq5SnlOMmta*T~WmWi{ZvjA| z7ZfMN+p{3<8b3^0F&GrOrPC9H<0wsN@=QPpQ-_%N2aSBffO412ZmOFDgv2DBX&-SF zLRpX)5f9(Y)3F_x-op?U;K1{zA74e0AFu59yyNUm#(gg_lZ+g~w?*AB*J zil;Z=?-DJ?y_w+azn$XHck7G;1A9Kq&?+bRz&3~cG6>4+`{8PSeP&0Cb$%GZBtP~0csdt(Pu3unV}SY4*{2zz&GwC^8i++2%Q=#t~SOxEZ$TL?Y>;RFY@4W zu*_S#queWI#@6-wiGj-3{9_shPe?nA_z2}=ZgtDS<>ww$)o2=v<@QIKh-w)>$(w)CC z0pmn^$3Sb5aYOms5Fnf1SOVCmDcIlv2Bpf2x_JG{F1D1zN`~t;`e6zLyWcqoe@a|v zgHGOKfHXhTGz0W-dm!uk{KGv-`Ce=PRnBAxbfnIs*k-7N4jq@m=9%thdbA&z%YL$3bf(udRh zxvi;FOfzgWG}T#;%oTuY+gDjGHDUh%HOf?LgvBFW^X762J8c6s04G(*AwFTbbYTPv zFpeRaJXd&{BaDQ|0`r=1#y-8`j}9d^W5+7(!n0CU`-|Bp^9)Ffxw^bi?cO++)klw*E5W=6ZUh8g9-p|R9zh$&(Kssb zV1^m1NEak%T4GqH%jCvv7xm}dj>n(x?nNCc6U-?zJ0Xct*+T@ASDTF7s@dn5I}qT& zM%TOx2v)NqqTuU^fw1j!L*qs?LTn_;f&S)ghYkEY!9ZisnEJ&+Jj0q-O`c?~4K#7! z9eEi`%cRDQBzbXEtm<-HQw@*g{l`!PvM(OtDFL|oi6C&IhO<)0&;y5eEo6?cf|XyS zz|nQU7?nL7WEwUg;mtS=m;tcNFNaDF6<4?S%HMhy%Y}sSd>DbHd2o3=+jF1T24MwS)(vdgMTWDC64Uh=Qj);^>1z&pMc-$p+VV^C~4?IA|$y zconL5efnT(AR76C6K4m_;$Nm!e2>%SGXw-}GF;%C?|H)O0~|%xCSWN*`s)C68_D14 zhYu?K-|ivpBbmNAFe(A;-WnbmIOoF=3ekm4E^lSt@Hcd-8UewTB`QGR%OpP?%qpd8 zzj|^(4H-a%oOT&gaMEDs1>$_bI-0$$?sJ(~{0@wb6_1 zv4b3v-K;RGLvQIZnf9;D;V%)-KXKHz!Q+mg*Pr~z284gNju6tEFt9YdeCrj_7spvg zx3V}ETbuo31AG(L+=4A#CIplRMwIsePidZRbt2+UFi7V7 z#^hRGMh2%{x=g%&3b5$cVq#Q7qto1TfEUX7goxLN>BwLf-#>}&KQ7?=c)<>WABl^y zCH!~u0*o3?KQ0MJ8v|3!Lr*TY&s<_fbx)pSha{T!1Ox(g!TFR3&qjVG$L2`zPwjC| zjq3$@HQq`z&koswUEC zIRVy6wxUN9(;rF%D+B9}(~zmwLjX<#{aCi5?OkiEuq!7-!de8)1u-NI_8P+AjF2#9 z>j>MCM|;D<^vTJKwglIOnRG;s(4CH58Xbh1$HdfElg!wJN;LlSnk~_*Kjv73N^<@m zxRp(EBhIjPEhRRlD;*7g*AS%-I>)lKa-ZSFhQ(ZP0W|zL$lJ_YE5}*SO8~%e>Q6Bg zBVyAzl@|a8pI*6W>v=f@uj>B*%+@0KhA&aD4_r+#c{O>+Kv%O_8`+zoNS1Rk;_N9l zzg!{dYJOk@rfXI|;K;jagvHyxm>c9T>yX$(4~Up`aERTs4eygJoOVrXEFoUgPC9i* zQd(xFr~I%63*E~#Z5z|uf|}Hl>ab8%;TU6rC@^;7#LcyxIS2Nn(q@REpc|uw5jF&C z_YOA<2Epls;%oMp(-eDhW{f0c=U7P954RL7pn}bq0|0D%aNeqY*6_vtAFlDzQd8@Q z90W{NTb&b}CQ-VXGZ4Y3m+mNJ+x+2RZO+x03=D(E4{-!{`-}@%EvV+nhT>wa&7Cx5 zwUDqb1YkjRj42a;&A@F8n6D=)X4 z3Q4fiVY{ey>t=6U8+DVZL!o;-GQ`1})<;b_2rY;?G6)bE7-{LJSQ8DV6gxRS}{{S%ztyv6Km~VeFX2_`F>yQwX z-^-qjctMtG`a3e!bn=+imJsJyVtCQhFo3rDYZF^bLy8B%vBdKcSyYbG7*tY->X-!B zYW8zXKml?*-*AGk+PV1QGs9l6AU9#^_kxHUX^dIQq{FIe?Zedmgw8h;isvx=m~ zyZ$lRk-Mbp6~L9bLjs7xEKxlrG3W8&L*81u|v}UwIJv ze=?0}?epLjtz+~_})4M z*4UZ?ypAEMerux~O_2%4Oed4sm9l+vh!)%9nfE(jboRLv0`+l2e=;{>Htq%0zuoaq*SR`~h z^CCiho0q&Bg8_x5jZ-$Gv`^0Rf}1Vy{{XoIXdbE|aDEX^h_F{X8dZJ|$#7}BdNQ8B_ERU4ggmAL0d?>_v& zOjhneU-61ks6*U&L!*jPumrc$$$$=T58oUrgm4-*)l#-I*mc{5EasOlIHqk44j1{@1}WaR>@N1tv?q*NdEk~y%Ru2>Af z5`J(;jPF|i00uK-VE(y94YnPL^vV=E z1be)=wXF@0>KK>Em<>mRC{gWP3ks!D8AE_*C|>vT7*vcHYW&AkDIwX%2#L&hKkhU_ zsP)TuM}hs8CrlS%jP7x~;}*91=LT(>1OSPMtRnOGAx%Ao=0H&*&JzQ3g#o*BQI5I( z_!L)C4;fOMT?xi%O8q#P?X)+51|-$-a%in;4%vXrnk)YRG8Av)l%SjmW>k3SSAOH8 zc4_j*g+82 z9%hwLA;DLdEmW|># zWDR=wFc`G+UCcu3Cy~VL8(s5|8$#gj9T+DtZ+D{-1LD507Ok9bS+;>q2gkfMAQt_Y z5H_5qxWL^103KZ0BWGOC%r09Z=E+XC<1`yicZM0hz0Hn8inOUOLVj{g9TZrNsstX9xYMSw2s3;>?oN{BdK6T$xg zGP>ut?ke8iSY`U>CjpW{PrMixfv&Fhd4{N+K7Qj0DgI~NLaL&a#j@aI03u9>Vc&^GlIYe<{`E=-+yy%5T6H(BT8u(1S(0l=Xj}5 z;jV5NL7Qv5+AN1I{{S%Ci*>-tiP%D8s6{!Q{KJ}|DaKMHN~0Mb-%hHI9FS1%%om%Y&kJYvv?uFG!dT%{L7U@xV@p1|M1{IX0=RAM7wq z0mI&7dB3zpGU7(}^Bf#cAEqxcA@c%AglVDw05JqW4qiVoBn^L(9%RU&l<&{!g6~ix z%l`l|lt2OcVHUyR^z#e>74Day!DG$eSj5Cf;l^GDz;3aDoSV+^WC3d69gA1Y5e4CL zk=pK@7>E~F3+U$>a*IpG-`fpJB+UhOG~?5yw0*?1B3Xuj5`P$t{{SievKR$Ae9gn4 z$y`u6{{XnH?Y#-pn>EVV)IR3Q_M6o)^-!cvuX(EZS-ea{9dM)b5l&En>l;rJCyWF; z8m<8}uD&s1$oZ>+LPpOYPnjRQTXglCxIkNs$#K_l?QoY1PCLMuuyOYlL_}*%zzXc8 z`SSoT$!dGv9Doy%@0c3^X;BPr8KPm8L$=5F7;+wc{KL@^PaF+2Cl$~0igbfrn708= z&kG4aqx^qygNGXq94Rj8e8`IAA)Q4gzPJJnw)*1;9OvgYZr~4QZ(*wpiA3{*qLG$w7NLWW=QR5EbBQehe`YaO zq2sBViMJ?mh%{oY_ZUP3-8cK25Jjgj#!2k|0P`mekO2b~3U>x86tYMF9%R8MG3c74i61cy5aK+Li`}5`{B{nBFHuN4B4VFcX!420B+`7$@pSj8dT25w2kXi`eWJF4!hoR zD!jDY;CN+i$k59Ao~z?!G`^vHlK`b^;h>qh?o zoN;w#m;1+pnobU;ae<>|Xv|~1WT+eO0S@_}xDas7^KsNBcb&bdtZyUEHM}{pR36t4 z;t~ZPm<$B;Dg5TN=UE*c8gkqPUuN)}S@_L8AOo`J}p8PPOEd*{OZqY_XvqGk{ zVZj4^=LSfr0(J4g2l*e&*noM4Rqn9DK;rz{jAYThX)q8<9Nxa>`v4aKqscgO=_>0Y zu?kMtC&774IR)Ty1y1NW11M*GIVmb&XmAig!ZhD;gW0jeo-D&x2|Du)t-$X#2uFAB zS_ror%J$@9X+2{da7`u>=?;Hf2t&KPwr>!<%m-UDk4&P`0&8^6@om6#4QSD`syu}2qL>^2wTZ1{S z9#kC$1{#_JbM8+~{pCnTjBt=N-mtqm!Z4-bcaB69oG$xwnKQNCNQaQXruiW;&^fq6 z6Z*J?4OVNcBb0gG3|tQKsf*fPU1NAupn5$y0UNWX5oHPb@WxGne$UUi*w(;KOUw5R zsOl$vuPs^o0mnwas(yi&5TEY;Bv;KSKa>roLDF#{xL@ItC336cjivS0%4MhZ2s_M z@_D$UR1jXTZXlEh5QZ?(<51z_7+^s!2wY->bn5>AyaZkj9Wx+Hob=#94)F~=agJ%E z;B;XHn!EaBi*2iv(22WH$vhUjE+O6x8>(<(nx#GK9`W4RN=@c~=#86H)y4~uHLLny z9)eJud~<~2X)Qi}U@8J_@W8myr&?zjwGIsqoOftU2Eu!TY)@Fg{I42uv0UWjdT!n(K49#k_U}Py99#_neHA-Qr zfyAUeHG+6=d*jT43L}%dp26o%@y9?mj6i8C- zLlR<20RI4nECH;gG;0H9fxh|sgOriLp#xFDg%yo=cINgS4e{n^q)DQEFjO@Z>gTTu zSfP3V>9ZOYVWK>KnbtkJvP4zZUhzVnHP!>W7kwXdQAx|a;DK0x+~Wf8tuOb^ukyN> zQ2|LKi!J4eS_RoRmYiKaZz7|qZ*LW6%ibieoZv9|HZ~Iul z)#r|GC`OMi@y18^v2);QPngN@M(BBs92Ms|S7WS6y(T~fjwJ3_m`#u!Tp~e|xw%&t zfAcrD&5ytHI6tj+czrU8^lr)j0C9yQG@8DSMgXf^PVvRGQarAVc^q%q=;hE1%e;4h z=~_>r&J$xx;f3QGQ(MDUd>8b^H)J9m0fV*xlwCvp;zLtpJ@v$hM$j=m&9Fo*+4-9v zeC$Sbm(jzfxUm#;PWOXC4?OSkWq_J)=$-Axz}gZ+2Xj96GkSF3?-l@%>E3E;5N8() zY(}z=@r}U%QPcPAP(e zcUR^H9V1D<%a)v)BH_-iBZy!GSrwgQnhDGCHG#b1RP4rL!@rmp#0wov5EEe9IiiT} z>zp?7_4$fx3wz0gs_*V;F?UXf^C)p)I9Y&mXpq#)=DME1_c>sQb4X3jyO}610VN-2;r-r#!+r zbv%-krZEU_FCMUUpM%O{Eg&tlFFM0)X+Qc*4CAY(^Cvx1M-MXV1dTA=#{37*+-3H;5%Rux35y15l7?{O=iKW1pBzI7*HmhE5hd1m5#q62amB0O5w6 zAxE&sO&(qhbO=KTR6@tBZi~RzI0zyr9earlZ^x`TNZnp{`HV#@{WvCg1zxgONZ7n% z%v7ASS#$`{`fzW$7}NI@RTu#`yl3e7l#lQ_!>GSzY?_T%HR#sZ=rTc9Ny_z)8VU;W z=`hkXln-mL#UPtc6#oD?+C8)wd<y{*Kld52?0&?X*IX7}}iy~?`t)P$Zl|a$i!kA&8Fl&H#Fp?y1 ztM?vM)w6%+A#hh@{-zF`Nw?Mjw}ZE1f~L67LmUh(uZPT_(Xo`SwU^x$ztaV$;cO2a zp%0HA93K(}j`DCz#rHq_uzf#svKKY4VAk?5s^=J4P9xT8$l5O^KfvM*?^r+@suQOv zYKx_ob8}i1x|&C$DzbzDk$Q1TGU{8tn1=$p95_7{NI5fT0Mdt80w4`v^x|g`pmLLR zoxH$y0ni#==;08JR9mZ+rr6id+`CERr{=QIY}ZnAaSlat;@}=a;VJ~!`Z%(tgr`f8 zjScAk02okKMh)X;+w&({Ufsl8Z7H+XXiI&6)<<@u^ub#_z-4&=ppUp165T1egrd3* za8R-+l|JKXN;w^5)*_pSGY5vNYrw->-G^DV0Bq@o8rqA!Pmh>s90|kt)XFjdasJ%l zD8PDpV1id-Rdd(|{{Z-4gH2QtrN;!Io*{q~K{n;Wz!3bCw*skC(|YX9;494vQz3g- zLA>1|vUi-6j+33{kpVm>D~cAwt=n=BpYAdm{RQU?)j*5&z)Es4&@J>%4~|fcCIUqT zn!yF-c{np`dk$|7ML_{{^5hUwbllaeVftm9SJwb9*I0vL@h}Vm##bbqm!RV|NT-Hg zyO@U3Vk_=V3pb$tGRUU0V`J7y%aMg<5beUm0&Rg|Y8&~SslLCAb-ELL?LJ^F39Y#3 zF1s7R2VV{I5o|DNiV-S}IL_8s?>HhR0LDN$zvgWVvu-{#YKD-@i9bLdXPM1^Im1EK zIZRZdfb)Ijf_A;@Gt-baaP$P6XOlRbj9@7o2j0)s0?8BrJ1pD`jt6*BL~b0&5PT(4^n+X5I=HDUOD6 zgbwmqjJ+AA2TdebP8*wi1O>@fh=${=LzPmVaf}AhxoL>x@+r492!|7&wZw+iwB~!7 z6WH&_B8#-+V#CDk%g={(*FP*Wx-AgYjcALYc+1TqSiWIt_Y0_w#k!k z0>n*_ewh6bpz$-JD0FDnaJ+}jxRYiGYx-j9e5}DIZ*b81dDPA&JzYO80SW`5vv{&n zyLY#E0s^DyTw!9ABm0gRa|5i;VPLHsq_)Fj+!7cL9JStAMD6)!zqk;wj({=Ir8+nl+^ z(-JhQ>6{knvDOU1q=SovI;3sl{Kl(8FS9J_PV{9!R>UV6RE@npVD5z>>4+OO_kVGC zCwxD-i=dJ)@7a(Dfmv=8MTMcV9CQw;XH4i;F`ceOb>xPn09yk)6&m>mYc&LmFIuQ(CLzs?~Jya$+GLDxAq z!>5d1xJ_K(H{1cILk1&E#Mg{W4z;TureeXBYDuj#%{G%1}{#tuxjh09y(RI4<`pE8c7Poa)C72tSBTm zNsLxQ{xPzn5OLqKzb z+eBdlw=>^k5*aWaF^)@YEQq_|75wYncn*i&*m%oK0C zM$_Ei3_*7Xw-wPrsf)5&ZoQqD(gwjhe9Dl6eZQYDO%hW70EZw9Hx;eLqf4#_>j;-Y z*KQM%8Y%wfKxlLZt=+)r2^Q!cvqw3>|^47q9!AB`*AbFt}vf-3$R~#_OjkD@Kf`Sz@_mIL%B!!ae5lx^M@#CxqG& zi;5hI?Z>55liQmNhg|;vlPZuFygnGPQM$4?#SXh1m~JTocl>3DMDs2nq>N($->`5@ zrrBSO;)#||Arj7T}$5JE_eD>r}%&ROo$kSzu*)dP=eg1H$99?>N;Dn32!2;CUm`o8Zkb zm~ErZznlXHMk9hpcM5bSJJiCb1ad|56wUtt7z>5P#X_{nzcE&g4d97lJetLc!r)WV ze|!N7uf}K`I>nZOKP~}lr|=wgUGOGKsJk|}uM~85j(?l^o7IF9*A~jR`iBeHU!Z%% zmz3D>8N>*SFwlvs+WUh-8WCUhj>dr$Y5ZeCO>gEJ1tIv;tW-p&1UP;Bj=H0-jsX$4 zqb(xABOEjjZL6Tgm9cQc*EnoO-sJ;NM(5k6F`M|Ix)hH z>~EhlkTMyz;0OlveaXrs^u^+b%d-eHGREWPO-gCk^$gyFgWX`E5y<}k0GPI3DiTxY z+_Yi&a)qBJ{_~JR7hc(Y3BSj;6`>eUS58q>O+BBu)}v3?YwqG&T*p#00_<>XUtcqofy{{V&xA%Z06<>@KW z=PtBWS)=nM}q4W$APlreVST$jINaEPF$<9hm`r7q138Df(oMiykXu^h}N+U zvTW@6h=3RNe=Fa}HB{?lqPEJ-X9ho52V1%A73%dqXHs4$(f$--F4wx}g9Ay9p-*UIFhZ_L%rX9BH$4+$vjcLSIX(qSMG97%wn^pVH zRDwCimW}}DnVdHMxk;wY7z4H`66H;A5=k65F~|V8?CF>vPrqjZAaK1b6X zIVwEG=um03$S5UJ*ZyEYUSXko!40YoHBt^h2nXMC*TBTS5&VN9ED~!iblZts^Je_G zVj+$X{{Xj-p$S0bF^=BZ(Hgjd^ne9nfJm=Z-)=w<4J&^z?_DeYVh+WB{1_x5QKDNh z)~W~S;!&=`h&f3mKe3V!0%_5Jr9cL##P9-X(%9mwr8mfPQ~@u$_cT4LBkFP(0v{s5 z#iG}9cpVylpD-Y(+;O6ERW9Ffwu5Nr<_%ya!=i2T$Y<_%jD|gk#m$ubT@P+|&@_li_ z4Z!~Zc<42{S8wr&pwnlD;!`8X$&$mJI>8j}7Bl+cv(~>83Tgl}!4)E}<~EyfUgm8V z171u=tsXdW0H-#&$dyv}Jj7(()nWW+Y!l_bahWMb-V6d)W#&JaOiI~+rz+idgj1r< zOcV_c8=F`7%?MD;NwQ8>55H_FFdaf%N|jTj(iK^=I8Nw(3*=JE8~fF?y?rVWATr#1=RJgVhT zcr%p_c`~ipgm7lXxg!_J)=<(}A2ppD-YV*va*zS>^C=Qz%bE+QBa{it#5^7HU_*B* zn+>K#=!st0P-d0adBTAc-IpI`yI(#zQh{%lcK|m#IKyF}e-?FwgxVGN4uDnDonb}< zaoG0}&0HQnV^Vk6VvA2A@A~5~H<2v&5&=_&kLS!4l?{thU_)9|f6Iqn(rEYAu!uc7 z$~Xa-LYt;JeF-p&Q)7~sf%gPhAaXj_nML6dQ+qP#WeEBEi9n!yGX!qBhO}->ORU=m zGu%>w#>@TkB9ylHlIhR-b8uBjE)xn@xv89-1O&9Aso;>IylDKN zhDWtV$76`AwMU=UB{yPe(%{9?vWnvb76rHzU;X|tCzPl;PMicbgdAlhf?|6xe70<^ zFIXkgZ(rvSfC4Juq#eMX;!y0l>jcpuc=?H<4^B+rZ?f`Zro{@n4DNy1%hUHAB5w!x zCKk(fH-$8bc5t0!2#spIuUR1Cku(^W%cNdr(-J>Hd;N2QHVq#AbAmwW-ffKHCXAp) z`Z{rC-zo;boI)1gE7)KgP92whoC`P}_%Y;E4d!703CG;M6#erx%B9`}N%VBS;L##H+GQoE zoS7ZQ-dPF|K^ONA!aKl97&^G)6l3 z+_?)CHg$7_#O>*ZP-W0}_cc}sBZ7!YSq=|zzjjIUw;+KINyNw&?r#z3krAA09?}CP z_wx(&Qo~r}^epB3iAFPlalS0@lL|{xN_7*|oV~NKSgV{W;DmP^tR)gz620c=H5KrCq%^{^`S1d6iK#jtECh zKI0OXb-j3DP9(O%m~0kJQ>@;HdLto-Q4@jp;eiyi*tX+D6;vIcFenAkxdlWa`<7@y z+e3euxR2KQbCD(6YlCz~h`*RO6GZKO#>yOlq5Q%_`uA~!hi~IJRY|wZP|ciSEkB3L ziU(xYEwL{w?>T`y$U(%4u+xLWwxK-Vim>?lMK({J^9N>Aho&Z3kG=8wl%oiw=3Wc!ngX7#$EATgE`J(AON| zdX#KmILb^Xje@}3Ramyu6spK`V}vIfHx@i|$Jh+6N;EwUJNvh~-AU?*n&vx7;O8&5u}Or`i5L zFzcY2d&v<-+=~&jHXKF2mlt>jze#c66LvIQGMFGfH*NqcTaAsNf# zofFaG%vO9!G30Z{)(jC3dt4cshKBK40M@o&n3V1pf?~j9UT<$#DFD0+o=i07jEJCs zk9@?3N~%_1Z3Qmx0QTTCLGJcs&8p$FjVioMVB=0__1+Fnk1rd-81S@m{61mXK#9xp z;i{qnVraXZCX52?I1qXpatVyk{{UEpdR{sQqZd=d#?uvG@zbx-lmm+wI{IVuCFz0k zm-@;@oa5<$lWG8eR}g{;w{-iQcm}na5MB)iEI2BJtAI&)H_V`2r?VUckg|Or+`0+v z;^v*3%H|!JK93EzF_8X?rRrdaEhQt*%)E=iR}3k8>iO`)C{6BgnGhTkv+c;Kg2&8o zXqiOV^@RzJy&o~VSNSqX+Cp}{7`jE!{U=6HZ8k^v%>!|fs$es$^xb=rgey*2>xoA) zuJq?BD)=Xv;jIiOKIWnoK({tWjR&|S z*iqs*jRggO>#RlAgqBwl3rgnNxPsK?G)}N4lu>n@_!b|%VkIEgnM48G-E`p&&yF0M z4GPz^{{ZGAOV}t{5Nvrv!@q6uwZlf zk(8YWA77b6RtY@+0H!F+_Tu}6-HF-Qd#(Zo;izr2XqV&sxN0`;zi<&j`H>)PtCa+| zPq-+y9DlPkY&Ur;i*#<`Qw_T70TPzHxMNkdZ<)IXQtyKh(5f z-UZq>4t-*RztG8cFwo%i%f^!LC30^aPc!$9uqvC)U6^i$#|hT;nyd`qYXf|17yB5~ z2MgTzGM{F-!Bi-NZ+Q*=P3+!MiUY5@$_dRQeGN5G!tN`kHD z1*gMLubCvH1nAdzU4;Q!&}GOtW18X950bU;_ zS74M+8Dcwe89%;6mW>Fb)8-}>_;TKHjo?d8b3qlSG2d9wL$lQJ#d`w+(K5Rw8czEI?rKE` zPk1=Oq<7?VjX40J{xD?}lfizNEiUkNuQ2yvHC+B-ffh>t0F2@JK>q;qEXb-IY1@Uu zD&IWkGIVo|2(5=mVAZah!Ket4%}r`=+lGjETUxd98e8NjBs zGFlG!z#4DnT@7LQm<8O2%u#KGe;DnY0~ur2IBa}y3BPrdb#?bD*7(*A%^sML9o!+$ zT;dNNU)&AXZ*xwI19`({vLi}g`~hLX3e~ezBacPM} zc{;~xeA}-~87Kp;@Ed5nV^*7Idc$Qw-+1w^I{_Ld1jw8G{K7B6xLH?!6Aj>dP8<=MD{}Yor%=+eJO9F;(Ci^7LSpvvIO8C{*NIC#G=FRYsA{TnvEb z=E4mr;}+$0ejS-C0_@=q@d{CFQ%(vCG7!g6%eEFyK*J86gy10ZjFu&sXsf*W3cc2 zVo>S}beJfuF30=epaa7EOe|!w0n^?rs7n_ig(<5|l=zsjMW&aB3ZeYkc*aQwlEYghBzt)KB+{8;Q5JLg>wyL1$6KA+_%! zarDCa*x^MFCTLaQ_JiO*X3n*mUPjX;<3mlv8<{s^BrPL)-bf?kUW}W)QTdC~0Bj)4L~UpzalK^|S3C14G$!;xk*bjhG>yWc zn@95^fIt)%Sf^&M@7xk7vsd3TAzY#Qz$Id;xCwTCST}qA ziIqDPewlYkMdio1>HPzr+==#X`KBKo9VV~G6NK1#Z0j#Z9OM$-UZ(xRTXMGKIJjtU zQ+e?G#S?*HrW~8+C_Igny2We4=w%`vLU6xlxuE{mN(F+0tN|P@{mP_r%QP5^tibv6 z6z)*OH-`xohWDI8q}|qBwr0Mvcl7r*yAi1F<@A4*+0I71@cH))5!pB9d6Z~E z<<8Z62UFZ-a~&l^Ac7&Wz}HSAy@>|@0E`95h6AtPF*Uxs?XPg7VM+7n+$c00eRF{Z zjt{AVRkPDV^x%bxk*Dy-FiD5g1&W+>^9Bnx{{T$WNY8aLqAUwB01K`h5UexvBZ5>0 zvfz-=CMmr7_Z7%g{+vXyx-Bn;N-{l{Tg8&o;gTtDE=+G|q^{cIBQ#c?Wi*E44PgL_ z$BU75o>{DP-J2D&{J3g>RB9=T8t$9|DuTUng4jYsA{!B$$>voh%$XB3 zqpAhO3S@K!6lz}ZJC<8*ns}8%1W|&h&I~%B-!EA;vFBu8Ot=Jwi`FFYo_+fB4G&A^ z${*SzT-OWv2~|eMB(61=wUiu zK*IQ9#9TyM&D84%Y^_r4FA$PS&a(>CZDWYdX&@K_fk9VCCQZ<=6+w{r5l z;2ONMHZmj}2Oltc`-coe0e0l`2{K9ZF58LD6B9~NxP8FLUlYvO7;s!6V{@C8Ds5f8 z7!cWajiK2Z)XFrK+{PYNa8vZYnWg^#`IxC73wR7hgq-ZWd7F-(Ilu$P@3~9FySunf z`EZ;bWpoKSIG6)zcmtAogKNpT&T4F@`M)uU6l->~4alq_Hr}xml;g~Ti$#qO<~$ne zc;OOskX|#4sP7wLRPlk7y~JqWco;C6jc!w5;*KA<90F+H^utV!MgIUlb8FrheEEfJ ztFk;V`owDz5@WSJoak<0LnP}|DVoA}b6>B|Fv2$*ce&63Q~tOIeF%MT+#s5?$G86D&R03sNSr3?p~w@n zk;7gbLC560jsSrq{#PMN#pvkH7U@yQha}m^*9iJ|b91YPg;JrZjsOE%TZ4XyF=tkdjKxk=Zjp(NwXFnXp+lWyG z;rBJu!QK@hIR0^)i~2?mkzH>A8b_aIavFIGxWIE&Ik?7xtr}*HXdLlaKxhXg=HtJF zQ^zs8r=fSQW*a_ryQ~WfroG-U;_Wwo<2M6$d;^e7@~eW5sYUye zBoLd%;nPJnpK%837ma>mB!Uwd-qJotBx!devk?u;6xR%)Bq;1Fm5r1`l`j*lO#xF! zoC(ZqZ1{d*MBd`)!BmP_z{lJ*I#`EBLjn$``EVqmK{%eKASr?OeVG@qe|6+j64XsJ zI4pxoQ~Nj^QRKYi36ytw{xJ$RSmP##OTKEsMb`E<{g|W!Ym!{lm7me~c&!7b^Ueh{ zrr)@bkBxDKUWs|$7LLT-IdDMMy#|`fP+MkpD*phiVF(7p29BLe$$_vSxAC5dA_op> zb~gYOWLpjt$)tD@&QLowhT*&G3aS=4L(zdZ3}TNrSTjmEg8P8>;C8=m0!R7Dw_D97 z54z17GVgh1E*p7sydiKi3 zDnEk-6fZ_WtwY%`(fot`=Jy_G>ojr`&hed)4Ru`J^$|aFPla|Hz&fI#-%hY)+5uZI zsw(+u;e;I(59hq77l{llD0ELRcu`l42ZrJDIwEZGka_(MF%4B~o!*?_XirB?JHK0Bzyw0BXaW_#{Pz?Hp$V5PS`_ovL8Rt>V^H^D z=rHjh&mnVjQ?f|mwve$f8(&v}fzn2+mJ)c;14)R50PXl=2Z9~??<67-I2Ysd5Gq!0 zXmQ-|LvC(xU~t{H(8l19Y}kh`5TPpp#P1-S0KH(KRTRwyg{tXKE>x=mwszwaLsx=j zDI+&;b-_d7lqo=F_X&U^4ab#M&1(CMem9M32Vi6&ND@p1yfT-UE%$9)9f;DdZgC!g z{{ZocBuLclZ&@KFcXSUwxMqn~DnrLY%*Gm%u7r`1Olu!A-z)sDb?2)F`^r*=0i5)l)?;JziwC)-uS>B zbu{hD2jQI3J*H`6s?BGG9oukNS9k%gb9GwyT-toe!8><>CYSe91cip6UTcEMwgGpu z>5+6j-U3$*n#t=Z$BYk8%+b85Mr{?|Awwho0L(w|WHo}AMF{c_%n^j!w8*!B@|mm% zRyn8t0Jd|jdb!kk&7czEIJT`rb2Uzir*{nqRpfwY+h3 z5FM|~V|6yyVqoE=slohl>454yh6nK$o4w)!!ABd-$BE0Le8Fops_>rX>mWDD#$6k( z+T`6a3FQ9(xvUs;{{X+aD}o=+1Z}>!W>Q2oL+2Wpw*l<$lMzOaI5E|>x;rumBX@>6 z9~<`?L|G>j(%FyLPiz=Z2m z!UKd(^>cBABw_^c9P*ADf;T*7!$z=S>dgYR3@Tj$IDd?Vt7M#3PFn`9v9utZF5YJv z11Zw=F#>E-I!t_Pq^Y&ZC97SeaJOJPyOTE)kbM|+7?Mp1(UB7XL1q0hoQ2=T@WPS6 zVs!Z7f~w?juiU;EI3@mZget@?zA=<1TsWpQXhFA%>-ohAY)SdqjLWgm&Hn%{Ac|`1 zgm8*9N;kvc=89D~JAaJjJ0I)({mWK}>2%_0q^IjQxvCDAG=UMQ^)L`Ac)hqpF5~3E zNkGB2h8im#{(ODSL>1Ssju}^Ofxu;iA`?R&xRIf^)+z$UU)=tXm^xYZlCu72qJHzo!k)?SeHs<8Uz>f<|47E3mm)>-Th;51o&Hpc!yX0 zu?q+)Rn`eg<_9a200jqbNPxEdFz0pI2FxsI)K2k%ffJ^(!Ar<_J;e_)JMLg2ir$>q zA=#^fDZkvHnfLA?p+~lyUKVS20K>`dSpNVBFcTertctDvFoC45@G0TbfPx@!{mBhB z)XpB49#Q9tq`>(T0b@9L!j7i&WaQ%t$@pg0-Dxv(4LSaDY4^P40hl^W;Q9XmhUtZ3 zNSH@i@xy`dSXS`=0KxK{Qv%R#&^N3!2|d9SCDY#qRHGB`IkJ^eBO5sZx^syU0c`vE zj06T;Z*mDWjkMOPoS1;Q4I*GxefzY~sB;_;fSzHh;xQJH?&PJk8_szXTK<@r zZd^b_m?$}IINN9;^m~bDh+V4wWJ1!P0QqoGgGLkzG`-ea0g$N}{J{?U3L5@#$pmt| z!>Nlyaw*pts}zAwmz-A(BzEF30&mt5CV>p+;}lm%BdeFcaZAo=AtDhj-A~dvUu(z}v3OBETAZJ{eY=oeRdyL5QYLpK!2+FD)*OWJQ!- z$IL}5#5)rmP2ND%W{f2v(01XkuJpK=kVcNbA51op5DyP-GW1Z7owz&(aB;js8}ct% z1ceCmfNJiSCTukh_iKW&aZiu9<;0x1$`H3mclnIXtr<5zaiOr2T;OmAUKl2Vj-PM| zQFSis^EN*8MYvs;a)*EODh@{yjv;0hy-X?%?LiTI$Lax7!S@{v(8to?LAiOE00XJM zU)MSahUSmUiB%)Zvo595_;L|fVE+I(88|p=T^A*wS$DMm0PYy&(DnXt1OZ7lwZ=** zC=8oz0SSczLup{&`I5GZfzEK+5c-cfzUYV?LC{8xGN{k>y8i$ecK64#0|ho~9St9j zoZJABygDGfH~eF0p#K0*75KX4q5xNu{sV_m=VAc&Jf zWNPD7Bbh@1P_S1j2IUr_B6uK?DB)Kb`ZO4o0=CHN(D3b4hRq^MRaW^Zx)zqOEb3iwkvo z!2uCZ>6IqIQn;##ppUG|QZh}otVe-<<3tb>BD%9t;$Weq-kvjAZrlnX#}|1Xx4gqB zl_nqp8t{LdMsV@PL%`{O#y}C}_XdC>5ut)}n8~HcTQ+cx0o)t=b5KBdZ69z-0Mh3@ zRi} zX8NuYj^y7)a{Fm|j0$PF<9*5^MA_~Xnzo6l^X>q47TiQKaxw|UAv!j^zK#WQ1$WEl z5bo0(se)aG3v^t7o4a!r-z3U-URV;bxYuu$J9O2NgkkH*bb) ztQUlEp_Q@k2tk_%;(7B5@f@6=*9HKw;u(GD0C43?LEmg46jlJooj@#iuM7iCl#9*; zI^FXbky_V*)%supJQHNZY0+G*YHjlhl66N$036ZVf5s<E5H02$?Kdx&Oof zClLSx00II70RaI40RRI50RR925fC9DF)%@4Q9yxlP?6#B!O{QP00;pB0RcY{!aayX zLN2(%ju4cGSY4D%rO{8#=dy4@>mTkC5<6Vx5Ql70Vi6yn9i!oE6!bN`Q8RG_v84FJ zc)eVD$|M=4Qfl#p#3`{ZvD!KikuaAI$%%!X5-~nD4VPkkCM4RqtTpgPvqno7quwTv zo-P(164vmpG>TDhSXVt8rPeDG7@r71a)coAkuflcHassuo#R|LyshkztCfZLHw0-5 z-YBWkddGOz4IMn_t1A$i7eqer*JIdEdp^Qr-dNEm z6r#tE^A^tz?k+z$q`6#t$M{3!=S!X9^0-vT`X)CAH*hPmEL%uyt1wF|e#@J&(M32y zt`idzJH#gnE(r@8<=(kpxTTmX#TekY`e(5*QMsBIqDu8js%+}}t-8p3d?6}^bk zp*;7+tW7L*erH8!kcICRO0gBOe#oEHB!0$;_Cx8D`h<_BkD@9l*Yuy%PwFWTK_}_< zN601pEcy)y{2ydf*w@=aU&bF~B^rBWM3D3}QOX*)YK9nan6@N(Ok;ncMJT^SexxnC zAVwTA4-*X-n(Tr&5+mra626$)AMAXBcc8W?vk!wq^b)j=0VcJN>=@^r44NCBxHN#>{(W7tiW1teK=3OJ8B2hM&_YCMyczA>V00dN#Y|hMh zn90Oe$-vtQV`5V$vu8*#qaCCy(41qeO&x@ExHimtTf#KjG09^X^kOzX!p?nMmiiq0 z!a8_k&@G{&EF=wEXR{vIx}(+?ZI94O8n((aL|D}V+clvV{V}BqobjM-5S0$>3vr4f zMSZdiYgyY2c(_<-#wj{Fix5arMcCD{%xWHnEqU~@W-3&Jbp>aGe z9|<%yJD{Zd$5^ee<`M?2vqyM@g=zFHL8wZi52E}Mprnz0;nD`97PijpC5L8^ptM5E z*zpKVCk<46q%OwrHf>>bgL=cHJz~kaLRGB#Ai>AHXt_16H=#mE`I1Q#8qc=uc15H_ z(2*oQCY3Fp0^EB(C(QVdNBTBy3>`ur8FnpA2tHx)#)W85*xRw~pxFpaY}oWXA`pyA z5K6_+_Ne)Y)d!Ip8pVkUG}%QKC>v3fYwIAcsFE{HJ&_g|y2Q&^B?hvrX>y?)918-1 z4Pg+_(GcPq<*FG(HW;N7E?Y~p{{Yl25ZQF&{Jzx%`g0Ng+Q!6edx&S)eoHAlV|FoYo%7GSdY=%vvEkvkeTWMmW!wkLz8 z6B8B@PW@5cDL#@Jee|ps6PosfDVk#p6C^W#_6R0z?XlHn>`gHpZ-3DZ`%6Q}#@POi zUfFRrk;nf4=rfbFkmz0}e(|fYzfM?9uEV<6bC=RcLqg%!ZaN^BL?JhySYsC$##|U- zsDjlgsj^Y z8}2cx98Jb-4)!&5G6m0FRub;8e>BXp$Z9o9($~b zh(az8P)m%~HNyQW7-b_3+#O>55g`KiFxyyL1Vl1Jk&B7VXir#zFa5nC8f?7FSlzw6DoiYHmXM7n zY$1B-43jsb@du$e?Vz!L1~HhB?(KR)@vX6aHd|vw^n&4%Nmd~(ni@eAwNcK4iybrX zgz>CVvW*rS5i~K*#YlLYxtuO$Cj@K%0CU`3wY{D+*R4q-_xRaW^u23aokec?P=>cP zvlmEn5hX`8v#8n~OLt+1Rox2Q&}6kW8JakEED&`cuzvAvNU zjjT|-IDdj=J&$h-hpb%8QK}p0ZT^Vw5{P@y(&?KF@WK#6h_OoYh{T7;X=#cRh}(Kd z-~O~c#F3-6KB~xjKG~shdqSVA#8&ByX|G}-BG81-)E{Uz>k#Fuu|-6Yt0>;GrvCs& zAqcu26^CTsKVlvmge*3WyhK78!?z1^v6z}f;d4vC+CzMiOg+RQr+u4DlcU(Wn8}j2 z_$Z1v_FkjA+g*k`8xerHWpd_J>ui9aOD}R7nqdJ*l#3zk^@@ z0FeHo{0qjPW+;)12=r}=CK~uiBtxuynPMpxQLyWe5QAiWpZp`Cu4F1$GG=f>LJF`g zGKeLYq2ZKG9b%MBOxJj)vCzhY7Zjor;WeUWW|s^$#H>h(41QR~>?IA@-Q}?`--RJI zD-2j`gv2<5M_e?RnApGQ{0;QF8ygm(CJ?QO@JLG?i4x}Fmx`pu82V(_jBG+P{30YG zWW*+B5Q0(*qG;<5MmAFL8{C65CRAK3Fq!QC00xY$jpAx?D4zte+gjmDQjZOkZkr$J z&Ei2852t$daQM${qT*Nvz z!jO><@L0Pmc)TG-$wD{0E#6lI%ta;2=dvO}CUkd&3W`J6l8L4~8(};`tsMsI2mb(0 zp++r`m_lRg3$!mn5J;U9VnRouE;M+AAqJ~h8;!Z41g0r`NP}WVHd2(VLyjTkvXpVg zJi!n|(1c2n_<{>5K_g-$@Iq!`yX8xSo59zP=855`K8}PzB0-`YxTAR7Vi39+35mfo z5J*&AiU@=fAh}L3=)M$$5*9C=VXQ1xQs``^@`;H=Moey$g27)RQ!yO~LS>itjAR!0 zGR4C1g$*w)5QMj}D=41_R(eH4cwX`T9f*WF78_>piYXEjKQRP|FQReznThOdr72Fz z$~pJKWnnKPX$wKXn0M(!E(l&-k(1z%kb@|gwy;Gi^hAVA!670F-V-wvxTT)U`cmNc z7=L`x5%{XXqCSHg!a`&j5VPn`5Q0KNR8th9R9~?`kc3Bx*3D>wAiNZ#WiBoo!H4uC z1K*NWi@`@DR5kq)HcU2j?3ql98myrSq6j1;BurO?t3oKGMnVYu64;RmpF-zE{^H?# zI}A7z3JfuMt}Vf;8h(jGWHdLy-71L<@K|DraB7-NBU~Vr5J4>od?q{ef6-_{W1>8D zn~GBX%6O$iR5eG}19IgPjF>DuNHMxMF$}!o((jNFgLXC4?`i zm`enO=!kxaRxi?`;Y9Or*?LrM40hmeaBQr6VF`y`CkDmgk2{g;Ma3%?5w<;!53DRa zK_j4&6RaiLJ_&3=CD{liqovTZ*;z_9J&|yjipn-U27aYIjMIE?4TwZB_?{gac?e?> zuS0F|NTB}Ml1_x~7?Ti5NwNznk+B3KBE&sH;j*eRW~po2EiDtpDBs*E!A%Ta55X2F z_^eUJ_9h_T1R(?%Fq~}(0~(r5@rX)9`W2QYJ_!&(dn)5nUMmv^m53mO$xxOhA`sBV!sudTX)$_y58f*a!eT~S7Vz|RQ50$?(A|yN zE>{QQc!VIF6S<;dK?bmbLirI+{R`xaI>od!gs*tt(P4<2H=(N_LUa_7hJFhl;n5f{ z+ZQ_h!Za{}uh`tLoyA@y#rxM1TqtQ_*N0z31gL01$ePOg8agQ0o&=5y1CAFOGf0Fy z6zz>dXzR3Wp^gn!2IFUyhsyZT(J@O-o(rtqF$1xpvjRnj(FakFvc^C62ErP`+ZSWD zx;9H1!)1eGL5d+7DRwdTiiW4+#_X^7Uo>cavF!9ABOdTg8U%Ypk~HX4(i$R|dkFhj zE*}Uj4WB&pJxdgBb~as){=u_j#m8$65S&f9b;bCf1SCT6rrA7n#WYO?BsUU|sNLrz zbQWYmMEEVnGK=)GY`8X7He7Eh35`|R`3+-l#Jn@WkepO9VrOVv9T@r^$htyQi!q0i zV!*x#Zj?_89?b!?D=%22LM~{8P;SfPoLuoFA=84QUMmd@Tp+q)!Jdw#E?D+HhI$0z zXEZeige)Qt6hw6U!^$`5nnP4W*-^9buOcrLgnCYsV2bz>%qAPfA&7R09X7D^SSC{8 zv7sjP7jz(jUP56p5-m(pofRP%E#I>L00rX>@Iq8qgW@G#geSbs6EB9SZPUc3q3RZ9 zrP**yw3JlTgIF?p5{yBtJsu&k3kIl4yBoa?pOK52e4!f)pA&s${c(oG^s8kv)kLYa6{A|3SnU%#Iv_U8&Ea>%)v8O~x$A{S| zbx_ny>~s>RvJ`v}vQbjAW+f6Kr`Umrfifxa*Bj)VlA<&ag`kljvaq)C)+f$#kfIoX zn4rIQCfh0uPY78rM0$upDqtEn_BI?QAqViDQ}ZD+6GPx4f)Iy7;Bpn@V#9hMhG zJ9$Dn5&j;rAcl;Hi)2GXA|IjlDQKB7e$feQ0&5k*7XXA3Gr03n=?UmPLf7!dCwT-C zh)1Dkq2uwLrYVVqg@u_12fRIh!H*4;Vp;1SpyOjgQK^I^B`}^e6J$0z#Du|iGZVA% zMU5^HHbZ6KG?=jx?33t(n;?guM!!Xh^_9XCJ&I$oxz2f(%CKvnfeG3BBG;Cgr3lpTN`6^U+`&hSw!L3g)wmE3^vc-1Q9&`!DR?S zV1g?QgY!CET(Dt3u`AUSUWLlCye816wkEQ%1R-~Yv2Qa8b}TlA{fsfPk3NNpHe57l ziMWCZ6Cx<0gdQERL3hJ=+%cjE(#+#ahzV#!;V_Z1Vh`3kQymSBkG6Ng;o_ToY>99o z1Q47X!J=1*H;NyIl=S>vWjG4uFRtV^?alP#CbmBN=8A`&qKh(RGPDd2_TV*V67Mkl0R3oVV8p|QUT%@U$h zEMpcHy$w-@T5G_>_!pJ=){0JAB=?Ij-WSY-;Q1spG%*cvgF@_z-f2|!tmk)%*Cz9ZW z;6gnQD3CNE7YLS^k^BDuz*2q~C6(h^7YE4~jRNdbDd2_ti^roHr1>E(3(8$^WAHqo zAuKPV5Kaxh`~+&8mws84BrXq{T zn=HJnMkU4xVPXkp@qRW+BpMPRj>{{P@vk%0FxEYZ31(p-A`qQoQ3OSeet#QDjtPWz zUIqP6I3Sj05mZ8Gn49a8V$3!C4ODbK$S3ivFDphhNR))enXFSx9)?xm^_25`^uiZ4 z{f(h;nEbeKX?_fBf}+oNnt#RYLKDjHKj?krvu|S?!OXja@zMAfg=a@)mBD{w#xiJF zx+!wnLmgQ5PL8~9SJ0Lov&_&tnk_YLqu{ulhK4~*iMjc|NcX_pUnjgLOW^T8qzYlQwL@p-Q*%Um?O zsH=K$Os@pWT<;47nc$gN(`6PK@Xigv<4Y6q(W)Aa z1cF8+em{BC8!x0*Qt?7u8uOy&6P3$MEl|~a7TS2yGNd&ml1U_Jf6&dn;BHsw!|Yh^ z#KbuYCQ|2FLRnazWu`7ngyO>!V_wGLNAnBUvvX?h4+AZR<(vD-qhbn;P`?x|KE^RK zShI>N6U^~)U17-b(@zhAFzv9I8Fdlt)H3Y+iyLA3Qiw!s*wYjiA>iCr7Y1B9FBNFI z7xAqplYAg2S0XOOm#|~~8yW2gtgVa?S2c@sF{IFfLU_8$;_H$Syy$pYdlm`!Zl>*? z@knvKvY~V`Q7+(>!vPhE2tr_xg5tQohWtyha9#OcD2zaNkHKkv)y z^?E*^uji{__jXR$^;tr7ok+^(8f)P%-QV_dyaQcCzOTUyH)+99&F5`dhc*9mn}n40 z5PGx@K4g6=OLO_OuH%19ayK)3FW*bG)Tr(+#5ti$a(DrYK!Se9f8O2b4YgX1R-1TL z_BugoE3{0;e6y@l0fWI?8f;wS_*8zpjr8^OO*jkI3p{cYvp*=*O}N+VSqhZmZw7!| zTPDB9&vyNh03^-nWZy20C4)_@B2 zajM7X?AoJb;a$+A(|8kbXI*f*+DcRP%Yf+I7j2y;cHO4w)!S}7Tk^ju8N8|1@4RZA zsUMSYaaj2-XG{(}XVQDjo`9kU-W1JBXwfl=ffN_f+n~$U3$vi4;o3%=9k10ma_Dyr z)%lyI>wSIC^e#0%ddBQu?|G{~CerrY^}?(B&N;1G-u*#fu49`4i+2%ux>AoW4-7qj z%`UU!)ci%h-TsE~o-gWQR4orF_xd)6L&x7pjMGz1fq@E%A-mLMg;=&suu#^=dYs$GK z9-QfTe;8Wc8#MfIpgPgH#`%O&8Hcg$R={_wa^1;?!JsyNlAUVB2KsLW+6XqGj#99K z%8jWts0qAUvzEHOP&NOj%|QCqu&_s%J1Od@bk+h=qd)VhezOXAaK2MBDcNqbuASO( zgr=b?=$Hh>gkyPv7-E3u??~oUhO5ZmaS@dMq7*6;E7EJ*+oCjUxyLv?3AmWUv)}?3 z{epth9Jf?jX?ouUj|9eYToZr#4IdKz8tep@1_cTrGb%s1Ud~7)TJu8m-j@xwN+wl_ zx}*M!x+`(_|H1A`%>93;J4WAmA0;f|;{O#M`5)x2T*rfk*OWZeK%Tte<~sD1q{VE? zB{cFiwlMLqh}0Iy6SfrOr`Q3rLCH{olHpf5NH&b@q;H7tyrfPZxS+FpYX-!zFr7Gr z{8;VpQ5U$c->~)?D);~{jcOGO{Q}zs2dB0LS`Y1hJ7Y1tV2Sqr#v1!mnj0>St%l0XTeI5v2Sao20IK%DMrHZl)Cecwo z0R~=i$(OZ#J@9>`J2914LRS9a!fFfQ%?!evVdivIM<8+*FQl}-!I~^;QmQdsJ^g3Y zugIsL*AJ%7uINdA{pQvl@4D8=-Eb<=N-GIOn;mY=v_x#XP*ZOYY{WfCC7L4<0@4z&Y5bFaahfaLG1bg&o8r9#++L?9LpSt)L)8C zGE#D#uC5aXm$aH`Ml_FId!c0?cMyo8fL{212~l zD^W{HYWTo ztofRw;l(Rg^1cCmhm9+Am!n!tvL-crw~q^feHkNtD`4D2&UcF+nLje_!C^z3FXg?I z4xMm7czH7To7*fD;z66M+cIHcQ; zS-^xa1Xf<`OE$e4AUO!RN%P``&9pF9r4K)PHUEI?zRzKw^=L0$OHHtq!4>QJL>v;bI&q6>Bp4bPegwwyHjKY zFyN2gV}xEb00>5bNq>%&PEcR3$GqV=#qB&t(Dd7ZHPJrZli`BKUtt|J`UZ7E;$q=n6k zz+xp#?P_9|5Dh-fB1ctdHGQ%tXfBliMmMzzURhjl9UvJP2g2yPKK|#xlDli6w$R4) z=oG^@Qg<|&@M@9%88i}GUi2DztHrFX&7?X0*6@@9-HuP~FL(t@ZP98gk|wk&RWUca zHsCc|Eq254sQ`L+4O{6>Ro^U4uxyPP@|ulLQ`PEaKQa6Ac;BX)rRn2XI?3&_z64*zTbf^)?tj{_RQRmisMm?eJyo*9|d2 z3TM;GYT|z{4p=qNW6g=t;fcg73f|OjLM4iHL4+eu&L^JUl^^L%8?)#!0P8>2e2SiC zb1Z205v=K=>1pv=v`vv;2``znfUvA>)yX}bUQ=?MR<0nzorK13-Pb4mjcz@)6}2zY z_E((AoxcWmTcYt6a${}V<@-G(*RR$H@ROQ~xbBn#8l7Q6*~w1Xzd4*M8zvmGXOE>1 zvmMUr(3e~SpMSx!CvLF(8LpT4jaw8@B-42dE2X_x;53RiQ(FW38! zjGywXn%%P8uf{^8&)H}4yYEq)HYr<FX+}WbwAmUce zxp2rUR?wJsG0W59#q2j=D8ZW;N=VB@Z`}&}4D|0ikfQhhP=8XqJKdYt485oGn%z?I z&nSm2873iRmhW1mKaZc>?9jjM;E~rZ8}ZZ;lqvAt36)tF9Oqd-*j$v$*wF^^cqKb( zNN6KBaq47Cw!+qIBIK0)e2x2nf*iE=`#&SDtUYgXA5**#-`uL=we*>#I=^}-F>W{w zzM^w^MEgfdBE3RSst~>QFf|)$E$FvdHRAZe1mpM4z*qamgwH{p(OpwVVv<+@|4gNwT+jzGHm|Ka?O{^yz>qo|^JTKzDKDri| zo462?vpq$nFS@p&roF$V%ntYNmgCMDbYtnS-x}o(H@j`41mSzkeRvH|G!y6W^|227 z3(jJ!9Oqc}-f9Zeiqyl*Egm4wHcrUq5X|=X`?r`Z+wHsDS2$@e+}I3w2FO)sCHuCHqKhyZK3Vs$sIoK9#@i%*?TKMFw;Iex7QedD;+qu zKyys)L#mXBN@Q~!V@#|56ft&uQ@i0CeO)^xSyx`bU7(D9 zFO^UE;N6;6HOC;ZO{uiRVZ26HBEM#PbjIRU#;Q$S7k|QOLZ>z5z&}+pW;=!Irzux} z6Z~w@5%&p-wofHmopq$^kKSbIxMK=}bN=)8Q~P;&6(N}wVuy3k$UW}CSz}WRKkCmU zzK4F+XGNy&XTBaxbayn;eBkAn)dFr%K`!URN{p;#C=MFWWyL9qX z-W32pZ!M&%<%jfx1gWraz<1k7UK!mIwpy?6`yxT`YH`MlLf3g*VEzO97f+bO`3;_b zFygN4f0q32#e*excXyVUT9Ri_e^fy;)i33kB^=3_uC$CWW9HL;0&S+SspX{bt{N+^ zQu=GIP_(>i#Y2-SmupjZ)!GRS??&RDV-wK5UV1Hlu@A$ZPFKB!herP4a8%@P+u>}+ znZ7j!rp0J{H9BZ*`V|Sl*r>;(Xp4XDg#0A9#}^TOG~SF0AIZr$YkWGvKN;U0>yL#TJOA_@zA&t$;Pw)2&t#+aQ zvjyxR5FpxZKE-_Bsz2zlTNfZoCRt6HRxK<={Pg;^s41^cSv7c7a5;8HfjzdUb#H_s z-nKL6(ysMn-6^%7Phi;vDMxDdAe8!bwWk&OC2?klaPdoo(!q~H1z1*v(v|2S9sp@e zo-2}tm^VKP<23x_j<9HU%hZJFhXB;7Ys)3tQp~+s22ICIn6Batqcl%>U)W`zGP4CU zyKo#D+MJz)zG!Z%fR(B}Wkkd1E_;<}=)*P?Z%)lT+2V-X_2CdJ%K@`fh#^wNgXjJC@wfeM+Pmx1kEy z;)ZRKunStnwn9bSkAtR@U}g&Dqb8#*e!>&u-|xKuOCdPUl%`m|#n=7%ZTlJKSFHDx z>H~!Te+!+%U!i(#e6Teaz2Os5R)RKp)}T8G6YHt%B*g?7Y_}`9?Q*2>WB#pn`yAKV z>8qH|lhTgickx+wn|>H{B3i|tCH13YR_8bM5<{VxU0CO3b7I_O$-W!Kp5Gup2e_VQ zz_hF?wRVn*>uo>~(MNwZHS-)AKv5gQ#&TCph5A(qrk{lL;r<^#HF~1FBY{UXBYGka zH9ep6frQ&;AEcoQM)+jSU`6Ed^{gkF{gv`Ogk6ByOqPt`?-b)sxJPo?Ol?+ykDl>t?X3Rh4i6 zTCW#9AlXw)m`!~M5l3QN^|fJ7#hIU~B^5CAllBsY3S295jl1qA}Sw?)K|9_NT@d>xOt{MZH&c zuJewo^EpEi{L1{}Sf3SI(4-D(4C$Dspa{9^f4_N$bcDKj-c`w{KOF71(bupKG*pYb zcuo)5d4-wt%{E^{J!16><9q{&ZE(4Jkf9WR1h6}`ujo#vYjD1Pf?x1u`ZPZ ztM=u7k<&*d+6LdN;Ia=U>Up)0L&M5#OuUA5Jyd- z;B`U%(re)ZWE3#^dUh? zMuNc>;@|SE%wS{l<$7jtb+D=vvJORmKM+pU7dz%)FxJhCQ;I_X3C5n1qdMxq2->iH z#aq)aW`$y9A>_8(yISl}sW1n}7XRhvd-cwjh6>TzSdI0kQI6XgtT(`7R8kEA%=Ng) zCf8lXoI?HNeFnz(k~Y#b<62W}_*M>oIV9|Ea$6&sQnUtuBXVGss#urq+~Q$+=hNx+BIPpZhp z+1r!Nte?yc4-_9Ceg4Vq{S$+gMgB~p$D(TuudOF6FaHT*e7b)y*8fF~RuJ~O ztn3v6SZn?-k4~NHc9rj6W5nJh^;5PC7bEylm7A1@G#B~|>4QC!)U*21eJjFbG;+yv zR4PNY4Pfkt&}tav1cga%u0ga15C%+b_ndAu0QmsmkgX)5H~n+2b>gO*o>yvpS2x(3 z;aQ{er1YUib~6uHz9V{Y;jzD1H1fV?{6(P;d1=ZkdB)Zxrk10L6T$p_tW3L^NVO@0)uQcw=7-_>e5mSb%EJX0hR z>0BkRNZb~@{&fqm$BKB&83;L@NFZm#)V2qg-;LPNQKYx6PrNtHep&sOhD*wD{fr5< z7};vgq-Gq*J^(cjhN1?23b4e#<2FlpIrg+AD%$|5mVcs!%*IVMh0+;ag!@&}LUk*3 zTd%BFDZ^La6J4KX2juCEPW)3o^PHYegUUS?ws^H|XEfk-KW7kJ)Da)p_I*9e&6biA zg(v!OkedXhOOqCm5xi#? zH9v{6m_zFo%za|icYx6LZh#4ca1Fq$r+<_~`4Mo_S(!@VFDRljN9d$>T_S33Q@ zA9W8|4a|X}yYCqKy#cyY;2q+#X>%JxVwHCECjdlaIs|rE@QMS=AX1%?C^9a{F;9}O zF_UD(e#jMdfHt&TIQ0&5xcxBdq$8*ycdUm}z>7d%s=)r|uPWCff-9!ueeOe-H3P5% zU6)fjn~71gB!oq*8D6~i0J!8bgKkzj*~ZRERON)1`#PcO54i3bqYEyS8@RINLlmJC zmnC-2p9v-)d{*Xjdu{!GbS%%iHWup_l$Ni=?c7bWOi`b;^Wf<uc#k&Zxn3g*QAs1rGsM)^`aZ$lGeGfhj34%bmPn!5nKZVg)wu>umfE86|BT6u0j zU-A(gyH+Ij0FaLIR`6FgPIA4VbDqGMU|Fc8eCWjFOJZVdGB*6zZx?4T#CQMO(Zwou zzYV<7fzg-_AeQHF%&);(sa2cT`rj1w=_Pao;S6$I^wj=61nPiR$Oz09-Fk0elX5~4 zXXB*?BD4Q_X?L<8H4V;?oXwm#9OM01N9WjJcX0JF7gu@KX;GIn4c#s5@R?PDNyo7% zE|Y&gv+MDw$0pJ!rj`vQ7adGi|8H|S)Ml*`k$8|IY{`64IiP{(+@Zg<&A;PYBre>6 zS6%V;X3^h%x13TK>-Pr*`o8VX-b9SY6AVY`)Qa8jyD50>t$5F#g^j3xyEq@$Ziu;L zBr<`UbMoz|c5IRXI1I!%jEV2VLuI!Yu61;6o2@EZ3oYs;4zJvgNGEZ0?m~`+MM3K) z?}IXV`zm2j_Tbdhelp`7y8G8}&jF<$$Jn+_+k029Coh#9nH7;)ZWy&nElKr-=xMJ8 z)zS}Lb8P*lY$Bm{E6?AEUFEW7It4T=JDk(a2Zb8;q-(6b8E`TYgjKn3>U3qj+e40= zAMf&NPdL|yf%bru!l?7;wQt3;D%I~!RkTCQso}?YTvyRmEZ)seDJ8BCybb|twvYINDd#Z@6HA5^u(U#L~m|e>+O@jox z0xie-x61B1@%pbp1LamrmE%>-a!Ybg7`HQOHeJ*&Li1)f(7iO~YRsi>Np#)2&8+I+ z?K$e{cL5uoST{2}K450H)MhSRzr>_M7HS^UYqt=yE{`)gYw~i0S}4d88sIyO+foQ= z+BcUY=u3y_K0}&-VsaOx$E0UPooq>-(y_e0GcFYf@?TK*q20lE3Rs#1$jYPeNxMZb zP-WRng~Q32QO#2tKK4m$Af75q)lKk*qR8sYiQI^2ZhZNm*6uR0%bM;}R4GPjPjANT zF!te_RkHhf$tO3FO*C>-j%Aam=L0z{U_6bz-!%T>%v?ay@$#!~&F4LL&_PNz>^mEw zb;#0Z?VcmERO)fuoe-#7R+_sO{^;)KUT6D)tLG#ST-gpDT{?KR*kIm!Y&?*jHJo`c z1=@XZx46V6_z?wyoSWB*ryWpwHL z)Jy%)Yfe027#zkCZ)3hCe$_#Ay4F>ON@ef5&+je1@u}qbvEN~oB?5Df2nMaXJjsWy z@0}s`tm-BurFj{ghJvyy^XpUS(;JLVV@C~0nnnO|TD}3pn!8uLBY2S$pJr?a1w)g~ zzyYfW7l<`*%A}%V6^&R!%5FaES(~yK%$&t3u*IJdI*>jfd=&HpHat(~vog&9ycFHM zXE8xO#W&a9xiN=Jl==YG68tBVr?OJOb)?fQu}`Vo%o%^5qhj8U!;P9c+!!7|l0202 z(aEj@WB1`jL3xTJ;=7nL&%E+6HzUYykualn)YT}4F%xR*LhAebRU!kUY-C8cTA}R{ z%L3Xmru(u!bQA^9@lmd$Nl?lTYiEJDd0-Al*kOcax}VC#$#7X&rLvBW)QEW6x8fI1 z<9i}#Ni{|_wk6om?#jKE#x`TmQ|tm=DjfmRmM=~>=jU9%#-h3k+x zj>$@mLA2$*auO29t`7u|(S(WWdKu+%)3bn!4h|X0foy*Z&;MC0*#sLKn`Cuudo$1M zi0RW%rBOX_1|48y*zVdx+d7RlcCnETr7TjW(WOIq_j0%fz>fD*`4gDV(S+?)!yRM( zPGuG8+Xo>wE4wM#F2FLcwdHG|J6g17ey1kE$zW!!dS0LAW5Fi3AZDsG_uLUejj8l8 za4)o2Hq3jX80yv0@x{DgTx?8MCs1zuAa;z*4DgPU9+KXE*4__SGlmEa+&#gsZhBsQ zGlS6U|FP{J_t$SgUKiDKAfoW#<9`~UF9yc2)03vnplv6H@Qf2u$$C{6(G zCH*&mBf@!LVi6^H) z%f%=C+9(-#7fJomtP+P`1V92jW;LIBm1OdAX)7YhNVs!O^15@!DAl?>wK($M zrSk*?)*QQv>KnN?BmA_*U4dz*Wrx5YBg%$)Nvw>hmq#{OTfDUNZuQecN#WybS)&&O zw04Qg2Rt8^Y*>zq+AqGeZpf$pVDrDp0v9dJ$5w5E9E3gsV5ay|QFPC|G{v?JX;q>9 z6^fq@)l{UBvA0{Ierl#l&Tm@^hCtG1ridTJ6H9kBy4k*@_`8V7Oa*HE+9Eupa`33@ zrcK1uWvuT=kF|)?o8HI6^Mj489oJUo9<@C>d3jM2>ymXc^-?X%q%_Ei)erA4aA$|=b`%lGGu7Vz&1C)Y)ei(H)7`MJ6IuS*IG z2}>%<$SCS)=~!EbL;nBX;BPy?N>7KN1!y1w0F)I%!wUJ^3CRB&B8&zc<^S6tP#PHR z89I6f2q*!R=ARhoI^h~fMfB}Hf0svGu z1Aq(0K<$K#0YHdV0D!f@p?3NJ>?QPxCM@OlhkJJX`noYMMA#uxZ1ey-z(@~jL<}wh z5rhM*(y%Ci;e`kQV+SC*$v_%IRI&&hVl68IKrW2x(r19@*Z=?y0Q8JNQVc*_kirj2 zk(A89k_-U4F)aTM7^AeGn;74N(6VVgOnHCr(?dW&Lj=ky1qUtw0(Sb)C%U>XGytd& z_+vzp20eJMhn;Veq6*nB2)gvXT5@s;mh69CKg1`mn6T1wCC_s+^ zU=z@Q>Dh}gL7r&nvC$_pywtt=P*7K2H>$m#L5iK7kshE=W;OmK1;F4J==Is9`4Pzs z?*KhOtKfeX3WG4PiU=}(Dg6mR1za>Nv_3$M+3Ax&-N6cC3N#v^5CIK#@Ly~U0E-?B z0f8X^A@G^3{7}J40Tv6b0+_C*RuZ5AW1~l8K<%LHjDXL>eIOtR7XtfrW$ZssKAZOsh>00Wd*7YFw3qwrep$q@V!e9<1{%2y_NO z;C87iL<4%glnqn|a1Q`P^cYzAFEG-l!IJo4ZTfm_fG)uHl?8fR@B>5x0VHd{p!R~G zysUyyfH4LT(9<`gy%8mNTT9zm3jvys=2fXeSLjRF=M=4%;9P?ZVk!$1fDm9{06VZY z!59E?yIqTcK?H!)CjsCC1dZR`L%?WZpbT$Q5cGhE23t&_AOZkx3mK=}egZAjpx3kG zPXVHmfQR~51>mr@e{z6Y(nSFJuucYkW5zF^X#x6}s2Bj2#1MnHD)mJRgh`49IPw%N z1o&LG0s!E@E+8nN0U!WI;3^2H8xN$RpV%~@Fyl0>w~YE4#`GDWaj*ld{4p#U7BNv; zZ_`AK0hoYYhJalGkO6R*7&8K_2F8d21RMZw$w<$3TQ`Fp(1l3z13>a^D1z;6%1an+ z0ipoL#&4W~(1!>JL8LWc`T+26aIe{t06;4pDxjsSDF|T$uZf9u`ezMMZ}qjlgP<;T zH3mUt52{rc0E}7z>j&3Y6-uZsW; zB7@~I0AWdjK#k#0Cvb?gGN2Iw8A$*Xp$9~@7c+hS(w z;7dy@dXMw`mSr;`Bs6gw=3BGZf*qugisWqUU0c3WHu5-?X6E!u|CsrQ)yWU(tKg7J zZ-58a0b0S^w}A{eXkGv23RD<`;XXqw00s3aa2pQOMSN_732F*5(nHt;?10k$kvBzC zke%hd7Q&bzN>{5b3DAe?Cb4O~0|YzM00b;4>jp}=t8tjJ&l8WY3&IupH@2{P<{6^o zx%(`=3ESxcc5E8#G|7i%Kd7T#hnDZ>CA|(JeX}x_gZTl$sPumzXOL=cwD8=Dh>pej zR=I5K?{p)*CZCNvdwbMLGH#QVIjidpUALaqb#BjUCcjD^TkFcxF&gj*+SVw0&S2bTM_8ja?gHuN7N;l@*`9R-HGX^J+TkguLdl)Xn!ymN!29^w>>z9W(@`ffom+2|1N3TsJVlioi3}9U5P}*Du|dw-G#&D)OAc=;pQetk*Uu7|^UJd#jc@h`#aXGOr^v=uN_dLoy?qyYnKCjnLYbiWi{^#c+ zJA_C%WbG@&eqME43r*$E(h`E=_js*Rc6tbq0q#_=wn7$hfS(@LugeH9x_$zU3L>B> zD5!<_2RkSN&YuMXF6e7TJrfU>UklSy45DQf52wkItPI5#)T24!EUoqgI5m zfWS{-mNtrqCQ()+^VMY=yMgAUGWBaQ=6&4#GGZD4-8Dk$YY>y9#5?=ZL($faf?B#U zno1|p_jey}hn(NkaCn3^CHgoXnwy=!{g@h03_$Ev0JYu@@L2)UNajm>^ zXkBLWCf2*4_3N@Cw@b^fV6>YCIp75l11=5*H_>>yBvjHC+y3qM3dFo^*HZZZrn_@TEEuqZ%?QBW(X&bKJ|@K8C%yCS;wc>OQH zZW-vQifviQp7veMyWU&x8RQdww|1W0#gV9(GPiihZD6Swo(C_jIXFDt89rkS05p!< zOl{5Bt=vS^Ft5=x6hXfgUE0L7d(5ld*I1o#$Z1(OwCR4X@dz#da5SHDWHV%Ue!Rh& zucms;O5I?5e+Da^Cmi4P)4$bWs&L%rR8nFC=^tL5ztdvGh|IOywso|?9duV`%_IMF z4?aIKwzfK`;L923sLbSu`f1T~b0?JI!Ckr(%PH3WbL%evTF2ChP6u^!!CGDbO3!fN zfci7f_pn8tsmQ-mRlZ_1ytX8=E@t~))|Wr(#af*oG+=P}OJi^i1>hg}1=((EumefJ zMGg8CcE*egSFbVvYLTICB=iUW0MB8wf*q^6)aNrcmwkBek6t#NnmC@r1v#RAjT+9_ zJzd{vPQ)%grtsn@Hq7=vn=L5irU#p^)(xBIiuzb*Rb(O(Xt-M~svpJI)IBC11>4`o z#C%(_GD1ENKK|-MyYx$WN?qZGU+Aq1OOs73u>%LZT-ppaMiZI+4M9SIC zh)GOY0${%6@1WHWxz%Y1XsTTNy%htp>5Or1PmVjsaOH1pZlnZlnw<$6jR z@2Km1tw!{nxVpj7#MER@(dkvW#y{I$e!(TbP96H9u!CNLx9t*h_;e#8PDmCVt8j zPGyI|fo}{fi~xPcR|vl@gdc`rh%pA(U{KJ5pv_=mmOTg@Zh5k6^FnrdqrMjIqU7$fdDZBLtGyNBMW6{2I)O_q;>;H%oqbfsE`%T73?6(oDkX~G`Hf_3pPum2X zNp-Fm?HPTt_=Mo6!t{QVr!mNoPw!h{0Rb63zJ;8f+pFDrZH6>nwvn5EU3*=gZo7iHln7xYt7_$YC@ z|K@sbbl#0VK7DVA_#R|vE7_7#J$`A|XX@Cdvx)H5!NKv(-Wlx8>ZA~P)aLWPW~z$8 zclV8!FT-xVa>p1vpL%aedftPnH(4-PP~ud?<)b_}p+YgAe)~MebmGK*^6=J?C-b>O z!8RycErg#z1JI6%(!Fg5S}+@60q}z!>~~l%BZCy=w!8@fAvm2#hvKr;dJBb` zF&~NfVX{sQ+08h3)nvV%Y2^8*6%voTl{1!I)`CqX+QbWpi* z>?;|iI#}<;mHVY*{AquEv1dT)_0eO|?9FvAzWagj`1;|HnIAKU%7fuwMsWHS)>~@c z(g5n+h7IfFvp=*CP1pVc%D4K{92b`E2FR}6RqS$a`Z~T4&_dP`{v>WS>M^X3CdM~z z*l|Al;G~`PG_&|#S@Dwcv#gY%i1B`66KB%OB2_}BS9z**@xTZBv3@B&{9Ncy?$29h z;URp1TT`1=M)6B$WZCI~i^uWg*7M=5%wI!_yEg8S>+7EVk<{}yYx%W_+5(`0UvFrz zA)rEb8bHhiR(_~9z;+t}qzEDy5EqTB?3C&{^7T$V4!w-DWleUQ1MWsh_%-g7icLFt zubad#gi_A=`<}nvQe=J>|vbssQbX@cxp72=0v~0L%-uyT_ z(H_H|xaNJ?zmE=QW|vsh4q? z=?&2=d#xF$>mJCeE z;C0(B$%{ygCyJpwI-5g_N|v#Mi67O%Cw^s6PY2j^Gg2T7kHKgSVy7p z2SElagb1enfFgvh3bh~Lx1&k&1^$mOnJ$Mv3cw|LRrWpblCgdIbYcd6h9jV7f-Emu zjvL&LNHF5rsbyAN@bM|@Y3TjEdMl^TsLYvW$g2_aYSP);rs+4;+0W?!tJA9UA;j#h zNiTu)lw8|D8C`HPpTSS8wN&k5wK3IXmB41LPb~WSyhhZG%3}|T^;wFvc;Kb$Gmi4PK{L)@$bB_Fqbh+Qh=T^nqQ}4w)r7rH0y&2m2&@-?r30{n z6#Ar~)TxN@!vww**AmgOLv{1R*iZY3bd?*-=R*m_exwCgRo1bvJbCN8c(dLGnLmmW ziXnWXC!))DszvBmaTxBOb2^)2&UZy6>usYT`%mny5}Sy-5Rj-rOrIUIk_WNPnY5-4%w6Pv-C zwY`g09yz|EY3{N!*vM_Q4erB>IWvQO&O^MBi@EoIRmUe2F|SzY!O)ylN@Z?^`Nl~g zbHej=4ztfYoT?j3MvljH_5nhqlN>lqFec`z6!awmjGLog{PSe*3w#&U{lHF(r~=ZU z{|E!%d^1I4ah`fNp`D!Qdw_Ed;4|JOF*W`&ZyufYXeN)HST7%!WGda6voRp<%tQ`+ zn?|dsBBxJWCNfuRN~gRtMSf=w(tW1{fet?@tk3M)3&Ni5gSFAo6Ul*ZM>*_X`3*A( zULO_Y%M@z=0?@T}&bs&o&*p72?bRjHo}~6}3A1epJFogUTu|$65GdPmB2`2C&ZBFIy`+Gh=9sbFaK)~03~A<2<*1JM-shJ0xj_D3PSs6# zA2FZquDRbUb1&X=O#Ns;T2pQ0!iG~>ZZtGHmSYg95D$nofl zhyc)guqZaI7yLk)0ipoTa_=Re&!FiDQXvSyuQjeEeP8%jW5VP{>xIz#RT*lcEs6O2 z2;39aBjo}E!p6&m7x&4FVQ!LF=DX^#@`PhgFV5aFYjlJ> z8!^Y1`w$aH9lTcS5{fQ8p-Ec{{|j&~TGm??6N9Z1nC}LAO{&?<2b>s;bJOIJN68PH z+`ejc0`CfOmv)$)cbx0CIlUIFDYBzZF;z3Ni&oY}9S3tXl@nsaoy4ss-cQ6(Z$dCn z3I6(bid9i|$+hrLQ!W$8SILi>HoYF>WE9isWQLFel=G}T&vE|W14B9xJDfL1Jh}sN zs|Uw}r)t6(Vmdo4=n|=&Ne~Vx2$U{5ylbBM+i(Aohuf#=Y6-`Lz38q0)hLy|dYHy- zEy3INni>!(2Y#rAAiyCl0&)z-hzEj#0(QD@lNjj*6Y|%YxMw17srC`Cs8)a2#-HCl z--lX16poylwHrm=pzt3(3S}yGJ@Qt6`nUXO=v#LpsBOtIX z=lt-g`AFO4rC6_`1?|4zZZk2T^R3^C1l}neQPV33$g^Fzv8|o0xHVw~0%;_u3HQ#Y z#$ny>$WrdYu&?2iO15cT*MR)7uz!)7ea*sDOgh0*#rXG0&4?cX)6xP^U3y&r zqX5M(7{O|i~ zxg_mz++9Pbi#8^5OR9aZoBd~;xWrbd-cmDVLt8mwa{e_5fv<&W7Mh|p8>VJaTb!=W zMYXavx&)O3_0J*sCEyRcLfy)g18owm^;Imtr3u^?xbM|zGrs_?c3hYz$kjYt?eYCUjiIA9Jo{UKRAH|8+ktSyadazX@8aq`{$5>ICE6JOuM6OI#)%kUw!Wc?x>4{Z&uk`cz z7q8sTHSBq=l@Hc^?MDpS>P8@lzxn)T5sedzyw%RPGO4@5TH)5kEq@(W8 z)9g#JFjkq3Rb&A}JT2dvjU86X|IdsV(Z4j%f|lgW?iqI?%WO8Jdy~_pt1935O@*uZ z#e zgf1b?ioOY__`G_Z1M;{a)yZ;?LubJ2qpfT+b7}DtwZA}FX{qux?xT`M1<67+lgjy- zJ98@6NWoU}Rma$s!F;I|`F0ohKXnPgGH>g`5MOTVBEDq+`uaddGCLqvpsxo@(u0)) zDF99UmKxu-xsRtoXM_C5=La_8N)^*8HbTAoy9rJ$*|l)*@*l&5_st1)Df+cdskS}x z-sM&^HZxuG(~-!X^}I)cyja5F-kRUhsfJ%y@$8>;CHs-8g%{9^8m~WuJP|0yQ(eqtgFyHqqe2 zQq%9NLINQ9-VS}KA*-$s@%DIa8&zm`lvgV`{w4HX&_z1tnswC7immOjq;dgNzsQZBTK5aSQneH+!PU^d<%D@!S3!{xTG$KNckDlT+8KHJD z@m)Xg@ZOJm{Pam2Pz5jCTxgK+h?2i*Wk*Eci*8ff`tik(Y^8&Uq-|2{$%`dbl6FX9 z5AWDvUNMe?vM&6ggOIb)5|}*7+B_77zon44RD0{tykn|}m33&@1v>g$`aU%m!R zp5vZ6nB*Gjm$%Y!skRl*J$GEQdU%xYeJt;7-NI2GKvAF*AL4;v!#RH)pE7gx_4Ln` zq=x2Wc?YO1-DRAO)r)%vxHrBL4Z8^_-1Xnbsi|FEz1W6y#Y=(i`jwS(3YiYk9Ct&m zMHa;QkU|qG1_@h7><`MSOHxCcxEgNW=qh#mI^ni!ZWWh($$Vzk?0jPYFZtE_w)22I zH@kaNiD=^1WuM(!l;;h{shl!{b(*SYo`ZD1E(=7%zvOju!$P9T3T7kGCxLy3J6t{B z0H12cO)+Gie)OD&Z_B4TN_TkT>?`-W7kGl7Ie96T{Wk2sQ_gSNn4T6<=&EXL# z&_yRNpg_NKoDB@iCIF59H248FC<9CvUhrB|k=($Z>ixuh9567p6ni$@y zKk6g4XIvLU5;G1;hOEvvsoNj@TzoAMF@rZ(ZvNuOq4T@t{ot zB&|Ihqb zR<<&lc^6kd^pczFrXuB4@k=~-k+wynG}2~v)9WfXIa!6#Ghd+$Al(7xEPxd>_aUh_ zukKf%uyr6^VEDzvoAW0^r37kd?MZk==4xXZGN?7apR#^JMLx2xp2>A4B<$Flt=GT# z6fM4#3u)Wz8#xVMJOu$5Ug z?CLXJmu{Y4DzbJi-!QDdkt)=bHI=2iTceu~`2KC{~IM>XJ`l5%6Fg>Rs&F>HM#X&FJNt{o zq^=3`i9Z)ZVN4xziM}$}*f9xdcJ203CJ0yaHLmUZsli3Vyw|riM>atIH|8buC7415 zb4W@weY{y)tzZ4DTbC1M56$W(CL2yzzXw?(D^=!4W_+v9&T@M3<>Lc&41EWgUzfBV zvZq(Mx{qfo2C^>IUz)wMTc(GD;1Oc7A0Q`Fd+mC~adSb@>Sh z38Aj8&h&Fy*6ak7vC^C{Nv9Ab~mKYV!o!@u;X0Tk+S=(?HZtd90sMcjQe ziF0c{C|kM}eX&`AV!XU(!#PGrdmIOd}O#3=&8vg` z6GLl)%uKd%&OHlZ$dT|!s@%Hd8!nyz^Vu3UgGo^bPLWobLtSV<>vM?Q*7&)t<54n{D@iQJp{)`hr-Ogoo z+FPb#pCmIsaedb|?u0#lFF?&8*JA!R<+&LRyWBv%6?4wy?(Sm49uJ(2vx1#K9BoJDqbG5{mFu!qLoMV8kZoefa27IWL~s)`wYW_wE31O8>Hr0VcNP54y48{EV&e zwQ;q(bKT=)kEfuUp_+|GZmR?_hr#+EA`o90Pb^^HPi>ppyB?)!+)BChpZLV zZQJ^4oN$p{jjgd3es`Z*RwgIdboYF7qE z2~G&BX4cM3=;@x)EH1Hsl~)=}$49Y}^QKr^rwtO1*|K(a@x3$IqX8%68EeJbKBEXX zCC-9?)m<;?KYaBy_OV5aIoU)-RacDLZw%{|&mc-cYChuv%k?i)cfC~n>#CKmZ3yR= zfksCDv*G!GWb=Ip8RE+f_Z5x)s8YRxl1}HnfZOPQW8*Wh$Yp?bVrH3zjj|zLh`j^A z)Z=|8I-B4`)Cu30UC#gf)>@8YEAd);IiWQZ4UV#w99^8T?;ivRG`V$^RSGrN)>ZW@ zeQt;!Ut1mF3iIH*DX}V_&WUa$)P*Eoe}-{xJ^Bl@=j{xqt2V7V;=_LJ;BjF~hGPku zc`8?8cSY#Jw&i9)j-4}Cc2?csNZI?Pu9*g`je#G4h@|{e8`REfYK2|Gx}YP+rzrQi zjYi|~xmr|LQ;u7_75N3pzWV2B>Q<|Z-$|?5a>DVdcxcdGz_z?dZ(stp_zzqyzVoLK zikZ)N%C(7y@zv1(-JC;h$h$1pIRv7)1%d?!k6S9Jl5Di~1%F?_*VqNLAi)`!VsCAKegXws_+9 zF*en`7yIJw4_$B@3+0l+Td6& zj~L7&jHED~;u8Q2>Hu2p>+Bqwuw)L6sH9|AQs#BqKpFo}{AG@16ApQg%EG^N_|mA; zsXnk~Pv`mcBV;4TKex4530JBd9j@bNY(BB+*Z0jK4jq>&j*^ON!tz@e{!~N-SFdfUWsJtAJ1Ne0j{v9QM--j=fZQ!-jr|#f2`(htctsW zjEl|K;dtsa%%wV*w}|nWkyVh5{nK2>?j^VE zx*sWO=~6b~jz@nqzCk>8h(wFSZK@;Qh)<)^`@78%P&?7W1F*P90`I!w(`|Fv`rYrS zHjNa9zRu6B@zz3vX6R0&DJ|kgv7z>>NKPZs^D}*+ez(n-j>%Cz3F`8xn=K}7w>BsV zn=6LI-@YIxniY!0HMQ^+o$&p#&h1{DS=g<-K!C@a zq>3=_<#1c6)s{eP%U=2F?EK35XjNC}{hlfpwS^E3G33BoSBH!yN`Q?g;QS}YIcde z5aC+cP>UZ;$G9ZMI}wa91jTYDpfo9iwpTFg#zziLcx?MxDU&ygsV*Eyxq&dPl((`? ze?D=$4Zxx4Wojb3)psGnQ33Uw<uAm^x=M1hYAt?# z`(&)o;LECYBPLe<^N}FMgOdk?mguCYv9>PXT)c*pf&TNo9tt9~($zvk@g(K~|Mch& z{`@ySI=X*DB1NxoGJkTQlExsiCjaRIfPluCd~8HHmGhIoa`t1x`@7ANnp9rJDjaV+ zZV=mz<(YN+FZOcdE3W(1?d4)Tv*ncrOcKsyblUpPMKhNlJGDiTKlTR~3EzzpR&qH%45R#Psn@w27GdUP6rylY?j)ggoN%Q&BASoKC;*>K(Wtbwt+{c=_` z$UjrGkF@lYIlk)(nF>PP3acb0K4(D%>;M36XCyzb8ZUWvWV#OQj+1MHC|z;oF1ax= zI0MS@*@4gv`{8P2qpV^RJDQ>(tVljxTY4TUZ(U0WH}dajj7-_&ohn&uihUEn+dQ4m z6!_x%(q5wD!QQCiv-v%*@vXdP{=uCupmt!jC(HS&KXpZ61oF(Ka7lUqzLULo>0-Dj zU*73AhEgFxei5)1ODXarM&>gZYZH%7nfoK6qdsbi zInW*REnh?7ufrc{Av3wcs}12Xqs_^L8HL4@qsc6X0r{+~@BexsrGm<&}{euYrJNT(Gi1O6+-D{$nw#IzOdMMA1fb{s!QEM)~;iS zPDv;_@kbvy7i%zIXYxd1H~j8!O;Dio&P<)a1o>;@dgv&xEhWP2{GR$2x-@LhJrTKB zXqS-`Ll2nQ1n|X1yow(SaV;7Tp$8)e_K*ScyZdVInQ@ViVR&slk)#ZEs0O1*b#Id; zox^&od}R8wuZou({Qd%A+cqZk4La7;&lb%dfjQ2BUu3h?G|>hU@&cn{(Y$Le28x$P zUs(5^tBuHa5l21f3M>(sSq@CLu5rxKk99WiZfW~{S@#000HB%RmEReZuW!0Or7C}u zIM%>?rvA_54MzbNc3DdyKqI5P!LyO6OrG&NJ*XV0g8~IrPEt8z{1xn+_|0|%s2G@W za7-2NX(QkCx=#|_L*;VSA3r~sI1b=mZ>SsbIS%mkH0s>&&qXVadJo)H+?ChemDk@= z$jx4tWH@S_-~Fk^`4uX7RSG!MN|Ho}xvlajgy&lUfN99UR9t6Q{yi+IwF2rIqm?Z3 zuw6Ha-h2H{yJAMLyu|D6 zGoLE4oV$5CW!09Z6koO-#Zgmf`+$inl+VPbXtW~b0Vd9ulbJoxit9^g>KC!j3!s?W z(b)%L?i=$P#BqPGXZ}K#85TaVyS-1KPZ$tcFB>Jt8MSVF{D+m^`a1jj1%%8?WB+=J z3Uy2VON%qZJ--(4ch|+AeQdz|6#CJ9vy)vkZ&S^slSFiP`Q_aZtfHU z9bWM?t43G!y~Ig>r?y}dn6rt=Qos$^${gp>M!On%#7$?+zW{*ER);KPSZtR^gdYC9 zQTpyDix7mL1|7;&fl;-wT|5kHbw8NZ$uF5G`yA@^)?&E1Z`c}{uF|1y&{tWX(GWt! zIJ;Hcx@0jT%=cq_yh1xC*Tw(+8?)Fz?tWZlhNJHwq$hsh#M9ez>B8OEFUo&`f-Se# z2ms)0fERgiiFc=F-*2mbLoiBs`-*DJsb_V_E;P%qxko%wO zZxH%VEEmr9M4-G|6+`G2F(S5=B<}6|@fwU&Y}$$cBD3RiF($j@2Wwvo5^~nnRl_+sO9C$)MOrV{nxU+v{hDI$`Ke11{78w|d(N#ku{Q*Cq@?q7BGaPT3Y;!)caK{Sc*uCq9>{LuR=f{i8 zd#>_z4W%;%vOwQj6TeyRmOFoXJoEb1{Ya&i4}>Z5n^!cc&)Ax{8&|t(l@_;bl(T%B zEC!|I4&R-NJWt8v_t(B0l&JyGNV=eLaq$Uir#2QNGsux8Sy>`cT8y~B?&`wNZu*~g zFYIxH=D&J=P<#bVUvF%Qe$&#<})t_sPRF^bG#}roM@kHo9EIzt-NMZch$^%Od(O_8Tp*ko;HXanK~tp zZyv!VXDDAn$T3?pj;f*3qhH*yFOSXCofkJO4(L{RcwC7*8wL;% zw9QUCof7K*7F!hb%e$n1#c>8QZNcWjcq3n~>4-oj*>pKVYZsXP^Rf@duapiyrkXG z!z}%?j}1Ax!8$c)Rk8-;>jYRE>eWEv!)5w+x8#V*2W+CQyt`3nSN_IOQN}>qZ}zKY z%;cra%U3Mi`muFS{{yuGFbJHQ4ns%#_`&0|6s}?M6Z46%2;YZToarNC9!Azco{_`E zJ4%9I^O|#c>rEo}s|w2M%*>RR%2!;&J|D-VbE5N}QD(J*%3r`YfHPe&qV5W*MRrf( zpX}I~n#%HnZ@|z8{bTpUJOW;uO8J992M86-ujANK8}rbM8k(XzBwHZtnoOJ<)ucN6QuMeiLu$s? zZk`{UHz$sL8`Q?y#%I5HRKU5qcqW!l^g@}yKzoyZ>|OtgzW^^%_<^)ty`>{DE8S2E z6rjgY#y9yKuOyt?u_yYn^|#B})OU*J3ki=Dib9J7?A%4a58_+dcEu@`tw!=hbJB47 z(KWQEoJfUt4aczeCuMTNO9^8z>*phr(BK)7cQ>(hPqk-kH!Gh5ETGA6;P#x_cDC4) zi_g!q4m13-?`BcMHjbpbYPL-)FKB0te zBc#P;nNMgTuN%8HxS$%_E_bSIYvmY}YLGTapk6jWx1I)uUufU&lhN#B5B@Z{Y8KkP z_txbjAW?#Pc-{J z{tLM8XHT&<{c#@i%1s`1P$1?Q)d?-Nl&nTfey0+QdKFOaD%WGrwC&K9)a0_i-b$z* z;kD~EAS-e>`+u3}TbU)TCiH)&c5uzivJG0*NE`X?J4_FeB#PJaiVFbfUtkQK(t2;R z(RnaPEw06vxkxgnb8h);E@3_LY~WqauY8K{w;ib&;nMi9-#ZWzk29(%_UZbqnfEf| zN7raN#~sOe%!|e5N0ybRK5NC+--mb)mqkH%ay)pjZ9=jgf~&GFNtQ$^nB2bka&vO_ z&#$!_A{E&ZVkG=}GQ^~!(XvK%jXagZSJ^NVShHW}=-+BPxMgM?n17dAZ>$Ig<=~9C zu64H-L^ zEF&wvR?a}nOgr(Tt$akTLqyn?rwfw%K6^fq$Hh$9%>RHLZ=(~B=N3Rv!pV^z&== zvk%jkK`3*g!)v&}YNEr?eo=L;)9`TKL^khS&TB*cgj+u0yg?2I{b7G5PgoByl!L^0 zX=RhLn`vNgYWqQAUg-U9K23I#R)CjGpI)Cs zk$f728{xXOXJqLcQ9DmPEc%QwDi6-#x|Z4ju3gzhJM%CRZ`u zl-e@X#)p-h{mqNt^!k<%LssiwA*+2j9^LTV=-%d2UyGE;vVC~KK3VqLMz$wtEGVvM zIQKg)?Bq3h$~yDed|o|u!ybze3(*;v638mpbv6oQHgX6tO4%$nSrx{4Zq2<(0*7nKIv^O8s7trx^GQ8%5TR3F_Z038IUP=WK7c+y?|X>U zlM6+?ITL~afE&B$gwwb%Gsm!Cst9{VxhW9#G4)}SRzzC=A1CKg6loi<2rxQLfxpv z?nJfyxIHFr!2xd5k0V!{PcUW?5%`9Y9=|rza=Uog$-(~ zQazGeGnzL;t*y&yxj*p?hnKj*m945BxRF(RA*(4i>oMMbrp94BPg#qy6M8LqH1V$Z zVA+k*ZQ(n=J&>uZzWyb}8wW3Vv(P^-MWa#sldr~`g-7?wxUN~I+1Q)kTqn#(hoXx% zMbrK$g50l>qGFw~Z$kb1)eRA`sa2XvjBkI#*5VVAvE2YBCfe=Vl?I){uv~$pjZ->2 z0ubFbiW?f(*VF)L=PVD-0;M;#1S_?^k01X9aQp!8hpj&p&j#Se2I>{cHfSRv%!kMF zqui*qZ7kpOv%Kj!$rR-$BN75bqS`PM1@-OTb44u{%PEYah~2c=Yv)7PyONfbvwKM z9;)v<6J%^Wug1HMzC#Tfq%}OLB0MHFMXgYHxA7&0zUvS2{PHAKe)|E99#mfkuIQw1 zjj>D?4o;c$sFbuVYBUaYRL4cNl_5*)acwa%QJk)CE~%CJtLD)J?rD*v+x`X2L7Bv+ z@Y#=*`n%Hj^Se4)m~p@R%{9)3#Uh{=EbLo6u}XAakw07ubr+w(oq-43d@>X=HgId$ z`Urh)T5ARG-81aDXl8&(@|$X)`~QB`4-F^$US&i8>j{~A;68W+pP8~zpMxS`({L|cU0?w#O$2`+va-pSVtZr#So^i2TIPt8VX6m)DShkxr=?@&{Jg2o343y%r~_)M z+tCjnf8c@VNyKyKx{bLhrZu1YW+^iZpTE1F<)d(%ODk(J zQ*tvdHi-DbX)U)YXq-$P4=AaLcw%dWmfc5>hipxnd6s+hu9;o1s(Ws5(?t4ND~Iu8 z>pFAWs}W7dZ>HkTZgRzWxgT*FG;AgoWSfa^PlNA`mNtr3lSfv;P(Y?0I>1F8_u(7~g$mX98F>=TBODywh;F7AUUAF;#B}H%%1~_*^IZz?|=D zM9cBZsi?DrU#DJ&Tw6KoS}H{tOUyG`fU&I3I$t#?UvwdFhYD$BQSPfg>_`dovd8Zc zgvt8~e#C`|E=ikKbJeopTs-ec51t}R%CGG1?J`Fa>#PFQt$h3;$_7qjigLCbi{>*4 zTitp+s+x;@_6z;v%krrzxruyzHg~-E#Kl$>#Xlb$V4EElPBPZFFDF|GB-|;jKOCM= zySeLG{zqg0+f6wmDIR1p6T!J?U%jN1L!4Xn_A8d7Ev@Pt*QeSnV2Zge(dYf%@BjZsWbeJ_uy^Lh%sF#rej`+pe|lD# zkd&}rFtND#aUfSh@c2%BZi69~VyPRJWEAO&|766&c-9Am^Ft!#JblN*b|{u^U%#Ni ze5shj0&7$;7T*lYLrUQz#aOp{ZL`)Il#>>g>w1!1CgEP}W`;`#hM8$HIYsRoZRuiv01JokixZ5)#zL; z{-Z~X0X@RD>MAI(>K`4{RI_H!OYRV050+{aSMPNnZHh;Avvu~$H)K}W!WrrH?ILBT((TBqbs`&-S3;~=D8?cu(dJrWQEs`CA}{7 z=*4V%HmfbyE7<}jaG=OytgE#lz?*}QE&biBlf{bg;v~|@G|y9bg$sTtD&|Q_2l)=V zYw1E6==M6^MIzr#bzpN5FYLqW9^Cgsq$5OR>HbIAemh2ISr+{ z%iS;gDWk~DX(JnWdW3sqb%9oJ#Y2>I)aGxHiksS)Hp(Li((s*3m1u>F458IdUDBVh zP+B!f7PJ0JcWy7GN9CJDlI=K%AVBb5=fsa%GlPPj+sV%CtrlB?ERHB;-3*ij z^YKoX{iR1+=j1>41%zv;@^vO7Xg}=c>6`f#hGv~g`$O3d!qI1Z_NZasWHgBeVfpWR&H5Q+-lTK~l@t4`~ z$ieEGtoN@M}C7yQfTB< zgUQs;Vd(M$DnT{pS(B-Nu($>-;KFrXEk;}ssq>E}ms@6M4lRun9jCq%Bs~+c3_re4 zDn>Tf#@abv zd{^1~V^2QGx5=Y0Lo3TpbmJQB<-^Fp{b1|Bdv39v`W<`YGxv2|)l2Q$V=2-c^eH_~ zw=^gZt<)jyd~_1^TU#pR``kqT$O!x*N*UYJs^Do@6xb@M6Cc}HF8*wP$>7l*5HbnG z%Gg+pS{>O}sasa-R@=e$!n)?ID^b?6)Cxx8dLuIu9N5?tthWe*(ctM9(4qGm^fn#K zj)=kRooW|FWSS$gj(*+WAvDhA>Gyt-!Ub+6GGf6ZSlUZaLb}@OZxG?;cImNg!X49U z??e2oy|dF`_}=JSh;QZ0DB!&Zp;_8e`DUC$A6joAob# z(e}Rhj&)clw)j;ag+v)~7f@5$-P|W;_m_G617ZW+dO8|A_Bv+Xc6^P>YVRgwVA8th zDY0qGahj-XtPxU^RbJGn=NWeLt(-QA8W@V=3qDl@GOojnaw4x5)4&gCf9%^9+BJ+0 zkNCxDbQ}}?a2*hsw?D7Fx|pDFJ8K6Z7aoe(S*xX_=eT3%nmXjKT2BJN=cFl7JYr%2L69+{!1I@v5c#74f7ABi8Ko4Rbi4aV zmsfWOmNM$Xdgzya>C~IK9}5o$LZ{le>Ep8cCS2`w^MJM zgaqjvm{8ApvgTK#tqyI3jH2@ff|29)lv;gHW7&e)bu`2HU5lquxKSZJj%6|H(geP> zRifVOLY)KI)BBqVhJ|h#@WeeW7*^`n#rs3=)h5Q>dgm`ZgA+#d?j4yga13+7R0)OMWg^e`GiY?FsXAH%doN^oSNG6Z32&-v=RJHSUNS z0RLkioZ$!rx{;K~;}Ek+fvT@mBPm>frF!-Cur1F;DttwC{X*<4tTpAdWB-=bCe$VH zoxXQX(bt8>z~$A*v%8H4`0U?NM$!34>2>KjVX+c5fUh4(_x!Z8yD@iPe~+~nh>E}p zeUT{l8*LF}ZWhfv@sk95KZL&jnmeCqZU0u3g7G5zvtTE?Fl;pl+ zl#ep9*NJ=e^8ifLw-6*OIKb$8fM$E`Albkc0N=NUfHT!E+h@H zlh7`2^JG1Glp@LGlB)5f>*t&{mWc4avC_3*ow45_;S-_zOK;+S@Nrj(1Pe(`rSC9| z+s8Y@k4I=Gf~thU{)vlkCl_a9?I_Ca>Y+XU#P;)TdNp>`ViRN-aW3(Zr4uJ|HKZQ8 zls!5mwKyJLsVe?)I++}uqBwiL77zwo^SM?h?43X(#5laeFYsEieo!2IAa#iByAJ%n z1{{+=Oq7H)?$cs#B>BKUlszf-%HF=_`Q)|F8%tu!MwlLR?n|F<3dx1 zZR1c~UR7fw4NckXkx=dF55VemS|n);#^u1YQ`fecH?q1swm2MxF5L1A6**5_XevRI z_0S18+~MiBPb@k)I8OVv4bP@o($2Ov;)TUyd3nls(&glWIkr5L5Ly)zW?niYaO%oV z;h(=jFBVn&)*5IF8V&cjzS4QTm`-^b2W{&q*GtbU zyXzB=J#EcTMO%?qp+Sccv-ypZb2o%R*EQ5$k>a5W+%R>55|G2o)RCgZl{r}RCedk% zvVCDp(AyqcZ>@~TxEE4~o(QupwEE~~C)d4hoV8*tH^s5W7juqWU%X;ZC>s|Xwdy^B zCcT{|oY1~~GkeoI?M>7>8FT^{FSydS4mr;z*&5SU+o`T5)%yFxh{?X;6x(vvRI zohM|#!_9KzMd7)RM8lSZg1fh-exFmPA*MSm?asX<^gyHsGDV_d&pAbKfvmywTVK~m zZ<8Uf*j)@%t5odyv=?!=@XoE(2MP`NtKgp4QPD8*3EJ?P6VsX_&$-9UM~Lp5M;<3) z?%$X8Ft@ehIkeI%Q@oq2f2hMN%kQ6R9B7q~tQQICsOE#801m&((>eD3i^K&?%ZyDYu{IeGVqho!L$zlwYxfGG?cjI)!KQs^YrBPy3m)4yLsz+ zjXLXB_h&|!lJnQV;NSZLii=cT8qjiM9jYsO5fbmcEwUvW>)lo`ZLoI^Qo~b@c^a zn3TE5Tl*9)0B8(|8)B6tit1$UuJq##w$%9)sgYb%PSW1v473T}e^9fT9=KIVHbzMZ zX}hti7#-@7x+eKad|+j^KHZD1#3%A9xL6wZ4e9j+69CqWQC>=Ggc}A&Q&mhd=v*4VU0Ra8n)jDO(Mg+BAesb+(S!0f64fuh_36~)chOE4D*VS?O6G*D;^?!oAS;Y^N_2SZ>vMzL;N=1BK6=UtLPFwm{fmm@hh=ZgzX1|0+>OC>PLCM}4 z-$(L`N9ruAv%xU_Azc$oL8`nZ!QznzWK+F7RS6AcK_AJqeX(FYov)RG@)NS0W|n1- zIWnKg;MNreW(BZB{o_~tBiMB`wB4RDW*4p1L9ru%*({IS!^C|mVm4-y0x7{?Wp-QU z*-e>;zbWfVU$j_=Qqv$;v2((Aa*97=a`hhqzT+MM^o9fAw^iFu`}+Ke+`21h5*)8rlHM>_%Gr2951H z#|fZfu=)Z7vJ%SI?FsD*+I0k4Mv@EqpXAfwmKUfhSe4rIKn1Iw0Ra9zME-l26zmfrxrkQ)jEjmrQ%3-ts0Ug>VH3S{ZG#=23&K>%PA_g)WB3GxJ zrgmy-iN<8c_+xlZ?sUD&FAbt5qEZS@6cY^~Us%xWA(Fg_o=oV2oYk6Xx`f>b_WUtSa8kDIG%>P(eBHjSba*M|%rbgvj z@!k|BhYm&=Xjh@38^P~^s{{hwWFZ7e3u4lJfx&ieE-4Al2;8C9Ri(sH&rj7-YtAl1 zy6362#SyIVcEW|1ELgi4gbQTA|Fq4VyFFzxja*Irv{^qFRM-Rnq6n7+vQ1z4=7I=O%FSFJyyCl~!rGOxKXSZSs0ar_K+(BvkQyU6>a=sD^vY9GiVrD-Y zN&ZTj>90UQ2C+S~`e7v(XJtEAl3%cOg-Jfd2aqKF3-IKZ^kzTYW8@u+p=4N8$f4#m zqCT8z6ZZDKc>K2anH=!&DLszLO!&}z(?`{Q_UmKNRmg6D6tHmI$$O|jFgWwQWeR)x zWZ0hO(RY3XS~x}U2?q!y95xt6jbQ9K%k%PbN43#p1-lnZ928W?n%){0>(JLMo3Cvv zO{qcA+}SOMrW;t#x+n<`m-he<%NB&<= z=Ssw2YaV{1l-8%KkZ5RKt^4M5Z&NbwH z%!#QMIry@u-wZqFl2nMR+6eSjsu#s}1B~JT!3%$h2+JE>$Fp;vvRoj`l#>BC%9gd? zZ>?2nUs5<07DFWK4xp^^*};>?VqH%z_<|qq;Gash_$*%q9vK#MbjNhbNHc1)-U+`}!TRSM){{j^-+1gJz5o%q$c%vU$(g&Q?$>^Z?yxNB zG;B$VCPMOMWi>*QAmm1gTTDNTobx3$)FF8VT}XeOx~9&3Mkf(e#~c@aWZaAyqMgXS zzJTyEj!w9dgrELjA$a%L$b7E0S(fX1>uDN^lg)IRVj;?{H@c;+1j=v-3C|tterdh< zOr9Vjra#HqawEaMnFngnz2CsZ`B@PhK;G(2-B-Mj!_d?61s{`;YvQ z=+GXG+40^g%EJz7>igw}EWFJLfxLTpv1|Q1&l`7NXWfyI!U4c&eLy}eX#h|J#1TL| z0YbV#aY15Gn@h9qpjD5-Guo1qoP z2svJ;k8Hrfp4yeN9tI|{rr+%=sI8siCgZg$;V6LzY;VCc*#>u<0xDxV@6Xr;4i3SC z?%}PHZS!z;V4&rradD{Io_}NmB0fu4c=!I;Uz44u{oU|OKif}l*K2LM*8tsMGd;PO zQfE=rU9^NLoi2xo^W){^J+c{6io7S&K6Xs`cK6a?K2?s!t4#?nh7?4P2ZSGT$b1I* zzAgHA9Yhe9Nb+oK1|Ih-tM2h}SR!!wKPGi8o+Wd}Q73!KMvSR1gRVt+67S+Sd7!FO zQ!kOb)qI3w`e*$`y%XeRyAG|D+40wyMrb;z>d8O|_jxFikA+^SqA zhhWv?Zh~TBvv4+n5Y=o}JYVIBowmD0;9RiS5)t37xH-~QngGg4p>*nz4&o5>qj z7VZG=+%Ws-j1uRLlLE2>>9Iik&Pnlb3fH0Zu&pmJP`ZwHFV`10oZAOCrzj9`8Czt% zQhhwWS%KW!>(ED9ZqEsS%vqX7avvgRY1N2chX-j#jX`~ICeeF)lBEDX$iBCde&-== zF^{_a(Gc8`$mM5}*x7YKuu0s52RffcHj#3T;CyFvCvC=U2dAQNqdsnWJ-a-iy< zF5NOS*jjuE27!uv@V(tJoe~}UUPmM+%EnA3xCQ{M0_Y{fbuK4tfBP(y#Q5!_lj)LQtoOs#l&6K_#eFsGRcL#D! zbp@K2#>j$Ol-MVn*~T|9>5Tj@$dc)#U0`*Uz9bi_u#tbu9g4BUrjWJSlo2-PZ7{x!twOuLNAXX2RZPkjY z^)vMW-Zxg~GuBnQK}msa7hVq`0}u<@Jpd9&iHv~2hny5QAs4_aHDzWd31#oDiRHV? zX7x*dZpOEXh59Yw}kBrjaBcT#7(FfKs3iw zq=Ulm3k&ELrs!W^YjRPwDCZxuy!DW}W*j2Wr{T;Ok}?7->tq9b+B~K+)8+7jp0;kB z*r1X&4uC%p4wI4`J2@)iA_0#c*!@FCy12Q0-GS1V3 zvqUJ8`YFuUMTQf`8D zp=RS8fmbAewW}@fBi9-Lcma+4ZYm|E0)@czcBp32{ctxE;a|}`l?}FF-YpZO9z@s* zrXZWvYP?1p_aZ>BE;*$F7|)Y(vyfbw)Bj6^>6KZRVw7Orsl}8$Tb&-lXM~><-$R55 zT|_z2571cK;0B?+^UHp}o--dD5b>*LO84-Hq&~FVWJ$<<`4aS{oxY_n!}w&mVr2Rl zfSR2|f)#B+L+9D?i;hEYX@nm z@+Ij{&KoPn21FKtEy^m%?UNKX2RcfFP1GP|rtJA=VtT#SvxRxg#rUjb)dk(nWtU+6 zvL0L?+zaiKm3lxUOaEVCfGr&7p~vBgzA*;yD6McOYiOeJU?FRS#qs^+sthgfhgIUs zgYdBN?W5*B@Hq%KoCoI(2g@Vww0nQ=i>lf^5Jm~@+3GbC&{a{dxr1Jxo!2cjW$u^E zZUvjP@8-r9)X*6np|?bA)Y@~F-XUZ24&GHR+UIMzQLV+L=MA*glG!?;ARR^1oS1i; z#(f=$1pN6q*$g$6lwgXYRkU7Dxg~Wp%|gwZFzdig|C0ppe)Nrg3EPc1GLp4o9SGtWPNVTw*q5qVckI*ZV&9-?(%?Sn7X>LCVbMemYf4p%|t6ArCfaCT<9-EjkZ}k;T*t))Ny)VM`hcR8NTgMiox`*} zE6|HpJYKDu7!4p;(IBUFYACdy{o7K#{3pLV5Y7Q#}wiQl(s`Jz0@kT!D7~b9en?J^viA%;-AsY*XU;}A;B!w)^WLZ)oZ%vgA z3@{})_A{|oON(FrOB{Ai0I&Y~j|j_ZY3Brbz|i2pg-vF9YVVtwu_U%x@t;I&6=ACO zv1Z@u!!fpkTbUkOPoI$9BfAN_^|&~oD`9Yfw}b+Qg!KYF4-OorlX0UB}fl zn`ja)Z}++~*gxSW$~MaQ#4_1_UYp_x}<^iRnWZ z;m>p_sjFi-wbd}CuTwg)3-&-HypUz z`kVaRdCROcz{+P~R!W{W$J#I>SV2G=^{r&n7Pf50Th)Q-Jx((gGvd%PJ**XW zw(W_B*RQ+K>^A|s#~3~Xz%(M8yl|3IuSd=+~P8L{Jt2?o9X0J zU@Bs&wEYC*N@}$a2`#EEdXYkQ8A5k{HrODUClh7R?Ttp0O@=;KY+uI+M1f&{1i1RG zMBqar16)TbB?1{AFsui>#I+b*U(eBktU2m&$BMW2O)c=$`=vTfFfFcP zH)Wb}0b?jd%y0$##}h>$l`Od8Tt^+Tk0xJF*xm)ZwIHqBBa7X%Zg09b+I~OLB3s(6 zq5zvrWi#coR-AT*q;$*%q4tm#mkJgKx%F>`_%%NEm?V%Yu#-WA0&R2(;_?*OD|I3% z(iyoZ>6^m5AAV0u`-f|ys%Rjw;xCZ^&H+$f{1ado*D#%r!&K4!h?uk6`1OyhcpH-i z6L2d-O~>ZJ?!MOOOjtfbrTuJ@MtPnBMED4V1K_F4695BZkd!nV0Tm|}-!AOVPnxe| zDPQvkJX9jq5X#A6?)}?>(1gM}otQ9{Bhj<4?~*Sr?L1b&+XHHe$22zIO$)5%vW7lF zF`5Rb{>}pP26@BTX*P{P@QAeYa$vWuULNOgLEgr^Car8m$JLS;Kt=C0{u%H7*#n*& zA7D#POIg(g{JE1O?+KEVOkX2^yfDkl8NhP&Or@Dotm>Os?M1Q~zm`1n6h1-wy2*gGfHIU8J zam}PxW~h{neS0tUhiNXI8rXk%2T7R)*f_h>qsC$I8Y2yNB@@iEqdKL!T}wWTiC(1n z__*n+MSiR$;&o|ELrk#=*tu1uG#0VJ#e51|JegSv4@fj%??9soc&F&mIF zr77SoELDlD7Kt{ciHmBb9_clGzId&e>P^XKMy&*Oi7ly9L5g`dy7`Tqi-x57IoF{s z2M$ig-xl;Y*IHGE2eT!*nbcX9Y1e8v1-UP`P0V(InJL$lEUT~2cz#Tuo&NT&GLc4C zD(#O*q`1p=kx1cj_>h6?!&5|En`_C`9#s8QcCw=w zhn%@-2=2c$uNxJ0}Z@p+;l^qC^>*>77iS4 zW>WfRM)Fmz-mp%@B3i<-^!)u=)6-3x#vs>&NwhgisdWKK04!8^pBywUp1>F>*(WbO z-Fa`plj}d0hd5`pw0Bn+&6MR!`6yh+#ATR;XHvtarR&?rgJ^$EuUV;s#*8e@M zN-99?HM>x_l3^DLE4XmBd2oDee>mXaM&}sdam=jr8Su?0Jpny_L_!KwN5Eyd2TB92 ztMFk}Kv-J;V9P8CzW|Aiy%$4(d$#zl;FeEH%J!Yit%_gMN65>GgW3vIe_+9EnNI6K zxh_V>H5wwvIRqH%{~{*(e|JcC=r|Gi182Gtt`{WxtFY?6=c9Em|Fq(T>q%=E*e?hB zNm~2Ie{!2ju|GQ{9E$6Fos zW#!yeM6)Tr2VoiY#kG(2>uY^L6xRvpac;)37)t$9?uD5IRE{V-adpjGzAu3}&}7R_ zn)fXKaTotoRm6(WY1QzZmsiv6+0OhKF9%`!1vTgo?!Ds40>b>j&IZUL$^XOLe|GTm zJX#OcmW0pVFMAGZMV+q$e)D^$$B=95Pv890i7>YyA-|xcJM*iB^2^T3PY9aOY)dZF z)39!@!u`t`i5CezIJh5yDiB{-fZ8!Y^&S9PhzzIza?X5IPb-kNECw4B(aNY_-d0Im z##+!q&_ASD{egAl-qvQJJ=?S5K5H}FLn~{oV51?8z*30jMj{r&!|>NpO|oeLrbEEN^Xc8$Wt^=#_TW4gvrb6h~o{TT(?9KZFFWby~$6 zWvjV2>E5_vCL4`V-K>kXgLv|9UgF#fC%N}e0Sg9}dvOFHgY%hqkN zwcRAMmZY{_fBt(E;Mxe$2}FD!+*whTq?`mDRHwTZTV}6D9X^(?mB{Rs*w--I^OyFUj3mGppo7hfp7`vN%=>C7O%hDAb^sOYhg~Sz5{y8{@l$KYjjf0fA@+w(fGeM|L4cTbFAiLHIs3LRn%1 zTXP~bS^xCH;bGDs(cqWYQ)6-N=+j(f*2_l zz1!9pEK=Bv_l^$Flka49?Ly@to!j`IZb~D}s<_DUVz70+`*PqOINKbd)k?d1pgfP? z?hGQmhX>S&@_hr+xT@s!1n_k3vEl-=tk}Mz=-TX((HkRctFfMt<%`j{ zxFu0^%#}E~sJ?1ZYmv~+5UriHd|k7J{$Gynm>=H#aapyG#td949InP)cKXmgZ~M3P z>Ya2dc5piLOcN7YYvV}s!I@7fIjWBE%wBD+T?DuR2*9v1z#EgAzIb?2eHb)=(DiS2 zet%W|jUE8cCRft{o@h0VCk(UzJfu%!=le>`w%PZF7vJ8iZN8@Uy!UI{>+~*o+vf`i zKlIdWkk$*^l!BCjZ~fY@X5M&Aq47#a%j(a0fK$~VxM~lP#kWr-sSm>h=OsD^{U!fe zhbvA*57I6k4eyIX@q;dI0(Q0I(#?~5*DTE`*+ZNt@2bZ?)P4Hm;PpCPvvWL?+nnX& zm(pxLpnD*7EvNzrBm;dyzvwOLX|!yswr-{q?|*a-tkyN1Cu8V1xBV7Re&ReP2@soD zQPDkNofM&th83^XL}Wh6AsbbLI{wG-I-swwZI`>`?v=R~2VLL~%$SF{pL|LCdw$@< z-M<^G?3gqM*Xlcz6s;VH&SZWC63R=8>+ z%qal0aaN8T=S1jfkSJ`sNx;}aAjrQ=G!k07JMb;;DK(Jv&wMTW++Z8XSt^zn7||Nv zHLR&p8YY*Lk^gtRg6r9|keZQ7KDl}{V0h&69ji|h5N3DM{GYRfa4=zvr@uifwaFOn zeef=Dt25BDQwI{E@HWrY6+ct@zg_Vzs84zh{pLl*7CaWKd|0j)d&vTPEwa*pnt&`( zPRDOf%4>&KOt{QXCa)##hCO#eHfZ7dU)%>4@5$R6J%B&&T8BTYW8D@(MYTmLC>Z9+ zH2eJha(vUX#6JC)eXp%C@xqZ=&EFu3yVfUze_MeMoJ~nu1Sx>f|5Gfo9`vm1CWuyU zP13{_HCcBbh(`RkBY@(6;Jwb(>>LYVrUI4na7ge7K71g^`(xQ$Vbe__0IX6uDQ(cG z4>mQ}E9l(Jpn}$5#s>rx*`v6$x?n$PSQFRByQ=1+0b$6Kl79T}SI12oc~(zW+5A!& z7LlwMAu1bN3g4WQ__rDO6!%=B(>b5x8f5%|7{+S`qD|g5I(u^MvZgsD(YsUr$~5{15Ij6XOXwZZ zMIRgNi|tDJq=7tso<2WF+&OLF&mKI@i6d5*S9rz*Owa%O=f%6j-=IPfWfiYpm0*`0 z@l(rcv0 zMGrF8nv$_UB=F1Q03>c4ymTpsH^90$km(4N##97S9&xT+!^OqNyNP!l_XY?bD1QmU zBfd`Z=mseR5B@zedTw56MyZ#ovy1tP0vA1?FN=$%PK z$?s{Gh=N6Q^pI*lE{|PTk?7d*U&B z_kHiu{{~$|q%07r^Q!Q6#3oGnvENA*E6hLAtacnA_BNF@HB{tbTE%D&G;5jA=ijpy z$V;&Ot=5$D66{hN6HK-@;MAC=X!{q%NWK_xdik->30%AP+GorWecEyCl>kXH> zZ#|Gk?Twx6Y(FmMymqa393BtS9)-#avy|&R+}o|V0G@lr$XfGvUAmHbD80?V3sK&7 zeg}Hj8QzN}T(km|xnTPpV>|T&E$S(V9t<}9C}QLCafGO%IbT56w~?)ZgO$umDd(2t z?#7yt0?xkP-XQWmbgJz`mC2|A+8(C{LukP|;WX#a#q~V80Fs{$X8|-g75BwU)ERv!afc z$Y!i~LEcvE^Xy+kOu>D2?sfJzvq;3BaeaZ#a^l`r-ri8mlF{KX^&PQmh?r(cz$mNT zaC%vN#9|y|IpYIn9`l7VX%Y~LQ9qg@OA~0{L^?QPBTz1zHd2Zht$;12_qvweHsmf& z-j+EWf~EH)6_hE=t$%7&T?kn|2?!Y|=V-{_tiQ|F!&5FBk{Mj5W%2s%RMKw{YG0%+ zc>7&-bzNxgrthqA==ccI$Vt2?*33-z=&~W3j#6D$X0Gsb(?Ua_Iwos_Mt6fr-YDdK zT{WL%6{`1EQ^x(!3C|}jx3Ei0oPEu*!3rpXfk8r>33Kim&w8`@!&KGFpvWnk`)5Kk z_5F__E3ciIV-(-+$Dr7}(ntgbY&7KW)O>+D5XU@75=`MpryVvfl@Q)!=cMyBy4|WD+1% z#CYXs9T)F^mLh6_C;N(=))S17*ep` zJ|5TEIx~14YpYwd0#cJ*lQU-U6%@;fcqhRsi+P=CB_0F348+H{KLx+{46v>56`g%C z{bY)GaY0R0PV;PmGh949Qhd%#MNtlHS_`w5uzq%bHNi60vOl$U(|E4?ATe>dI@06w z0$h`ZMVMl>cCIExG2EPNxS!4*2q5g?m__dfoA39ykf1oXqdAd1{AU2Hhhkg;S;a_e z&qD`kN_!@dtWB|zR^X`a5VEE`f=K?>%TJYYDj+`nn$gUvkTPtCLP@GkBu!;eM8|li zisCV)dob?J35AbT?ewEuGft?o9pWpb&B`n~4HgXk@R1VzV)@GNhQh2H0v<>+*A&MAPhdW;sdvY+tb?qElx>d>K zG09m()~u6;Lo0?hm$r z9+}66PE{+$nNjXA175(chp(i`zgDFvwo)}_m{9YNj}JA#d%w!CH)IPjxIOYE`esp8 z64}V9zYNZHtwvM7s4PRUUkGo$2|rx-FGcC!)T%L+&G&R?Die=SYB%@VvzQU7b#z^S4HNQ zbj2#v!JpY9wklkcFPwag6T`m&U{HIB@!#@H>5x2ynZ# zf|v5dvoeMK(^l_1Q^Ji8`_iw^^j8tL*sn60?0X zxwnYdDA*fxzgy^Ml~sjf*WCG6Urufu9Yc41^;u8qFkW*-}2 zArla>&$&Uu_%>^pr8b4y@^eT$mMnyGevJPNi9tenx$y2mvc!hM%;V`P236kaF38=| z4athXT^Zd?-hKwJx6f34uwC?RIIF4xD;}vwG~z^8p(4I<^VU81_p>#l2*pAzllFQg zhQMjrkS#C{>ALe>&K)m%<3Kn1Ds0Z8rTp~qOSnR(74fvV_L;zxrS_}6G~b1V;kEiQ zh?Q-@o2Jp?kfS=L@D1#M@hm3Z2mzZ+r$FdVSXED89CE}?v;Ck`Z@>mO+aK4F3MEw{xUKphy1FbL70cnW@{ ziM2@|mAB)Z=!%>=!TDJ()-8dZ7XnSr7^R3gwW`LkEmP*#Qh@{&miYw5Mqz3J*P{>B z4lgUk-YIk+$3i`YD#EeZIpC#45 zfBz@vWin+qA}IP`7P5@k((T;hueEA3Deg7{`?0@7G{3UMdRse3-^#VSr6y~iO1Lr4 z`6j~b4F#ghgwmmgL84b?3c=s?uI}sjA)-%N^Gia^N{i*}_=ILj-xlQ>XK1d26P{3A zKpDxm`bO$9g!A|vWm8E|8)QA~`ITdk_9tJ_3PqBn>m+C`l;rz?YECf5|lNd|adBs5xp7 zv%d@BtRGyjbNYlqAd&KnV*=v3TV{9?Ux(K%?Ky|X-!k#Srd_@YhPK(pJO(Gcg_UMl zkRE3xD4JD&vP3{%Z6#p)wkgmsx!`T3@}hY6*tf?k{4qDi`7bX@&9*1S509%|o|rK` zlYglPHvSmn_7maU>gIu%wVS#da@tGjf zz5$UfnocA?uz33IT#(|#W$%ch?3nbqHQ7mE2TF0oIwJ+cDW2r+pvMQb+Al-R&b6g+ zaHGuR%4cFIhAk*5CrF`80ZhpsL#A1ulNEfJ+9eD;JqI*+cN{9(({{H zx<#yfF-GFO0fTqppi=SI`A4l{#tntm>&DPQuIcLAt%d7V%!~~c2AgFq*zJNl5Bil= zQd`&HZxwMySiCEK!Bt!u7e-X%$Js{V%z{;49caD;HlyIvz9Z{~zbt^<;l-N#b$+2T zBr>MI%LXh!n>JG2%*7fyAqP}=b>r*I7HH_zO6bTp6XPydp=J+~D=a>eV>Lr=Kqb)Q z!^%g`tvRZdzf6S)B0|R#B2j0=RH07JftCdy5*12q&DA&yG|3zh61@?x>0msQa z50j8&aAkUH z9HF6@Q>@DNlw#lYc)jF>-6@qx;0k(Nm~iqkde~NLS|80kTJ&>#8P`Q=?9TQfLPDiIjN%OxVV6AvL`5~gWAoJ6GNlMs*i6WX> zsQFZdSJZXc3$KY%aPqzHN4mFWP=V*aK{PJfL&^P=Ih9iaw^eGAUKlXR^NB*x31**_ z575dsHsY0$t^umAI5i&-6VF@AF22OJTKQ`>VO_rsb1k2#m%1**NDOt_X-``mSA8zc zj908pSXj`Rj6j77uKG;&%f3C?wG7^S*~g4r-6+r8AbinSaD-pZ@yL#eq~pE5<--an z%40E*-p_A$%Z8<*CUAiQ#S)nd$=CkwLf0|@ZphBjCF_DDiMg7&*{HG%t%lC7R%>B@ zr8-_V=Q@}aF*&dFaBGmz3MWHU&ce~FvJ@ED`BBZ5>ug>C# zbq_iZhEJ)v7%kIXse zwJVT{NR+t~^bIfT%XafeWn(e?l`y1^^%kW@d820GGi=L!j>9vd683bRS-o}cuG=9q z#}p!p`ZAH!ZRnJx6AhtbcOLnF%cuqHJz9Xrz$ zmX^s+zxt`e9veF+?3h#>AM>8^=X{EpH8Z`p^ngBwEBWTH1R$X{;OMrc-)5cojoVHJ z{Y97xPC7na*S@2;j1_MhOrhEo|F6xVJ+KAyBbuHqna{njE)r^a8)mtM=TLh`NL6*o zNAWViKJgA6Jy^9&MDFFFNnPxyUr^lP3w>N_WqkU*-3HA)N%ljG@dRP>?K2aP%M7Z# z0sh6;sW#bCsK2*49jvkyV)~ z?RE&Z@o-DdwuzV81J=fo+HbQLBdwT!>(e%^`g= znwsOemQAl<>qUmX`QTpNTln^$0drEmGxd$D3`^JRBJKxg!j7< zh_`t3PF18OnXP5k+VOCYgLrEBOc3Xz2*w%gC#Zxgr9w@)Dm}{vsbi@~7iVEfML3w@ ziLF>wf6TiLiiVGmsmuXv9WJ~C3y8JDDKnZq-tqEipsI2?nDWV;tn}xWVvx^%3YJ5& ziam&$B2})X7}2Pj>QAu5Z&6HzG*Fuib5r8caIqI{5)@V59ZvEn-BX{7$K;>IWxpSV zXqocp%JpYw2TGXjp}&s4Rv)v;X8o=pD=TZ!^~y2yiSf;t*mv5}%;$Rr5v>TE+KBB7 z-EHR$e~mMCx!_ayN@|{p%VSmQN=oYM6P@xqdCk@C+k!ck zV>@U^UMSXXab(vaE}Wloj!gYT`fi(zF^#8L%8_88l|o#0_K_Ccvf_2oo0kqzUh7!N0)HW zvvCe||0CnQ4@mK|LJ4!uix{nKNSS4Re&X9A&dsBnrXOvHjY3h{rGh!tWj{tXUUCRg z9_W1@QQSbl_4o-ui8MoItp8vUrJ;j1+A_!;pplXB}kJ5i4=J~9TJ1UDn&skT))B5S7$KppZ0VK=Yg z1L?DOZvOZ|k|+G+OFS#)mGimi{RCElNIB#r;Yh_(;_q&STT}Cn? z(FTkb32h?Zq~5epEtQ?A5Ts72XJX<@lPnWm>UQ@RHj#&d&rY;0G_e~)9BHX3_BrjV zQNEtWSvz+2-raaFA=1)A?Iq>apf@XLXKWea)u8QaDf%w%8f`+-W$j#8-)wJdu!iy& zbi0_vwYICOB<-nef?4e>FYh$#OH;9;)D}^Fr(#(lm9*|b47dmIt9)%L?L zQeE{Vc8R9OBfPNa`(AE!8HLrm=>#p9_)OhmN z)3wyPCd@l(#CvY65r!+LMs>|E@!qkK(?YrkIj=8P{FL3ul17!?+s*_JB8`QsO7=F~ z5JF|R)+VvINUSY{RjO*%+QSob5Q=9)hX>q-J>&|~`$^kyI41jq@~BT zKz;!k1XbKd3%i){T%K!o0m=hb_c2QX3!BGNbYKz`f>xC&4(QY}fRd}BRz7RyGI36F z>`QK~+!0=W|xtohO@5wp*zpv(re_Zm(@%zn)E%VDZCmJ?@_~y`|jAE}LtpMQRLl zUfX6_n!v{t)7k3D1Q!;Kz8IR$BPrP$YPL65aPN*ddsfU%v&4OmYK<<~uBUqhkS?Xx zBU6Uj%HGOO_Mg+&`t{FySiF^AOSaJTn4TL*V@J7}tp3nU8XL~2vCuA~v%I-Ut6u9_ z@1FkJ*SFc|i${k{nt5}(-_{#5br&NV^SA3v8FmL(KjU>D0AE*2jO+SehU-(hcgGeplVgi}Rk*3#L_c@?e9leCL+V%BY~ zbgKyDw1hsHsaZ>BWi`XOisMjyax_gZSMXZv5yK!`8J+=o)mFMNSei+1uHoukKHhys zzl_ zebzc=p`zd0#}=U# z^_0zeK=pK(&rs=~j`imDpH7KAc=Z9A(ySm((VJL~H`C$S1W1;$2(`<#)Giu1ZRTK_ zeWlbF631rniyZ;4mgZ1VEp=!T&Kr0W=3O+20F%QQw3_3&I3H(o0k@UWxHgyo$o#H^ z3M4W)$FvLSyElsePLocYzne2<_xQa-df#%kjP=N05RreE*G!Fl4ZK-(Dt?agGV1qRw%)Nc8R zB;3Jin7bAyCRU7}vO=Sb4te$4!tzNTF^w-oo@>jl^PskuR=Lx5TH9L-Y2nl$yp|@C z^5JeR@2!1~?pdXsq>}#tP>hsoi7Q5oUVBV)T*m`j^$a?7k+XzYBv)NlmKvYgrLFun zx}xhrovv&nxYRXm9>OF|B3pT<)b*RFB%Lmr@@ttd5wE+@{ggVb-k*2uazSUZ5hO-J z#ueHw8|7Iaw$C!#z}E0AYd)bp>^D<9Ya{A9)!gbJnqA13We^|+t#vtU@!5hLt6g78 zu^G2MjnVg-o*kQHdUr%<&^@Y2yw7hd*d)+t==Z6pbzX&O9?0*YmQ81?UVTF4bjvo1 zO;1$6)g)7Sav8Ta-GhN)V|RUV6fj0h==x&mma2sAo8VsHJ^uh8R4Ugl#khd%8jt{8q`c}syj%cd@2^?0Fd#c-(_8Wl{TOOdkwA(G!#Pz7!&jfLa zT_L%>yVE8Dd)Efo>i2gk41UcSo@a|qm|jVAC7-_V~mJ+eBajB;Am=N-S#aLFKXaTsmH9%fRfirxM3Qee{@@to5)2Cl9! z%qilY=#DDl&$3%IRaEjTirfVj8T!&T8m#5P7&W3?i=93ro_+rSNLKrAEG{dW;~(5p zJAhG(W9jAUUq7v99^^JtJ19glHKp;gSSEmNo_oo?n=85)=9=nBOpN#`a`B+qklbux zxUkzhgq-fcp5!PI&h(qiR>TKpj%6E!k*g}Fa~q~qq?5HIZxa+|QHjvqDWSIvf0<+| zz>}Kp^1HlMyYdvXxJQq6;Jx65Q+CeNw;K-T3OHPvi?pnJk(RA5QjbQG3y7hD?rD13 z2YV^ca^_u6s&Dlf;+|W4#i{H1t@>Kq-O3Chkp?+xitb3eq978xPk>gm4IbxGn1OG) zEiXp1(vbEO$M9})#&@gr&amO-z?*N{4cYZ{P|m+=`0ri89GW`H-#sfTlaBY<8^Gj;B47F-44v4Ss23x`^s1tE*XkfVqcJS)zva2-UZClBT?p?NSJ1SYnPC zqs-THHfJ;4sC}Dl(pQc|Woo#Cxq0n!L9*V@Z*-nE7baPwE#MHi#_`2P zCki(4&ea@L@qFJ(oeH-Z0o>6hq=z}+*JVMI3BszxyNzlSZj_Pa+0PY*G!yE1p_&4r z9xf}T<=fwYpMlr*{mm-gYqKvWx zSogQIw(ZN{Xy)4-yE2t5@=xY?t;fo|Zb|d4rAMCu*+Br-NTrdKFb9uwKH^Bo!GXc= z$&=#1w8W@UisP`1(J4SvP?xiDGy)aaXYhbKY#wR*L7rB^!t%a;VR_nV$p$>bZ#~4R z6})WEqVzo7$mi5wYQ+ptMzO?!SKzk_#;ou1%p}t-oL-1s#74yfYX;YJ5Zl?TLgnI? zXLzl|G4wG10FKA_?_2)>1U&l3C(e#OhJq5MyoS-WF&V2n$*iYYVO7l9)veXL2}F$Y zMYIO<8?f12idH+pCa#~irb3a(yQ&>Ty_C_(Ch24e6Aszt#_2?}xE>oTgM}Z@6A5EO zj1(hqXvP3?N1rmc2b!K7^NN-;lZ@5^=bk|Dk&1K(YIbQ9t~@t3jc*&uUtpP{!^+VbFPVVZGQX-5fD@P`W_n_Va z3WHi_NNTsy$8jM`IBz;K+Sz!&k(%<+ttDh9HMzF!&lsVw5Ex>f;fUCt82$z;6@q@1 zvA-(t`mLteSA$m4Bgr2W{UxUA8Mu+9S*7S$cW#GJaZ_{^>m+J56l${QtGjtJ_h?cM zjkW}}#mlj?)2y`g+ih%-kA`{3uA#KK(KSh;hItYs>K%1BU1ID7y}P@ZNq0PxRqtd7 zf<&RZD@GRZevpv}m+{W9v^QET?dmx7F4~bWrJ3W-=3Eh+85%|#-HkzOJj(2maqKS8 z1{13eD%~w7P>%h#Xhpg@M|6`Tqeje*q%=4#xhEU)RF%NB-xEjleJR2TRWNGOGul)X ziI739nEwEG8L1b}q>DM@H6$4GqP&1dFOMTrp&~`Azvci`iL_ICg=U~~4nf5=^h?3U zdPiP26aJ2K$GvcZNGC&1yIF^*U|^pn#!fttfWsgf@SOSJ=gZVvDx($Aoj8pD0Hp5K zWld*Wg48niSGjT2&^Zf+b9B+(A(6(~mIjaE0ZJ=vY$xeKWIjTpvAC3O2uS@IfVns# z!f~7~`g$RAA<5EsGtui!fQKVWbMmRVl1kiQ|Ipyx8zC`wlnIcj4dG%?Rk=n_Y z2Cn5>iC$jVPgFyl*v&-~&oJkm7fx>202+ePVhc+U;+`Srig^D3^HN9Wjwr7_btc^X zF)lKGlx5scG)7AbxwPH`EnKKvigFDDoYw8TX{7w9%E#+lnEh*^^jRPcsLq>y2D@qO zdbXhtm191zR~Rd`NIY>;LhCH5tuAgBZHHlIB*DL&_d% zY1pVt@nqfAFt;@|s8ju&3j2V1$Ea~gyZ-0RX%@l>q`woP@c$H*iUc=P3w)E zXt&jIXLo4(XSJ3lv;P1$ZAZ-hJ8_?9p97ol7V_u;>w{@yxzq-oO6=VdtH@mZ#D*)z z2dPN%V%U;2Unvy&?fa52h%VsZ1|S^Ovb!-=T-KAKH;aFX?Cn+*i5Gy2uw0CRlFI~&!M+)DCIpxN3oOC`_?C6=ve1Q>}GS4eia7k5tko9@b1~y5en6w{^3cRs-e7IbLUzG(7VyJ>38lwj$j@Ltwtji)cMD`Z>4HiX}$|7 zq*?7QEn95xylq1nB0D+q6Ec9418cNd#YJX`a$ zcOgK(?Z>Omt`#MoSTht&UwX6tV(yC^mUtoz#^v9E~X^3q*nI- z0GQSZpr(>Dj%t1+VM>L(sUscX8&^%}+GVAcrPMay&+t0;_$pB1fdDYBNu#`YGny&1 zkWVeKYxtF-nz<;R!24;ZfwJoqM%W|b%< zBsrvlgd~ws#k8rdF%XfFQeQ2Go?bT@zq*q8>Pe+JbWOkBqR*XZm)_F{Y1_y58|_m} z4%@7>rq{#sSC9i+YjbJMfWbE4QuKkq*s>-!{o8%wY}bqT}fx|Z%; zAEtEeKG>Mw(dLg0#FsjR$R4$uxUA#cFdi$Iwec)(2Ftts1}WFW;CVFZ$9z0XQ`$`i zH=_?-if(mx`8r-M?aACIMYqbafxzT|x%{*J>RD8C!Kvk0{5^q(vx{+da2EdnP}5^# zkwUY{cd5?u6^_m*hqGKlg|Mh!$2m;!N9MYf2?tZ-s<<9Pf))%=9oNs~(n-(8Wn%9VNItnOacc;r)2NV7(gA@Kdfuk5Vip3>$r z7JA%A)YnXO>*}({bZ$1ph>@bAC=2-SRN4D(i**<^BJCoP$}nMFaQ*0Xxj@SF1_p`1 zt$4K4GLgoQZf#^z2ai#T7kMOwl!ms1??+1N9X;T+jD_M<*u+#Ym&qfGO{VVAvByck zs|M^=2iA|$q(7IO(%^kfUECZWF;`lIu*P#?UVosSv z-mDbd+-dO0#aTsPv@^^a9OJe{Ll`7gt+{?Nn$a{wMMs@HP}=t6#}%qT8aW2ub!ZG1 z8@`i5s{5DZwjf~UvNy8iRDa9%@+jn#BQ0 z2;=B`eqJ0BgXu%-LAj_OmFA)=v~f`{H5IvIpjhbkOy~qseey#v7>r07&$-psRG;u$z5Rw40*(UDVrjOW8FY zD$edz0#C~-}#hgj)NHT>V9{>P_YR;&B?apKvN-tW(DyglDG}W3^qQ)ZG1QSNw%s zISNPC=$6k13ktL4g()65YqmYIfFAcVsvXb7=^3<%uJWH!6-qTa7^vV< zN}fxYoUel3H4U2Z;}v@b^?X*fWxX5)<-sw!c~lL9iqYJy^^woP>#ado*sTXOoQ=kj zfJSewaDuypmL%{;(z8aBlZvwW0~&)U;!U+>axF^B3hs#7bndAOyI3HTQ?Y{5a*_PA z+S|XEoEFiCtYU3Y|^`@3C zw8yzY<6u;fYoTs?@M?N%ky<$rbll0!Ufp+Od=ZOZTtua3dd@{HHYM35p&ppP}`{2{;vOq(&DsgO8>} zuWs9;H3jrDuvq30PpP%ktFq=6K*;FX@l(j*Ii@_(=Asxhrxbjs{$8&<)GPg}**vP> zD~h)`=YdnqcKMKG9x=^o^NV-}X(cXAB9^7MbB-x(ZkFbbI!RxlWwae?{vy7ex3T*KAtdgm|Qv%_QOWBR7?4nur#D z&*fILEc#@ym~mmp-g-tl=<^n;L?nmF%epP8ExmuS3G?|{KY;< z;;v5W)AgI{WbHGFp%dvhQ5@SeFQ^1VwFd{!)SvH5Ox$9;!REfAqFmGv)DdE$4%-Usq{-Y zKG||U;nj`1s5L)xMA!7qP8cGJZL|JA);eguv5CU?{Hvz*Z_@faGZX$RS?R>OZ)>&U zOAQX@`Itsj8?K+c)AH=qrfQMfq|jWjN{r&`y&LX{&TvOHx1TXegN6%Gow&^-o-;y0 z^*n~jraAoShxg4-9_~P#oNpU}2KbBdBq+Sa4?@)z>0Gg!2;(+qa#BfHb|Lw|E5rc(1<^p2=N*$O!6 z>pP7S2@>w}D|2-B2l7vk)UCT+)eo;oy0fy>ZEi1Y{iX|TUG-k9vApcZ0{%ZNNi=U1 ziV0l+H{{Zr!$Ag-XjlOj-!)Fw}bePUD z&up@1io3VRBAHL+Kyyeq{ODHSE-E$0okn*3F-bqu>XUsb2;(%Z{f-Ian!A{JW~X3k z1{voS)6f1bNInOaNe*4f`Y+|kb6S57p1&;5bdI#0Dh4f1^6RnvV*K7~04 zGFj=`rL4BeJTnJ}SGzJc0l~Pm&Sl%hjgNZagqg;lbrk*h0R@}`lg%pNn&Ot1&oqDE zl6lFdBaYmP0qb;s7HM>HmNPqZrg?$@lk2ZRIFM^zrarL#rwB>b)jQ4Mu4K z{gotbCPIv!!=ELqU}2aRS^yDPtX4Sluc4`%0;N3qk-V~M&QN2)#ZH-TI-c9>UA6|4 z9%wI@0E_K`qZ)=yw$@tw_Eh7pl)hwE&RmQATh_alWj?K zux=n?w0Wn8UV(^ZjGPWd41a1|cxVj$C}NE{r)nge(_%PHRt##myvZyB|{kBm04XIHUdj zM<1ONQn&Z1O#}U@Pxq^7b`Ud2JBgp9iHzo?w)4QQ)(EYK%g%`Bn)3Q)oS*MY$J3af z`_v}_l;V$ziZ;emfGXEVa;L-3=nJ<$A+0k>md@H|e-GU6PH!%cyQKA{{4hgk*8b4; ztJL>9W|HRK-AijQ^3hq{uAS5nUEMvL(Y?LTNn%@^|qo?rY?di>~(*!;U${IS`{ zI5-V%F@iBy5b#@X7Z#>jF^(XySdcC#z)%{1n3x>Zjl!b%PAjUeM7HuV0*yp)PHHS> zx?}A%OEK@?YPLFXCgO0lKVNBxSVwO&*X8(?BO6yjpB(-RTz}{azVKKm^^B!4V zIL#dWMPrjk@}tL{5Bya5qIs;)V@S*o6>D+86~iqNw10V5gIhl#Oqd*sBR@>jA<1u` z9CJ~chs!yjF-W=Mn(hrcBP@x$L+Jq^z+EWgLF-$6UT(yeor8CDvSv8GU%0o*)iKPn zA5iseBN-LZRtXJ_%=5mGIGQk;rz3H77kj%wObnub*%VAqA~wYYg^yMH${(d4x>IP;=0^x+ionppC3 zPcX(n^Wj%NOwe7wO1MKm7^TtDL-nmYO1ibVhIj$bpWLTyuujy+B%gEq1N83h$QQi@ zqCq~6m)eteVmhXiY`FHAQDy2a9k(Hycuhva?(*{1-OE=^NBTRfHA@gMpO0Th8lvGq zG30=1-yE9F7s2Nhb~BSl9M|PWjucdqb4SI;l|-X(0;565;*u{f`MY0CS71}dF_Y&i zS4^SIy+PqMMJO1|oc`vy+-wz~kx>ha^;7<34=SN4w9;J7C!Q)}N(k z9vXFu#vl}ZuiUTB+Y94I+zvvOt3IT;O&$$7P6Sty$&JmLj&(o_0?pGpRn3~+-d+q` zn9Lo08+|_>xN$74k1KzWR5<+Wc>~Ld9~69G)2E-Sam_KNKTPnr2N>cI1w=48sD}z^ zKr~18tDXVHOE$*j)c0r%Vcvx7#*}Bp{I|M=g_v^lDQ!cjCb`_PeVlJ0Y~kV+ zk*lF?dseq|dzV)+T0-*5c)PxRN<%C8YOk0r#?$I5Kn8%_fyEJuwZ3R@ui}j)Nmq1i zD>cv7fgZ0hUrHnWs%kVVAMamEP=C3oiC@m6f1#l#1IoA{oYvZ8#yGCY=DRu01r)|O zrSd%RhM+kk=~ksOwQs4|z^H;u$nMfHb~!(C)*EhjX?dDHiUQgvvw*?0k((&xlW8>D$ zsI1Izy+g0uU*7g1%EJSQZDZ#rSt@Pp@C^mcI{j)j$S2OE9wW_SqLtxb$Z&1%qnn5D zzce`dQ8X}cJx%@UamST6pA;wx#eRA6Ry41iR5D}FnvP81`BDtg#swf0ss8looC?{= z{{WP5e5yHdj%(VO4?0<87cokwkV61Rm)yFAwrF~(_w2~tzEz}3zT0AfYF0DA z-*0JR^F$LgOY0E;u3`L%c<&i@Qu7dcVM$Bit}{cEN;s}?-&#}86dZtZDjSfyYq`6c zR@`uDIrB7da0sSM56JD$kf4WkELp`vZIRAuAKgdyKB#TF2Bv*idKI*BM~3Jf)|joj6?T z^IkgTddb;mMcrCt!sAc0VVuY2c&LsBYdlnps&PPqY8NLJb8p;JjAnT8$CW?UiOHaG z^rU=|O5hqtA5(%Hk~kD!gOW3K;?ETxm-ZOXk%{;AXn}On_YDoacJOhvpYi@Y+rHC>5=h@HYQQCcY#8Howc>#~P^?Aon zU)R>7J6t`RMOlc-p^_GxQkF>G(T94jI^Oo%rS$7)c6(i=>cX!S(FtL)=^M>nIVaO5 zj%eD~Skc);`aJ0+)z?|-sQaw0j9mv0vuPIvkclja-A-_|cRn3{q6Y8-n#sjqsF<;bTtE2w>#w zz1iH1Cue z)OV0Wa~?LvY4{a0Qn>#Ba|GBR8dmVsm?QJ6t8n|c0&!`d(L9UbPFVfcCiQIcx0ldI8_I8qd_OTi|R-AwS6)W^U zpZ@^Zp{3a`J*rDPSpHZNhaYw8w#J2ug9d1U#wCqiWi}!q_PlIATs zLM7?Wu(OG+{{Tl__M+&%s=8Ru=(k1FJr^GX>biz2P15vz0v_F!szY6DZEp0NsOBCn zkd{%Sg_8n1D~R)s<|_X35;h6B6YsvYj;y&OHFYpVI&VIE$z(w&_SZkik zZEqAu5`G&u;%k!yxja)>d`%}c9 z`DhU5iZKD@UM0;550*`L+ng>>e>L3)G#DHl0Y@40;fTjH$HV7ZqwI~1KP1;1t9C!z zqpaTQ^xTkpRn&UFX&TB0!~0sSn_#J36>uDyoMKk-W{6$s!8Iaa<84Xd?T|sJ&iczQ z(`{pneF~o{D@-VlcNL1qtP&|@BBHs+naxWeG{-)>JGty`BDlAZq?!)9Z?0PJTqOSh zdh6r=00)3po(o@Dfx9}U;-BLfn&`a>+ABCUTh;DP)1v)oN)MGt*~sA1E0g=qHLY6D zOO2W263we?Gu{iQmRy?|(_Dfpd$}``{b11^WyM@|i^xV9t5Cjs+n15tk@#)({kEM0PjMhs)o-qK zo0XP9;gMv8EuF?{Sjoe&!pyj zAk?FpX278@K6tA+{{XlY7_!uj&N-=@H7TOwpREQIHn7Ghu6}^l-^kZ-mV}2CCIcDs zHyly8=B2v|8?@*R@CEF%ROpX1u zm`u7}oieu@Tk@^A^RAh>irYrKX&V)PtX`8{A{s9-zLuO+Az!43fLHSmv`u zkKww8v1O+z4KFH@EM)HyBGH|_rbAg|U9OaB14w4FqoAOP1Hj{5r zZ1oy6)qi0f+-$5WJDDs9itjBG$gaDQ!CBmJD4uF3#am0^rt-#Warp|FF@c(O7;X(b zh`GVVUF$JJmGd_moyEtSVzZx)mop;m4tAHx2NVLexnOCA3H2rA%6Up?cCK3l2;I@6 zVyDeqtt)~kE_3CQKPn$uJkj@$!sr=xYfhhe^Wzoi4k7H;3}%cyv~kG)0BHMTl5&>O z+jiAgpbU2!719VmuB5Qa_o3#lC3MbLmwnz;ePXuJ7^1{mTBxiLd9EZ@&&|>IdVQ-& zG}2;Sf3BFLph}QOo9(+*ZWZ1)jf$|rq?aCb<~%s2$Dh=% zm*hvdD>P{PsJW&XBzm!m=-1oSHa~g0w-;8^KxA~SdrrR6ZcVk!o4`C8SZ9?UY&OqF z(8=8}GjdJFX%rbFGh$CJZ zOjhO{tm(+I+cI`@36-#?4vu+AV(i9btxLVVL&R2%K`TKtQm@Sf>2+@f${z`%Mvwc` zRM9Mhn(7XlCw0xIhD5%)f=!G{HMXwnx4gTnPt>jFP$QTF1%zVQYPJ%(dzHiHU(6ly>+gKd#DI5?S}sVR_4H5oODDl1)iqz zor|XI+OFK2%{J3iOiv!$Gm#%HZafP%-Az z>O46>+(Ss4$q!)&R$4NJ77#D$dVu1ujD zl6>iW#dIa{yy@s7W8*Yv{b{Mc-kbZ>(FRk+YnlW%nP}5%%MA8ywT5aL?wQxI0~gUW zjeb=_e|jK_*4o<5e$9MW67X?X`H@=(nIGjO^LXR7;~dG$x832Lpl!>H#dyAF&4OG* zjP57GSxVxFta`T^-Nq}5$mg2IYXZOX>olNKdC)jDZh~G~g|T;Ba3RsIHH}ExS`QA5 zq1kA#?16Vl_pN%=*=rh%IK@L}b#jutHquDF8E_!B)}m&`Hm5Wg?a9Piwc~CLG23aX zJZh1?LI+!-i1F>O@X?QvK@q?Pb}dh9YjqPvJQ2$uQTjKuxJS6rzQ${tTZ=iQg5oBQ zUs&Y&XII=N>Gcah!32NO6^| zs(c`w>{Nl~Y7|y)5aKWwyBkEoBXI6~F`$B3{?tP{ZA7;nxGoEYTV`3i1sPuA4Y7$M zbrpKzSsp+ex9ap~KZ{d`G-%QP0BUL{)WDuASiH8=EhM;|urDv=y}D`T@|UbM=yLWt zX%C_G>~hR4wMbSppSb~71Tda$>D@!&nqYIyYI6>DkykSKPZ*=m-c{LrjXdc(4&cMB z6mL9MD34xieQvGPYd)ZH>(f(wW}vjVl3ROASohsW`X8k1@?NgcXW|frPqhXnsu#TYInMnyY8-@N@8-^Y|vk&FU{l#9&3UD z-{AnL6|lL$1k(+pjM5=y?WZ+np(9ji!?MK*`%G|6~>>h4J=hiKb&AG70+0Q$WiUG{aD5T8+|ruxwoewBA|1&y?~H!rd+cUqrY zy=k0ni`UW}SS`Y7I-~ypgw}i7O~(HKG`YW5{nH#>OS^VWPWe86eOb;h$`~(VOkuW` zwrpq4niE9`tb4!`c&O}UWej)?WD|zYMXpB+$4}|f-#aa?%xLzSUV{v#HZxrHjpJWv z*F_-?5pLy`RwQ!WKc#g{4ZRX{O*h-8hi0R0yQb3=}7V0+n*Az@Fq~udXhdk3q`4L-9W7h;=VY?-R-XBQ{%W%ERT@DLwow}G!Y|n3P)H-F!3YT#1ONC*a zRo1Vk+5Z5Txm2k-w?h)7BIkR_V{b1YZ8F$QnJME3gM;^ryErcsY>UpPrcY*a-YDjS zCpf7Q;yiIsT*{5Z;8^N5sDP8XqSP8@-SUfRxfwK*E^s6Qq_=6%lGzXLZky(nBU|3I(Je9(R=9iKztkq;(%v`)-lcnfS?@07l>Gr2 zp@4Y?iO9x1OSI(TvE|Na513%(3aD+!O20j}6notnS6{3~an%C%EA-hkDq{(slgovZ=avR*Syq{0Iw!61&vh|I% zzNKkn)K()90`##`z6fYSyn3HXODr>m~M(xM01;F@E7*BZsnL?tbfd#j7K-*IsyjXx z@}gNEY>zU|-PrdByf$e!h|N)0cKgnEcT7U^Sc+q9xC?J`l4rMb44t`InMEHnk6)vU z(RI_kf_y+$+S^Tq48-7dZnkyJVtJJPgiOllSI%gASlvg@-RRq-yIby_x&6)MoVHg} z+sZKeO&`FOnNC#T$93c#ceAor*k+|q-W<@Q>IW62TRn&?}3+|7O&Zw;HaJ@&Y&8%NEnLUbJ4t~DBI%B&Yta^gy z>MM}h+f2?g;^8*uoa5`2Cp&o?lnV2250`Jpinq2fNbS1d70m#P;hHjkoN@x3)(m+=pXD4&@HM8t=w|?bzl9UBpaaZswwQ%BByriGT!vaw$gR ziu7@R?3&@VC%^}*0=*&YzoRs-V~L2ksGvU0H2K9`0W>h@lIyULPd??8lRLjF&;*@AFryx@Xjg6`IW^AZz1c2wm3BeqC^gP8V&Zz z+82Kf!H~OTkTpzwru8hgaLH_d*~_x6?rzkRC9KjX>AOTKj2Z^i^+RhK$g(JH8tDFs z(+D)z00nQOLaaBT1MfPtc#dni3_!np#v+YwrFWfnt<0J4TFk#~HaGAH6(0_@Z1UUB4a5#s zT{`kDM#j?eFOryr1hK&C%~`e0YU=4v*y-9_mvRm`)pT)X(|67nmO`^WS2hf zm2MhECbU@~x`Ovdm*u{;lG5T>U*?cIbD!Z0QuW3YoD)Gd9K z_hSv%(VTvV)4WEdlMBz6wqx?G;&2EUZ$G>B4yts0E^CGT>A01oc?*)udpeA6uhKLB z0L@Wfu6%Vp@Nbk;NLq)OuHgowyDML$e7(`}`qo^FI0kack(UZL1Ls5_h8*I8ZDJT4 zfWsgzYik4Y*4*F^J*0z*D!_B)^dJgvAZz~s9I_SqidQ3nOSqN_z9`&)+0HZ1oj4fd zib4u)Bvh)lS(2s1NL8C>_Sq@#iIQahnPm7OOR*Ev)4HJ`}a?|(m)V>>pB8Qk2FS%nT*2Zb@ zM&nUl+*vn)&e?SnI2iM=ndS@6HtV&30;b1rZsS_Sy}N0-ts(Ylb_yzcl@XsEBRfby zsFz|25_q{hecRF$gjm=|?~gI}eyvxVQre6~G(&3;xF`MU61{*Qkl5O+q#6n_yX&-r z=Sv@!PSEYXLQfR2f)5~30F=nZY}y03;|GnSp9Xx%ta0jZkw6rITWD9WAP!bNu_MgZ z?qPdj7q!b2totq@npJCQB|Y6s#M}N;Ss1GcHz54<%h%H{ZEvC+q=_tPA~w7r$5x5B%3_516?Vo zL8_*u)Avo_)UBklo_l$Q9QY&0)>GPuLJ7$^=imB!zm*U& zQCQ(`oxWW0?pvHs5vll^6IcP7r1veDhFXgaAC+8iq;W_?5?GO1F=a^rAd7TjM$!#j zH`)1fugJ~)hL@>JEK$U$$sOhSwv~5nWzqL)Q*VoenjX@FMY-q73HdQO=kC6d57_Br z-ye6^oKMsmhWzZB8;>3rWi~Q#$-|=Uag0}OiTMsp zSPDF=8@S{F9>>~n2?H6fc;k;R_wax*Y<**NT~XI=>@>D*+qP|<*tXT!wr$&HW1J)n z8Yd@4lQzA1zweGau70ku$NII`o_o$`Jy<|Xo_C?GR>OO2Sa=k$s1=Gq1i@g+`o)|ygz8G;4ofwWNNFK$cdtr~LbNO=DT8OJKm2Sf>)H_l`7LI>Bl?s(gWj9^fl*1$btZFB z8_&Q!H=FF_6P$c0S+``JcNVV#Z{s+x{Bt|48WLd=a*ad+tK!a9CrWt+Eipfg%* z8Nr#1Ii5w@uY&*<5%-HTF}yq*Jc^5>rny)_{|Er#`(R;nkGh+X?&Gum=qPMDnO{a1 zoA9N}m5vFgq0U1tV5tWuyUtgTVvc?A8lAR?EnHvVtUG|qqMNEk=b@;bbfb;bHv|dU zwzVU&IeTi5iAJJ#<5|Mpl^E!6z+l8K2yL{PWi&Rki?#b;8?^!JDgF;^S~=+I0;}Io z-~adkC8@?q$?8QSvx;JSd=$&0J6?*RxPk3^`^%n~WP*k1bhl8+AjNK#IK-PMG!F%G zAv?#m){K?rha5se%UKVB*8+qZk24tWy^q0Y-^e6gdfD;S0TLhY7cE?~fz(NKFDo*Q zb0vMsp{5*&&x` z7Pv{Y4CG#(xt41B8eWI&0u+~7<|E1_DbYJb3WJIu@m^(rZ6eG`j8+u} zb#rbV6PtiJ%%0S&(G5Girzo`6{+=&LXj$l%044GF`~zF5|C?O~V$vrDn{FKaVziCj zz$WqszZxRtnF|(; zoSr|&*EA|;w$H<=)r554X@bR(YB3EXm2ezm5%WkEH>p5(v&$HRD;*c1ZPty=d_-ld z!>6V8Xx^*|@T6s~zy5|7^*9NoC@uecatvS%HixP^14%Z@NkPCfLDJfJL2)lZ{_XhJ zjZDzoE0&UU>FEM>U<#)B*q9X$o{8fKms3G&!%tUTj%^&&&ePCJR25>wUAexlR^_e1 z=;(}a^WCs-aL+rk>Z-yqw3EKor-Ux9btVJ5c|1NsqF6~@fm>P3^a0Yv;L|5HQXJmw zDe)bLBeVo`cQVB16GTO#wjTjtFiIphcTz;%xQoid8C6J1{h@I+64SsS6`z8mP1ux= zUg0CHGSfTTBCw;za;7sQ{-MLI-z%MKgd0`dYl10~x7qhbe9Db=z--^ytOZ0ioYAX{Vu?*p05>}%TZ>?JIAoGi_oSOqwIsQA1OjUt^Kypa zJ81`kNr5dch@ihRe+nv|WL#NJxcW!);_g~`Jar(DYffvc zym~gs{6-|BV?250dXqFq+v2x^dyOZBEvpzJFh_m#!pY&dkUv)W2=e(Oalpl?BSG5m zMg6YS5V`tBDr9;J zBX0;y-6M4*T!yciW&AC%VA|xjBUXTPT8wg# zXIY1`usJ41!f1M03#2I{AZVSEG-zxXh!tgGMJWpLiyu`qgBj}DLKf&?R!P@f07~VA zWS%G%`ViYk8yJd`e=i>hz-}`;W4?V>|*&Cx8Hu3 zmW3B$hAt|hb42M%fdm8`b=pLyf5=#bC7PE0Om;JTdVaAxe zyM%czHCckmA0eje3UKHIksD%(n`K>ffpFRo?FDKU1hB0DXSXPQc1*3KPY1c^;k#lT zsit@2kr{f<3j_10^)8MzDJlI5u|K@}SI0GTH9w$15b{~Ka&!Xand_)Ha(U(>(IAUY z+0syTF6SIF5SEC*96mJ_F074ireX#KGsw<#ei8SF_}o&y$Zx1?^L_Dw$Ff%A zLql4_p=76r;-_AarUsi*jAOc+Iva#}_D?F(&*d9fv!1~0vL z-9brgMtIiO1uRv+e0u8??Uju0LSNk8MCd19!0nzgZpHf<05rrVII$0$@*ooVCBEUe zoOi8`p0H&njx-NoJOByjfCXg#@CtjPM(k5VFs6MmXo0(6P>>RuzkWT;@LRLd!XfvE z`5yN*{$7W;HPy=v;bV;Z9Ii#7aUU05e< z(!9863FVq^Y;vI!OMLVfwNgTr+BgmV)JmnYUJxEi+AKcEw*}@QFOZLZ*qyP@!l{?f zKFY-K>HeU{0nXfAt75|A^^=!F7eQgcaGUG{=yUcCcc&5XP?GP;*saORprKYO572dP zK&~D8;$|s=yJCc?@D^JkbBqf#Xc-2Uaug=JQWQ(BQ4*0MnC4_wdfvcv%h9#kBM6dl z>qirK;{J_4zjEU(huWzGgcag8QD~q@{8siA`ttm3K7EQ4ci0;{%qh1(&IMS{W zK8Jq|Lq9Sx$L%{?_*DI#dBzCV1%?L4{!}H!--32zp^0{I)V$vuU>_`y$Mf7a?=6Pb z2S*`~M^OQ7vBJi_G)L!`HMZWu>wdlN6mH#b7Qaw*u}<``p6i_9V5+k0z8v97fwx)R zVhtl;Q&^sEFkb>N`Uj`ufbD0}nFe7jKyDaO^@s*dZ?T(_?8Nsqt+MO>mTVHD!Vcu@ z4TUpj>D_@dH9H=b)F2)M6MyB_<+8URus6tK`?MTSfu6Z0$LxM@a{;rS(P(q?ZR`^2 zw&cl(0uvTz3K)Uukp>)#cjJlSV5FdR;uozKix)O_GW5NAm7Boq{o;gQVP=#BwLb$# zo3?M0%Uc3?fsT*!4CU!aG6GK;c|=x%AGL28Rc7;d-{>L_1Y7 zR`&8FmZI{MaajhT!~r~LB%0>*tuR3(>Ix#U4J)Zj@KZ;J`bff^?ZXItf%p#|1$l=$ zI!%CpiQVzkApA#}{eb)4Yq# znQJ)<2H9_OBJ%A&M$3+_?ld!k3xch)|G-3si2nNgECtf?3lP0| zivZBeKvkUVRRiac86)WpPAp#KQkUIHJO^;q-NQnpuMf}1KGls*KxD@++$&2}8rJ~w z#_{e3Sut{>#oxZKfKK448!A|52Zp^!snsAMXEOJ?d(d>H7P(RZg%MLl7cWWh^aqtM$Z>UcB*U8$(&3%oQT_1V&IE z+j)P^h^F!@9)P<99$^e=j0C5NIhTl-SLYCg?bS%%X)-66N@~9=r{9#tl_|curX${M z0l#D>(fMwpB-2)N#_nFoSf`j3D=?d%LQxh(_2T! z9S_mXGU>W(zOO2b7l&FP3}2g~NIT&CcxF9EV3%4T(HQEYIn56C{&7uhPQqL8h9;du7gI{?mg zPk=1Spk{@3t-XM5^~brkS{Q85CvsJCy?#hIu$rmt6Ed&_8;PLviJnT~Mtl=updRch(REhF({ciqJ)?{O3zP z=2$H&&>#_vO1$wD&w|ncvZKdc!s>h)>iZqr)*or{?oRg?X)PAl@W@DUDf+>^d%m03 zHx6ka#O&h0;C$=L@+Jpg(x{G5$Bh{2|@@Y6rKWNB^V9Z+ZbqJ^7FK0B6hA2&}CK5)9t}&0lM- zYg=k(l4pkoNbX^FgcuJ8)+dwnikUme${%i!7MW+c%w7lh=SEZ%Jx1bZi+s`x0|AF-tk;}mc zS#JTNxS4u_=Fx`y>V#!>@`pWv$qu2m!p5XOTs0lVE=jQ{y(r+Vv_=lFWxc2q_q9x+s3kYrQ{<0Eh0iKVStV6 zE?!v#VQ!|T1P7z(s!{W9z{Od?@1M#aSp+U}OLY>1?W-Pha*b4o z`rpe1+74QxsZ`c-7nYX%w%Rs55qX%?QvKYUj=C+wo}zP7cb=RzIx53tgUqIepTbre zDiTpbh*^W+-XM>j4FGbqHtkB7fz1l@#JpSOrfMz@uVtrka8P?w5UI-7RNeX;ju~o+ zH%INLREa(@ytc!gpjl|R%J`kkCBGe^d#U94n7t2$(pXETP9GknJ)ICrz@)xp46~X^ z&z^mo!vn`PLaTJaWJ(tq>h0|Ghn*?0&syQ004N6+ON^k{>YzB4tp_Lm7ME0mp~P!1 zwN`=@`KT=`3{e{(hGb6=gC00?>Vyu$VTDpA8A2a_HR@lJcj|M2_fAIYJcSBe_uQs7 z2ZwiyPlO~6!j!$}6lD;|dIi{%O2(&;UBYE{nvn+}4vfnDEcmRDwzMKv$S@U~aJ>b5 zBx&0V0zmiX|w;1bTTXlj~iC25oYYb=zI^EBkRzmY z^Fp?BC!cjLpKf?L=?ODd&5#zbQ?ru>@`=6qn1YmL@ED5-upg96D31#STU{$ zNE9j*QiaK%udNkEvO`4Po;BuDS=cH+&b-a`C7@zzu!(?awL>ov;!+^=$2vH^TmBmR z<~xu=7*NKz{c0X1m*-%kdl87ew3GS!4|gt8MQdQbP0F*;wX5C>+Lgqb$#upeOo2P} zC}C@EDhI}m@N>Tc!`r8FUAvKtL|-)Y9G$ut;UDl*VX(IWBkrsA2zR3s***=15NjLi zyO$h*R!%ZAcGtvqraGjmp87smX=6+`hS!bqOqwmBR^Q8M!lEnen>WhNzPaAbL~eAV zqX8PFwF{WSh&8X!cjl$hV_7C_ksL}%=QWGx66fo`a}?QmMgQRXOaH_Mjz_5*n|`r(#fk{r`HJc;t4v@%(D(Ix1SH4qWTfx#P z{K{_*w@xFLnVlU^Ly7kHPu9Hp@s$jTgrq8-@C9&@9jN7;b z>Mkgw_BkVCXnW#iA-H;}T46VRy)8Nqs(&^Eb~3g!eDpI6MqIXG;6oJ z54*F_r^YXl3|9`9c9VLQCV8Nl>J#ko3q~-qQvPi714fM^_hsbhmRGmU0>GTY#2+bF z&`9ML2D2r!Eo=&^07qs<_-QQGT;TD13PP-g*MpVYLc zYMmu9V_w@26C;ScV145&bh2qm=ZP)PWt4MIjZC> zHy!z=uuuZv=}cphcQ@o22GE^%Sjv3E!;|iMG)XM}wiF_w2q9Zo&myiW1p&36G9X6~ zq2JKZTNk8Oc#syR&GCM&J_rioHCKrx*d1<3c&zqa}b&dP!91wtSri9`3}Kltau8?pOp! zg!alYKY_y#0IQia7Dt5`=E_*^($d+JgXilEKZzM_=YSTtGuN%WXKWjZkisi>ZnyTC zW`~atTqyIHYt_R!FpVA|b|J*RTNAY&z0_Zpd^B`a|88X4x2ft>X~B4!(aG`6#u2?` z2hT{1rL+58C*_q_L>_1&|78Jp_DYkIgC5&*Kv#bzOp;g&hN*+q1-YK&DncedbxCJQ zSi@NZRos;!%ame>#HD=S1-Y9FG;PG8uUg5B=+bsT4Tf_vzO01Y++mqEx`_ZshEFM)@vT4v9FY^1 zt~mL2ExZm|?R@1W9H#83Y=hKn~(ofEVcKd)NL#YZ(VzzJuo$ZnAv>i50t6DuQ5nDXIvVfZurI8o?m0`MHh2bh0 zT?Sh==8)NpRg-E(!Q4fmXB>8!g5FA0>E-3ZZrP3?pIWFg{HZryLzFRKc~*7pDs_d#R>Gne@mfTxVbqx1EaUlPhN)`Yygr)w3otP9nS6SV_luP93JU z(!0qDT4C;WxXeY~TD?6Mp0&FXz;|l4u$rvAereQo3;0C+>eM_N#+JNo&9L+)6Cl{C z-I�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

    uQ*Vjs3fB`@U4i$t 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

    _~nE+~aS{D-%^-6lBxi1piq&>k7h(e{Q67V+-R7 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�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

    +#Yh>reK6(6QSb`l2y)1bJsIu;~WAR8_>>q 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%0A@E) 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 S)W_(Ky`_pf`Mf`WfBqjbjZ`WC literal 0 HcmV?d00001 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift new file mode 100644 index 0000000..26ef0d5 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -0,0 +1,71 @@ +// +// AccountScreen.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 10.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct AccountScreen: View { + @Environment(\.dismiss) var dismiss + @Environment(AuthenticationViewModel.self) var authenticationViewModel + + var body: some View { + NavigationStack { + List { + Section { + HStack(alignment: .center) { + Image(systemName: "person.circle.fill") + .resizable() + .scaledToFit() + .frame(height: 48) + VStack(alignment: .leading) { + Text("Peter Friese") + Text("peterfriese@google.com") + } + } + } + + Section { + Button(role: .destructive, action: {}) { + Text("Clear viewing history") + } + } + + Section { + Button(action: { + authenticationViewModel.signOut() + dismiss() + }) { + Text("Sign out") + } + } + } + .navigationTitle("Account") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem { + Button(action: {dismiss()}) { + Text("Done") + } + } + } + } + } +} + +#Preview { + AccountScreen() +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift new file mode 100644 index 0000000..a6b6713 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -0,0 +1,227 @@ +// +// AuthenticationScreen.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 10.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import AuthenticationServices + +enum AuthenticationState { + case unauthenticated + case authenticating + case authenticated +} + +enum AuthenticationFlow { + case login + case signUp +} + +@Observable +class AuthenticationViewModel { + var presentingAuthenticationDialog = false + var presentingAccountDialog = false + + var email = "" + var password = "" + var confirmPassword = "" + + var flow: AuthenticationFlow = .login + + var authenticationState: AuthenticationState = .unauthenticated + var errorMessage = "" + var displayName = "" + + var isValid: Bool { + return if flow == .login { + !email.isEmpty && !password.isEmpty + } + else { + !email.isEmpty && !password.isEmpty && password == confirmPassword + } + } + + func switchFlow() { + flow = flow == .login ? .signUp : .login + errorMessage = "" + } + + func signOut() { + authenticationState = .unauthenticated + } +} + +private enum FocusableField: Hashable { + case email + case password + case confirmPassword +} + +struct AuthenticationScreen: View { + @Environment(AuthenticationViewModel.self) var viewModel + @Environment(\.colorScheme) private var colorScheme + @Environment(\.dismiss) private var dismiss + + @FocusState private var focus: FocusableField? + + private func signInWithEmailPassword() { + if viewModel.authenticationState == .authenticated { + viewModel.authenticationState = .unauthenticated + dismiss() + } + else { + viewModel.authenticationState = .authenticated + dismiss() + } + } + + private func signUpWithEmailPassword() { + if viewModel.authenticationState == .authenticated { + viewModel.authenticationState = .unauthenticated + dismiss() + } + else { + viewModel.authenticationState = .authenticated + dismiss() + } + } + + var body: some View { + @Bindable var viewModel = viewModel + VStack { +// Image("login") +// .resizable() +// .aspectRatio(contentMode: .fit) +// .frame(minHeight: 300, maxHeight: 400) +// Text(viewModel.flow == .login ? "Log in" : "Sign up") + Text("Welcome") + .font(.largeTitle) + .fontWeight(.bold) + .frame(maxWidth: .infinity, alignment: .leading) + + HStack { + Image(systemName: "at") + TextField("Email", text: $viewModel.email) + .textInputAutocapitalization(.never) + .disableAutocorrection(true) + .focused($focus, equals: .email) + .submitLabel(.next) + .onSubmit { + self.focus = .password + } + } + .padding(.vertical, 6) + .background(Divider(), alignment: .bottom) + .padding(.bottom, 4) + + HStack { + Image(systemName: "lock") + SecureField("Password", text: $viewModel.password) + .focused($focus, equals: .password) + .submitLabel(.go) + .onSubmit { + signInWithEmailPassword() + } + } + .padding(.vertical, 6) + .background(Divider(), alignment: .bottom) + .padding(.bottom, 8) + + if viewModel.flow == .signUp { + HStack { + Image(systemName: "lock") + SecureField("Confirm password", text: $viewModel.confirmPassword) + .focused($focus, equals: .confirmPassword) + .submitLabel(.go) + .onSubmit { + signUpWithEmailPassword() + } + } + .padding(.vertical, 6) + .background(Divider(), alignment: .bottom) + .padding(.bottom, 8) + } + + if !viewModel.errorMessage.isEmpty { + VStack { + Text(viewModel.errorMessage) + .foregroundColor(Color(UIColor.systemRed)) + } + } + + Button(action: signInWithEmailPassword) { + if viewModel.authenticationState != .authenticating { + Text(viewModel.flow == .login ? "Log in with password" : "Sign up") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + else { + ProgressView() + .progressViewStyle(CircularProgressViewStyle(tint: .white)) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + } + .disabled(!viewModel.isValid) + .frame(maxWidth: .infinity) + .buttonStyle(.borderedProminent) + + HStack { + VStack { Divider() } + Text("or") + VStack { Divider() } + } + + if viewModel.flow == .login { + SignInWithAppleButton(.signIn) { request in + } onCompletion: { result in + } + .signInWithAppleButtonStyle(colorScheme == .light ? .black : .white) + .frame(maxWidth: .infinity, minHeight: 50, maxHeight: 50) + .cornerRadius(8) + } + else { + SignInWithAppleButton(.signUp) { request in + } onCompletion: { result in + } + .signInWithAppleButtonStyle(colorScheme == .light ? .black : .white) + .frame(maxWidth: .infinity, minHeight: 50, maxHeight: 50) + .cornerRadius(8) + } + + HStack { + Text(viewModel.flow == .login ? "Don't have an account yet?" : "Already have an account?") + Button(action: { + withAnimation { + viewModel.switchFlow() + } + }) { + Text(viewModel.flow == .signUp ? "Log in" : "Sign up") + .fontWeight(.semibold) + .foregroundColor(.blue) + } + } + .padding([.top, .bottom], 50) + } + .padding() + .frame(maxHeight: .infinity, alignment: .bottom) + } +} + +#Preview { + AuthenticationScreen() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift new file mode 100644 index 0000000..718cc5e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -0,0 +1,43 @@ +// +// AuthenticationToolbarButton.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 10.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct AuthenticationToolbarButton: View { + @Environment(AuthenticationViewModel.self) var viewModel + + var body: some View { + Button(action: onButtonTapped) { + Image(systemName: viewModel.authenticationState == .unauthenticated ? "person.circle" : "person.circle.fill") + } + } + + func onButtonTapped() { + if viewModel.authenticationState == .unauthenticated { + viewModel.presentingAuthenticationDialog.toggle() + } + else { + viewModel.presentingAccountDialog.toggle() + } + } +} + +#Preview { + AuthenticationToolbarButton() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift new file mode 100644 index 0000000..37d8acc --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift @@ -0,0 +1,55 @@ +// +// CategoriesView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 17.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct CategoriesView: View { + let columns = [ + GridItem(.flexible(), spacing: 12), + GridItem(.flexible()), + ] + + var body: some View { + ScrollView { + LazyVGrid(columns: columns, spacing: 12) { + ForEach(0..<16) { index in + CategoryCardView { + GradientView(configuration: .samples[index % 3]) + } title: { + VStack(alignment: .leading) { + Spacer() + Text("Free for Everyone") + .font(.system(size: UIFontMetrics.default.scaledValue(for: 18), weight: .semibold)) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } + .frame(height: 100) + } + } + } + } +} + +#Preview { + NavigationStack { + CategoriesView() + .padding(.horizontal, 16) + .navigationTitle("Categories") + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift new file mode 100644 index 0000000..ef42109 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift @@ -0,0 +1,94 @@ +// +// CategoryCardView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 15.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct CategoryCardView: View { + var background: () -> Hero + var title: () -> Title + + public init(@ViewBuilder background: @escaping () -> Hero, + @ViewBuilder title: @escaping () -> Title) { + self.background = background + self.title = title + } + + + var body: some View { + VStack(spacing: 0) { + ZStack(alignment: .topLeading) { + background() + title() + } + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: 16, + bottomLeading: 16, + bottomTrailing: 16, + topTrailing: 16 + ), + style: .continuous + ) + ) + } + } +} + +#Preview { + CategoryCardView { + GradientView(configuration: .sample) + } title: { + VStack(alignment: .leading) { + Spacer() + Text("Science Fiction") + .font(.title) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } +} + +#Preview { + let columns = [ + GridItem(.flexible(), spacing: 12), + GridItem(.flexible()), + ] + NavigationStack { + ScrollView { + LazyVGrid(columns: columns, spacing: 12) { + ForEach(0..<16) { index in + CategoryCardView { + GradientView(configuration: .samples[index % 3]) + } title: { + VStack(alignment: .leading) { + Spacer() + Text("Free for Everyone") + .font(.system(size: UIFontMetrics.default.scaledValue(for: 18), weight: .semibold)) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } + .frame(height: 100) + } + } + } + .padding(.horizontal, 16) + .navigationTitle("Categories") + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift deleted file mode 100644 index 42f6c16..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/DetailsSection.swift +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import SwiftUI - -struct DetailsSection: View { - var title: String - var content: () -> Details - - init(title: String, @ViewBuilder content: @escaping () -> Details) { - self.title = title - self.content = content - } - - var body: some View { - VStack(alignment: .leading, spacing: 10) { - HStack(alignment: .center) { - Text(title) - .font(.title2) - .bold() - Image(systemName: "chevron.right") - .font(.title2) - .bold() - } - .padding(.bottom, 8) - - content() - } - .padding(.bottom, 20) - } -} - -#Preview { - ScrollView { - DetailsSection(title: "Details Section") { - Text("Content goes here") - } - .padding() - } -} - -#Preview { - ScrollView { - DetailsSection(title: "Ratings & Reviews") { - HStack(alignment: .center) { - Text("4.7") - .font(.system(size: 64, weight: .bold)) - Spacer() - VStack(alignment: .trailing) { - StarRatingView(rating: 4.7) - Text("23 Ratings") - .font(.title) - .bold() - } - } - Text("Most Helpful Reviews") - .font(.title3) - .bold() - ScrollView(.horizontal) { - LazyHStack { - ForEach(0 ..< 10) { i in - MovieReviewCard( - title: "Great stuff", - rating: 4.5, - reviewerName: "John Doe", - review: - "Incididunt reprehenderit ad elit et commodo. Sint magna Lorem eiusmod. Ea ut culpa cupidatat Lorem culpa ad cupidatat excepteur voluptate consectetur nostrud eu laborum." - ) - .frame(width: 350) - } - } - .scrollTargetLayout() - } - .scrollTargetBehavior(.viewAligned) - } - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift similarity index 83% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index 151ecac..c469bbb 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// MovieCardView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,14 +16,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseDataConnect -import FriendlyFlixSDK + import SwiftUI struct MovieCardView: View { var showDetails: Bool = false - var movie: ListMoviesQuery.Data.Movie + var movie: Movie var body: some View { CardView(showDetails: showDetails) { @@ -28,18 +31,16 @@ struct MovieCardView: View { if let image = phase.image { image .resizable() - .scaledToFit() - .frame(maxWidth: .infinity) - .clipped() + .aspectRatio(contentMode: .fill) + .frame(height: 450) } else if phase.error != nil { Color.red .redacted(if: true) } else { Image(systemName: "photo.artframe") .resizable() - .scaledToFit() - .frame(maxWidth: .infinity) - .clipped() + .aspectRatio(contentMode: .fit) + .frame(height: 450) .redacted(reason: .placeholder) } } @@ -63,7 +64,8 @@ struct MovieCardView: View { .background(.thinMaterial) } } details: { - MovieDetailsView(movie: movie) + Text(movie.title) +// MovieDetailsView(movie: movie) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift deleted file mode 100644 index f537ec5..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import FirebaseDataConnect -import FriendlyFlixSDK -import SwiftUI - -// Introduce a common protocol for movie actors, so we can use the same -// view for ActorMainActors and ActorSupportingActors -protocol MovieActor { - var id: UUID { get set } - var name: String { get set } - var imageUrl: String { get set } -} - -extension GetMovieByIdQuery.Data.Movie.ActorMainActors: MovieActor {} -extension GetMovieByIdQuery.Data.Movie.ActorSupportingActors: MovieActor {} - -struct MovieDetailsView: View { - var movie: ListMoviesQuery.Data.Movie - let movieDetailsRef: GetMovieByIdQuery.Ref - - init(movie: ListMoviesQuery.Data.Movie) { - self.movie = movie - movieDetailsRef = DataConnect.friendlyFlixConnector.getMovieByIdQuery.ref(id: movie.id) - } - -// var movieRef: GetMovieByIdQuery - - var body: some View { - VStack(alignment: .leading, spacing: 10) { - // description - VStack(alignment: .leading, spacing: 10) { - Text("About") - .font(.title2) - .bold() - .unredacted() - - Text(movieDetailsRef.data?.movie?.description ?? .placeholder(length: 150)) - .font(.body) - .redacted(reason: movieDetailsRef.data?.movie == nil ? .placeholder : []) - HStack { - Spacer() - } - } - .redacted(if: movieDetailsRef.data == nil) - - // Actors - if let mainActors = movieDetailsRef.data?.movie?.mainActors, mainActors.count > 0 { - actorsSection(title: "Main actors", actors: mainActors) - } - if let supportingActors = movieDetailsRef.data?.movie?.supportingActors, - supportingActors.count > 0 { - actorsSection(title: "Supporting actors", actors: supportingActors) - } - - // Reviews - DetailsSection(title: "Ratings & Reviews") { - HStack(alignment: .center) { - Text("4.7") - .font(.system(size: 64, weight: .bold)) - Spacer() - VStack(alignment: .trailing) { - StarRatingView(rating: 4.7) - Text("23 Ratings") - .font(.title) - .bold() - } - } - Text("Most Helpful Reviews") - .font(.title3) - .bold() - ScrollView(.horizontal) { - LazyHStack { - if let reviews = movieDetailsRef.data?.movie?.reviews { - ForEach(reviews, id: \.id) { review in - if let rating = review.rating, let feedback = review.reviewText { - MovieReviewCard( - title: "Feedback", - rating: Double(rating), - reviewerName: review.user.username, - review: feedback - ) - .frame(width: 350) - } - } - } - } - .scrollTargetLayout() - } - .scrollTargetBehavior(.viewAligned) - .scrollIndicators(.hidden) - } - - // Similar Movies - // if let movie = movieRef.data?.movie { - // let metadata = "\(movie.description) \nGenres: \(movie.genres.joined(separator: " "))" - // RelatedSection(similarMoviesRef: DataConnect.moviesClient.listSimilarMoviesQueryRef(to: movie.id, metadata: metadata)) - // } - } - .padding(8) - } -} - -extension MovieDetailsView { - func actorsSection(title: String, actors: [any MovieActor]) -> some View { - DetailsSection(title: title) { - ScrollView(.horizontal) { - LazyHStack { - ForEach(actors, id: \.id) { actor in - VStack(alignment: .center) { - if let imageUrl = URL(string: actor.imageUrl) { - AsyncImage(url: imageUrl) { phase in - if let image = phase.image { - image - .resizable() - .scaledToFill() - .frame(width: 96, height: 96, alignment: .center) - .clipShape(Circle()) - } else if phase.error != nil { - Color.red - .redacted(if: true) - } else { - Image(systemName: "person.circle.fill") - .resizable() - .scaledToFit() - .frame(width: 96, height: 96, alignment: .center) - .redacted(reason: .placeholder) - .clipShape(Circle()) - } - } - } - Text(actor.name) - .font(.headline) - } - .padding(.horizontal, 8) - } - } - } - } - } -} - -// #Preview { -// MovieDetailsView(for: UUID()) -// } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift deleted file mode 100644 index bfdf553..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieReviewCard.swift +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import SwiftUI - -struct MovieReviewCard: View { - var title: String - var rating: Double - var reviewerName: String - var review: String - - var body: some View { - VStack(alignment: .leading, spacing: 10) { - Text(title) - .font(.headline) - HStack { - StarRatingView(rating: rating) - Text("·") - Text(reviewerName) - Spacer() - } - .font(.subheadline) - Text(review) - Spacer() - } - .padding(16) - .frame(height: 200) - .background(Color(UIColor.secondarySystemBackground)) - .clipShape( - UnevenRoundedRectangle( - cornerRadii: .init( - topLeading: 16, - bottomLeading: 16, - bottomTrailing: 16, - topTrailing: 16 - ), - style: .continuous - ) - ) - } -} - -#Preview { - ScrollView { - MovieReviewCard( - title: "Really great", - rating: 4.5, - reviewerName: "John Doe", - review: - "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." - ) - .padding() - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift new file mode 100644 index 0000000..3e4174b --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift @@ -0,0 +1,80 @@ +// +// DetailsSection.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct DetailsSection: View where Title: View, Details: View { + var title: () -> Title + var content: () -> Details + + init(@ViewBuilder _ title: @escaping () -> Title, @ViewBuilder content: @escaping () -> Details) { + self.title = title + self.content = content + } + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .center) { + title() + .font(.title2) + .bold() + Image(systemName: "chevron.right") + .font(.title3) + .bold() + .foregroundStyle(Color.secondary) + Spacer() + } + .padding(.bottom, 8) + + content() + } + .padding(.bottom, 20) + } +} + +extension DetailsSection where Title == Text { + init (_ title: Text, content: @escaping () -> Details) { + self.title = { title } + self.content = { content() } + } + + init (_ title: any StringProtocol, content: @escaping () -> Details) { + self.title = { Text(title) } + self.content = { content() } + } +} + +#Preview { + ScrollView { + DetailsSection(Text("Title")) { + Text("Details go here") + } + + DetailsSection("Title as string") { + Text("Details go here") + } + + DetailsSection { + NavigationLink(value: Movie.mock) { + Text("Movie") + } + } content: { + Text("Details go here") + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift new file mode 100644 index 0000000..df94ce2 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -0,0 +1,72 @@ +// +// HomeScreen.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct HomeScreen: View { + @Namespace private var namespace + + var body: some View { + NavigationStack { + ScrollView { + TabView { + ForEach(Movie.featured) { movie in + NavigationLink(value: movie) { + MovieTeaserView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) + .matchedTransitionSource(id: movie.id, in: namespace) + } + + } + } + .navigationDestination(for: Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) + } + .frame(height: 600) + .tabViewStyle(.page) + .tabViewStyle(.page(indexDisplayMode: .always)) + + Group { + MovieListSection(namespace: namespace, title: "Top Movies", movies: Movie.topMovies) + MovieListSection(namespace: namespace, title: "Watch List", movies: Movie.watchList) + MovieListSection(namespace: namespace, title: "Featured", movies: Movie.featured) + } + .navigationDestination(for: [Movie].self) { movies in + MovieListScreen(namespace: namespace, movies: movies) + } + .navigationDestination(for: SectionedMovie.self) { sectionedMovie in + MovieCardView(showDetails: true, movie: sectionedMovie.movie) + .navigationTransition(.zoom(sourceID: sectionedMovie.id, in: namespace)) + } + .padding() + } + .navigationTitle("Home") + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + AuthenticationToolbarButton() + } + } + .ignoresSafeArea() + } + } +} + +#Preview { + HomeScreen() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift new file mode 100644 index 0000000..91d476a --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift @@ -0,0 +1,73 @@ +// +// MovieTeaserView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieTeaserView: View { + var title: String + var subtitle: String + var imageUrl: String + + var body: some View { + ZStack(alignment: .bottom) { + if let imageUrl = URL(string: imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .scaledToFill() + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .scaledToFill() + .redacted(reason: .placeholder) + } + } + } + VStack { + Text(title) + .font(.largeTitle) + .foregroundStyle(.white) + Text(subtitle) + .font(.body) + .foregroundStyle(.white) + } + .padding(.horizontal) + .padding(.vertical, 60) + .background { + LinearGradient( + gradient: Gradient(colors: [.clear, .black.opacity(0.9)]), + startPoint: .top, + endPoint: .bottom + ) + } + } + } +} + +#Preview { + var movie = Movie.mock + MovieTeaserView( + title: movie.title, + subtitle: movie.subtitle, + imageUrl: movie.imageUrl + ) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift new file mode 100644 index 0000000..bc5f51a --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -0,0 +1,70 @@ +// +// ProfileScreen.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct LibraryScreen: View { + @Namespace var namespace + @Environment(AuthenticationViewModel.self) var authenticationViewModel + + var body: some View { + @Bindable var authenticationViewModel = authenticationViewModel + NavigationStack { + ScrollView { + if authenticationViewModel.authenticationState == .authenticated { + Group { + MovieListSection(namespace: namespace, title: "Watch List", movies: Movie.watchList) + MovieListSection(namespace: namespace, title: "Favourites", movies: Movie.featured) + } + .padding() + } + } + .navigationTitle("Library") + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + AuthenticationToolbarButton() + } + } + .navigationDestination(for: Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) + } + .navigationDestination(for: [Movie].self) { movies in + MovieListScreen(namespace: namespace, movies: movies) + } + .navigationDestination(for: SectionedMovie.self) { sectionedMovie in + MovieCardView(showDetails: true, movie: sectionedMovie.movie) + .navigationTransition(.zoom(sourceID: sectionedMovie.id, in: namespace)) + } + } + .overlay { + if authenticationViewModel.authenticationState == .unauthenticated { + ContentUnavailableView { + Label("Your library is empty", systemImage: "rectangle.on.rectangle.slash") + } description: { + Text("Your watch list and favourites will appear here.") + } + } + } + } +} + +#Preview { + LibraryScreen() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift deleted file mode 100644 index c2fc7c1..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/List/MoviesList.swift +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import FirebaseDataConnect -import FriendlyFlixSDK -import SwiftUI - -struct MoviesList: View { - @Namespace var namespace - var listMovies = DataConnect.friendlyFlixConnector.listMoviesQuery.ref() - - var body: some View { - NavigationStack { - ScrollView { - if let movies = listMovies.data?.movies { - ForEach(movies) { movie in - NavigationLink(value: movie) { - MovieCardView(showDetails: false, movie: movie) - .matchedTransitionSource(id: "card\(movie.id)", in: namespace) - } - } - } - } - .navigationTitle("Friendly Flix") - .navigationDestination(for: ListMoviesQuery.Data.Movie.self) { movie in - MovieCardView(showDetails: true, movie: movie) - .navigationTransition(.zoom(sourceID: "card\(movie.id)", in: namespace)) - } - .refreshable { - do { - let _ = try await listMovies.execute() - } catch {} - } - } - .overlay { - if listMovies.data?.movies == nil { - ContentUnavailableView { - Label("No Movies", systemImage: "video.slash") - } description: { - Text("Movies will appear here.") - } - } - } - } -} - -#Preview { - MoviesList() -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift new file mode 100644 index 0000000..c614202 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift @@ -0,0 +1,49 @@ +// +// MovieListView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieListScreen: View { + var namespace: Namespace.ID + var movies: [Movie] + + var body: some View { + List { + ForEach(movies) { movie in + MovieListRowView( + title: movie.title, + subtitle: movie.subtitle, + imageUrl: movie.imageUrl + ) + .matchedTransitionSource(id: movie.id, in: namespace) + .navigationLink(value: movie, hideChevron: true) + } + + } + .listStyle(.plain) + } +} + +#Preview { + @Previewable @Namespace var namespace + NavigationStack { + MovieListScreen(namespace: namespace, movies: Movie.mockList) + .navigationTitle("Continue watching?") + .navigationBarTitleDisplayMode(.inline) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift new file mode 100644 index 0000000..d3a8563 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -0,0 +1,94 @@ +// +// SearchScreen.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +private struct SearchedView: View { + @Environment(\.isSearching) private var isSearching + var namespace: Namespace.ID + var filteredMovies: [Movie] + + var body: some View { + if !isSearching { + MovieListSection(namespace: namespace, title: "Top Movies", movies: Movie.topMovies) + CategoriesView() + } else { + ForEach(filteredMovies) { movie in + NavigationLink(value: movie) { + MovieListRowView( + title: movie.title, + subtitle: movie.subtitle, + imageUrl: movie.imageUrl + ) + .matchedTransitionSource(id: movie.id, in: namespace) + } + .buttonStyle(.noHighlight) + } + } + } +} + +struct SearchScreen: View { + @State private var searchText: String = "" + @State private var isStatusBarHidden = false + @Namespace private var namespace + + var filteredMovies: [Movie] { + Movie.mockList.filter { $0.title.lowercased().contains(searchText.lowercased()) } + } + + + var body: some View { + NavigationStack { + ScrollView { + SearchedView(namespace: namespace, filteredMovies: filteredMovies) + .searchable(text: $searchText) + .textInputAutocapitalization(.never) + } + .padding() + .navigationTitle("Search") + .navigationDestination(for: Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) + .task { + // NavigationStack requires `.statusBarHidden` to be applied to the navigationstack itself, not on any children. + // See https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui + isStatusBarHidden = true + } + } + .navigationDestination(for: [Movie].self) { movies in + MovieListScreen(namespace: namespace, movies: movies) + } + .navigationDestination(for: SectionedMovie.self) { sectionedMovie in + MovieCardView(showDetails: true, movie: sectionedMovie.movie) + .navigationTransition(.zoom(sourceID: sectionedMovie.id, in: namespace)) + } + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + AuthenticationToolbarButton() + } + } + } + .statusBarHidden(isStatusBarHidden) + } +} + +#Preview { + SearchScreen() + .environment(AuthenticationViewModel()) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift similarity index 62% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift index b3e8451..7971142 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// Mockable.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,20 +16,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Firebase -import FirebaseAuth -import SwiftUI -@main -struct FriendlyFlixApp: App { - init() { - FirebaseApp.configure() - Auth.auth().signInAnonymously() - } +public protocol Mockable { + associatedtype MockType - var body: some Scene { - WindowGroup { - MoviesList() - } + static var mock: MockType { get } + static var mockList: [MockType] { get } +} + +public extension Mockable { + static var mock: MockType { + mockList[0] + } + static var mockList: [MockType] { + [] } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift new file mode 100644 index 0000000..76e5d15 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -0,0 +1,101 @@ +// +// Movie.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import SwiftUI + +struct Movie: Identifiable, Hashable { + let id = UUID() + let title: String + let subtitle: String + let image: ImageResource + let releaseYear: Int? + let imageUrl: String +} + +extension Movie: Mockable { + static var mockList: [Movie] = [ + .init( + title: "The Hitchhiker's Guide to the Galaxy", + subtitle: + "Mere seconds before the Earth is to be demolished by an alien construction crew, Arthur Dent is swept off the planet by his friend Ford Prefect, a researcher penning a new edition of \"The Hitchhiker's Guide to the Galaxy.\"", + image: .hitchhiker, + releaseYear: 2005, + imageUrl: "https://image.tmdb.org/t/p/w1280/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg" + ), + .init( + title: "Interstellar", + subtitle: + "The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.", + image: .interstellar, + releaseYear: 2005, + imageUrl: "https://image.tmdb.org/t/p/w1280/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg" + ), + .init( + title: "The Matrix", + subtitle: + "Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.", + image: .matrix, + releaseYear: 1999, + imageUrl: "https://image.tmdb.org/t/p/w1280/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg" + ), + .init( + title: "Titanic", + subtitle: + "101-year-old Rose DeWitt Bukater tells the story of her life aboard the Titanic, 84 years later. A young Rose boards the ship with her mother and fiancé. Meanwhile, Jack Dawson and Fabrizio De Rossi win third-class tickets aboard the ship. Rose tells the whole story from Titanic's departure through to its death—on its first and last voyage—on April 15, 1912.", + image: .titanic, + releaseYear: 1998, + imageUrl: "https://image.tmdb.org/t/p/w1280/tuvoTDlqaLm7hFUROR6u0OUtwCW.jpg" + ), + .init( + title: "Slow Horses", + subtitle: + "Follow a dysfunctional team of MI5 agents—and their obnoxious boss, the notorious Jackson Lamb—as they navigate the espionage world's smoke and mirrors to defend England from sinister forces.", + image: .slowhorses, + releaseYear: 2022, + imageUrl: "https://image.tmdb.org/t/p/w1280/dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg" + ), + .init( + title: "Tomorrow Never Dies", + subtitle: + "A deranged media mogul is staging international incidents to pit the world's superpowers against each other. Now James Bond must take on this evil mastermind in an adrenaline-charged battle to end his reign of terror and prevent global pandemonium.", + image: .tomorrowneverdies, + releaseYear: 1997, + imageUrl: "https://image.tmdb.org/t/p/w1280/bkEJA84af63IpaOPP4CbbgTiTlL.jpg" + ), + .init( + title: "The man from U.N.C.L.E.", + subtitle: + "At the height of the Cold War, a mysterious criminal organization plans to use nuclear weapons and technology to upset the fragile balance of power between the United States and Soviet Union. CIA agent Napoleon Solo and KGB agent Illya Kuryakin are forced to put aside their hostilities and work together to stop the evildoers in their tracks. The duo's only lead is the daughter of a missing German scientist, whom they must find soon to prevent a global catastrophe.", + image: .uncle, + releaseYear: 2015, + imageUrl: "https://image.tmdb.org/t/p/w1280/nFiu4lLhkyf1amaGaN6pNoUn5Ly.jpg" + ), + ] + + static var featured = Array(mockList.filter { $0.title.contains("The")}) + static var topMovies = Array(mockList.prefix(3)) + static var watchList = Array(mockList.suffix(5)) + +// static var featured = Array([mockList[0]]) +// static var topMovies = Array([mockList[1]]) +// static var watchList = Array([mockList[2]]) + + +} + diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift similarity index 60% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift index c46ebd6..98b10ef 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extensions.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// NoHighlightButtonStyle.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,12 +16,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Foundation import SwiftUI -extension View { - @ViewBuilder - func redacted(if condition: @autoclosure () -> Bool) -> some View { - redacted(reason: condition() ? .placeholder : []) +struct NoHighlightButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + } +} + +extension ButtonStyle where Self == NoHighlightButtonStyle { + static var noHighlight: NoHighlightButtonStyle { + get { NoHighlightButtonStyle() } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index 36e3804..48b1e88 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// Color+Hex.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,6 +16,7 @@ // See the License for the specific language governing permissions and // limitations under the License. + import SwiftUI extension Color { diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift deleted file mode 100644 index 9daeba9..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import Foundation - -extension String { - static func placeholder(length: Int) -> String { - String(Array(repeating: "X", count: length)) - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift index 0bcf514..a744357 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -1,4 +1,9 @@ -// Copyright 2024 Google LLC +// +// String+StringInterpolation.swift +// FriendlyFlix +// +// Created by Peter Friese on 28.08.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift new file mode 100644 index 0000000..ff5bc25 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift @@ -0,0 +1,47 @@ +// +// View+Extension.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +import SwiftUI + +extension View { + @ViewBuilder + func redacted(if condition: @autoclosure () -> Bool) -> some View { + redacted(reason: condition() ? .placeholder : []) + } +} + +extension View { + @ViewBuilder + func navigationLink(value: any Hashable, hideChevron: Bool = false) -> some View { + if hideChevron { + // If hideChevron is true, apply the overlay trick to hide the chevron + // Put the NavigationLink into an overlay, and set its opacity to zero. By using this trick, we can hide the chevron. + // Source: https://www.reddit.com/r/SwiftUI/comments/13rhg02/how_can_i_use_navigationlink_inside_list_without/jlkqbkz/ + overlay { + NavigationLink(value: value) { + EmptyView() + } + .opacity(0) + } + } else { + // If hideChevron is false, return the original view without modification + self + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift similarity index 98% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index 6bbd13a..13f6496 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// CardView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,6 +16,7 @@ // See the License for the specific language governing permissions and // limitations under the License. + import SwiftUI // Try for blendmode https://saeedrz.medium.com/unleashing-creativity-a-deep-dive-into-blendmode-in-swiftui-2edc3f204fa8 @@ -67,6 +72,7 @@ struct CardView: View { dismissButton heroTitle() } + .frame(height: 450) .clipShape( UnevenRoundedRectangle( cornerRadii: .init( @@ -97,7 +103,7 @@ struct CardView: View { cardView .scaleEffect(scaleFactor) .navigationBarBackButtonHidden(true) - .statusBar(hidden: true) + .statusBarHidden() } .ignoresSafeArea() // Start: drag down to pop back diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift similarity index 98% rename from Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift rename to Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift index b0c025f..cbcb17d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Hero/GradientView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift @@ -1,4 +1,8 @@ -// Copyright 2024 Google LLC +// +// GradienConfiguration.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,6 +16,7 @@ // See the License for the specific language governing permissions and // limitations under the License. + import SwiftUI let neonSunsetBlurb = diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift new file mode 100644 index 0000000..1ea4f45 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift @@ -0,0 +1,76 @@ +// +// MovieListRowView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 01.10.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieListRowView: View { + var title: String + var subtitle: String + var imageUrl: String + + var body: some View { + HStack(alignment: .top) { + if let imageUrl = URL(string: imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .scaledToFill() + .frame(width: 150, height: 75) + .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .scaledToFill() + .frame(width: 150, height: 75) + .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) + .redacted(reason: .placeholder) + } + } + } + VStack(alignment: .leading, spacing: 4) { + Text(title) + .lineLimit(2) + .font(.headline) + Text(subtitle) + .lineLimit(2) + .font(.subheadline) + } + Spacer() + } + .contentShape(Rectangle()) // ensure entire frame is clickable + } +} + +#Preview { + let movie = Movie.mock + MovieListRowView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) +} + +#Preview { + NavigationStack { + List(Movie.mockList) { movie in + MovieListRowView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) + } + .listStyle(.plain) + .navigationTitle("Movies") + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift new file mode 100644 index 0000000..6390a55 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift @@ -0,0 +1,72 @@ +// +// MovieListSection.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 30.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct SectionedMovie: Identifiable, Hashable { + var id = UUID() + var movie: Movie +} + +struct MovieListSection: View { + // pass namespace from parent view, see https://forums.developer.apple.com/forums/thread/651996 + var namespace: Namespace.ID + var title: String + var movies: [Movie] + + private var sectionedMovies: [SectionedMovie] { + movies.map { movie in + SectionedMovie(movie: movie) + } + } + + var body: some View { + DetailsSection { + NavigationLink(value: movies) { + Text(title) + } + .buttonStyle(.noHighlight) + } content: { + ScrollView(.horizontal) { + LazyHStack { + ForEach(sectionedMovies) { sectionedMovie in + NavigationLink(value: sectionedMovie) { + MovieTileView( + title: sectionedMovie.movie.title, + imageUrl: sectionedMovie.movie.imageUrl, + averageRating: 8.7, + userRating: 10.1 + ) + .frame(maxWidth: 150, maxHeight: 300) + .matchedTransitionSource(id: sectionedMovie.id, in: namespace) + } + .buttonStyle(.noHighlight) + } + } + } + .scrollIndicators(.never) + } + } +} + +#Preview { + @Previewable @Namespace var namespace + NavigationStack { + MovieListSection(namespace: namespace, title: "Top Movies", movies: Movie.topMovies) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift new file mode 100644 index 0000000..a3b80d1 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift @@ -0,0 +1,80 @@ +// +// MovieTileView.swift +// FriendlyFlixMocks +// +// Created by Peter Friese on 28.09.24. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct MovieTileView: View { + var title: String = "The Matrix" + var imageUrl: String + var averageRating: Double = 8.7 + var userRating: Double = 10 + + let gradient = LinearGradient( + colors: [.blue, .green], + startPoint: .leading, + endPoint: .trailing + ) + + private let star = Image(systemName: "star.fill") + + var body: some View { + VStack(alignment: .leading) { + if let imageUrl = URL(string: imageUrl) { + AsyncImage(url: imageUrl) { phase in + if let image = phase.image { + image + .resizable() + .aspectRatio(contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + } else if phase.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .aspectRatio(contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + .redacted(reason: .placeholder) + } + } + } + Text(title) + .lineLimit(1) + .font(.headline) + HStack { + Text(star).foregroundColor(.yellow) + Text(" ") + Text("\(averageRating, specifier: "%.1f")") + + Text(" ") + Text(star) + .foregroundColor(.blue) + Text(" ") + Text("\(userRating, specifier: "%.1f")") + } + } + } +} + +#Preview { + ScrollView(.horizontal) { + LazyHStack { + ForEach(Movie.featured) { movie in + MovieTileView(title: movie.title, + imageUrl: movie.imageUrl, + averageRating: 8.7, + userRating: 10.1) + .frame(maxWidth: 200, maxHeight: 300) + } + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift deleted file mode 100644 index 82cce47..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixTests/FriendlyFlixTests.swift +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import Testing - -@testable import FriendlyFlix - -struct FriendlyFlixTests { - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift deleted file mode 100644 index d4f0371..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITests.swift +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import XCTest - -final class FriendlyFlixUITests: XCTestCase { - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the - // class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - - // required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the - // class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift deleted file mode 100644 index 620186e..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlixUITests/FriendlyFlixUITestsLaunchTests.swift +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import XCTest - -final class FriendlyFlixUITestsLaunchTests: XCTestCase { - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} From 5b5f467efa6034ed6c6af2915a31f031353c936e Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 21 Oct 2024 18:25:43 +0200 Subject: [PATCH 15/50] =?UTF-8?q?=E2=9C=A8=20Sign=20in=20with=20email=20/?= =?UTF-8?q?=20password?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .gitignore | 1 + .../FriendlyFlix.xcodeproj/project.pbxproj | 28 +++++ .../FriendlyFlix/App/FriendlyFlixApp.swift | 4 +- .../FriendlyFlix/App/RootView.swift | 4 +- .../Authentication/AccountScreen.swift | 30 +++-- .../Authentication/AuthenticationScreen.swift | 103 ++++++++---------- .../AuthenticationService.swift | 56 ++++++++++ .../AuthenticationToolbarButton.swift | 4 +- .../Features/Home/HomeScreen.swift | 2 +- .../Features/Library/LibraryScreen.swift | 4 +- .../Features/Search/SearchScreen.swift | 2 +- 11 files changed, 163 insertions(+), 75 deletions(-) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift diff --git a/.gitignore b/.gitignore index ff7b6c5..292489e 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,4 @@ scripts xcodebuild.log Package.resolved +GoogleService-Info.plist diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj index e7d2262..411cb53 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj @@ -6,6 +6,10 @@ objectVersion = 77; objects = { +/* Begin PBXBuildFile section */ + 8854EC512CC6AC2700A09F27 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 8854EC502CC6AC2700A09F27 /* FirebaseAuth */; }; +/* End PBXBuildFile section */ + /* Begin PBXFileReference section */ 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FriendlyFlix.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -23,6 +27,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 8854EC512CC6AC2700A09F27 /* FirebaseAuth in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -65,6 +70,7 @@ ); name = FriendlyFlix; packageProductDependencies = ( + 8854EC502CC6AC2700A09F27 /* FirebaseAuth */, ); productName = FriendlyFlix; productReference = 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */; @@ -94,6 +100,9 @@ ); mainGroup = 88A9E62B2CA834C600B3C4EF; minimizedProjectReferenceProxies = 1; + packageReferences = ( + 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); preferredProjectObjectVersion = 77; productRefGroup = 88A9E6352CA834C600B3C4EF /* Products */; projectDirPath = ""; @@ -324,6 +333,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 11.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 8854EC502CC6AC2700A09F27 /* FirebaseAuth */ = { + isa = XCSwiftPackageProductDependency; + package = 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAuth; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 88A9E62C2CA834C600B3C4EF /* Project object */; } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index fe8cdce..cb8c246 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -17,6 +17,7 @@ // limitations under the License. import SwiftUI +import Firebase @main struct FriendlyFlixApp: App { @@ -32,12 +33,13 @@ struct FriendlyFlixApp: App { init () { loadRocketSimConnect() + FirebaseApp.configure() } var body: some Scene { WindowGroup { RootView() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift index 8827867..3f1a37b 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift @@ -19,7 +19,7 @@ import SwiftUI struct RootView: View { - @Environment(AuthenticationViewModel.self) private var authenticationViewModel + @Environment(AuthenticationService.self) private var authenticationViewModel var body: some View { @Bindable var authenticationViewModel = authenticationViewModel @@ -48,5 +48,5 @@ struct RootView: View { #Preview { RootView() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift index 26ef0d5..9177f26 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -20,8 +20,27 @@ import SwiftUI struct AccountScreen: View { @Environment(\.dismiss) var dismiss - @Environment(AuthenticationViewModel.self) var authenticationViewModel + @Environment(AuthenticationService.self) var authenticationService + private var displayName: String { + authenticationService.user?.displayName ?? "(not set)" + } + + private var email: String { + authenticationService.user?.email ?? "" + } + + private func signOut() { + do { + try authenticationService.signOut() + dismiss() + } + catch { + } + } +} + +extension AccountScreen { var body: some View { NavigationStack { List { @@ -32,8 +51,8 @@ struct AccountScreen: View { .scaledToFit() .frame(height: 48) VStack(alignment: .leading) { - Text("Peter Friese") - Text("peterfriese@google.com") + Text(displayName) + Text(email) } } } @@ -45,10 +64,7 @@ struct AccountScreen: View { } Section { - Button(action: { - authenticationViewModel.signOut() - dismiss() - }) { + Button(action: signOut) { Text("Sign out") } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index a6b6713..15e9bea 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -19,33 +19,32 @@ import SwiftUI import AuthenticationServices -enum AuthenticationState { - case unauthenticated - case authenticating - case authenticated +private enum FocusableField: Hashable { + case email + case password + case confirmPassword } -enum AuthenticationFlow { +private enum AuthenticationFlow { case login case signUp } -@Observable -class AuthenticationViewModel { - var presentingAuthenticationDialog = false - var presentingAccountDialog = false +struct AuthenticationScreen: View { + @Environment(AuthenticationService.self) var authenticationService + @Environment(\.colorScheme) private var colorScheme + @Environment(\.dismiss) private var dismiss - var email = "" - var password = "" - var confirmPassword = "" + @State private var email = "" + @State private var password = "" + @State private var confirmPassword = "" - var flow: AuthenticationFlow = .login + @State private var flow: AuthenticationFlow = .login - var authenticationState: AuthenticationState = .unauthenticated - var errorMessage = "" - var displayName = "" + @State private var errorMessage = "" + @State private var displayName = "" - var isValid: Bool { + private var isValid: Bool { return if flow == .login { !email.isEmpty && !password.isEmpty } @@ -54,53 +53,39 @@ class AuthenticationViewModel { } } - func switchFlow() { + private func switchFlow() { flow = flow == .login ? .signUp : .login errorMessage = "" } - func signOut() { - authenticationState = .unauthenticated - } -} - -private enum FocusableField: Hashable { - case email - case password - case confirmPassword -} - -struct AuthenticationScreen: View { - @Environment(AuthenticationViewModel.self) var viewModel - @Environment(\.colorScheme) private var colorScheme - @Environment(\.dismiss) private var dismiss - @FocusState private var focus: FocusableField? private func signInWithEmailPassword() { - if viewModel.authenticationState == .authenticated { - viewModel.authenticationState = .unauthenticated - dismiss() - } - else { - viewModel.authenticationState = .authenticated - dismiss() + Task { + do { + try await authenticationService.signInWithEmailPassword(email: email, password: password) + dismiss() + } catch { + print(error.localizedDescription) + errorMessage = error.localizedDescription + } } } private func signUpWithEmailPassword() { - if viewModel.authenticationState == .authenticated { - viewModel.authenticationState = .unauthenticated + if authenticationService.authenticationState == .authenticated { + authenticationService.authenticationState = .unauthenticated dismiss() } else { - viewModel.authenticationState = .authenticated + authenticationService.authenticationState = .authenticated dismiss() } } +} +extension AuthenticationScreen { var body: some View { - @Bindable var viewModel = viewModel VStack { // Image("login") // .resizable() @@ -114,7 +99,7 @@ struct AuthenticationScreen: View { HStack { Image(systemName: "at") - TextField("Email", text: $viewModel.email) + TextField("Email", text: $email) .textInputAutocapitalization(.never) .disableAutocorrection(true) .focused($focus, equals: .email) @@ -129,7 +114,7 @@ struct AuthenticationScreen: View { HStack { Image(systemName: "lock") - SecureField("Password", text: $viewModel.password) + SecureField("Password", text: $password) .focused($focus, equals: .password) .submitLabel(.go) .onSubmit { @@ -140,10 +125,10 @@ struct AuthenticationScreen: View { .background(Divider(), alignment: .bottom) .padding(.bottom, 8) - if viewModel.flow == .signUp { + if flow == .signUp { HStack { Image(systemName: "lock") - SecureField("Confirm password", text: $viewModel.confirmPassword) + SecureField("Confirm password", text: $confirmPassword) .focused($focus, equals: .confirmPassword) .submitLabel(.go) .onSubmit { @@ -155,16 +140,16 @@ struct AuthenticationScreen: View { .padding(.bottom, 8) } - if !viewModel.errorMessage.isEmpty { + if !errorMessage.isEmpty { VStack { - Text(viewModel.errorMessage) + Text(errorMessage) .foregroundColor(Color(UIColor.systemRed)) } } Button(action: signInWithEmailPassword) { - if viewModel.authenticationState != .authenticating { - Text(viewModel.flow == .login ? "Log in with password" : "Sign up") + if authenticationService.authenticationState != .authenticating { + Text(flow == .login ? "Log in with password" : "Sign up") .padding(.vertical, 8) .frame(maxWidth: .infinity) } @@ -175,7 +160,7 @@ struct AuthenticationScreen: View { .frame(maxWidth: .infinity) } } - .disabled(!viewModel.isValid) + .disabled(!isValid) .frame(maxWidth: .infinity) .buttonStyle(.borderedProminent) @@ -185,7 +170,7 @@ struct AuthenticationScreen: View { VStack { Divider() } } - if viewModel.flow == .login { + if flow == .login { SignInWithAppleButton(.signIn) { request in } onCompletion: { result in } @@ -203,13 +188,13 @@ struct AuthenticationScreen: View { } HStack { - Text(viewModel.flow == .login ? "Don't have an account yet?" : "Already have an account?") + Text(flow == .login ? "Don't have an account yet?" : "Already have an account?") Button(action: { withAnimation { - viewModel.switchFlow() + switchFlow() } }) { - Text(viewModel.flow == .signUp ? "Log in" : "Sign up") + Text(flow == .signUp ? "Log in" : "Sign up") .fontWeight(.semibold) .foregroundColor(.blue) } @@ -223,5 +208,5 @@ struct AuthenticationScreen: View { #Preview { AuthenticationScreen() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift new file mode 100644 index 0000000..d0c8c10 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -0,0 +1,56 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Observation +import FirebaseAuth + +enum AuthenticationState { + case unauthenticated + case authenticating + case authenticated +} + +@Observable +class AuthenticationService { + var presentingAuthenticationDialog = false + var presentingAccountDialog = false + + var authenticationState: AuthenticationState = .unauthenticated + var user: User? = nil + + private var authenticationListener: AuthStateDidChangeListenerHandle? + + init() { + authenticationListener = Auth.auth().addStateDidChangeListener { auth, user in + if let user { + self.authenticationState = .authenticated + self.user = user + } + else { + self.authenticationState = .unauthenticated + } + } + } + + func signInWithEmailPassword(email: String, password: String) async throws { + try await Auth.auth().signIn(withEmail: email, password: password) + authenticationState = .authenticated + } + + func signOut() throws { + try Auth.auth().signOut() + authenticationState = .unauthenticated + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift index 718cc5e..729585c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -19,7 +19,7 @@ import SwiftUI struct AuthenticationToolbarButton: View { - @Environment(AuthenticationViewModel.self) var viewModel + @Environment(AuthenticationService.self) var viewModel var body: some View { Button(action: onButtonTapped) { @@ -39,5 +39,5 @@ struct AuthenticationToolbarButton: View { #Preview { AuthenticationToolbarButton() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index df94ce2..448f117 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -68,5 +68,5 @@ struct HomeScreen: View { #Preview { HomeScreen() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index bc5f51a..64ede9e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -20,7 +20,7 @@ import SwiftUI struct LibraryScreen: View { @Namespace var namespace - @Environment(AuthenticationViewModel.self) var authenticationViewModel + @Environment(AuthenticationService.self) var authenticationViewModel var body: some View { @Bindable var authenticationViewModel = authenticationViewModel @@ -66,5 +66,5 @@ struct LibraryScreen: View { #Preview { LibraryScreen() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index d3a8563..5ef3bec 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -90,5 +90,5 @@ struct SearchScreen: View { #Preview { SearchScreen() - .environment(AuthenticationViewModel()) + .environment(AuthenticationService()) } From 21028a800993b3367556570d2def7102ab1d3a16 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 21 Oct 2024 18:35:31 +0200 Subject: [PATCH 16/50] =?UTF-8?q?=E2=9C=A8=20Sign=20up=20with=20email=20/?= =?UTF-8?q?=20password?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Authentication/AuthenticationScreen.swift | 22 ++++++++++++------- .../AuthenticationService.swift | 5 +++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index 15e9bea..ebe451f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -73,13 +73,16 @@ struct AuthenticationScreen: View { } private func signUpWithEmailPassword() { - if authenticationService.authenticationState == .authenticated { - authenticationService.authenticationState = .unauthenticated - dismiss() - } - else { - authenticationService.authenticationState = .authenticated - dismiss() + Task { + do { + try await authenticationService.signUpWithEmailPassword(email: email, password: password) + errorMessage = "" + dismiss() + } + catch { + print(error.localizedDescription) + errorMessage = error.localizedDescription + } } } } @@ -147,7 +150,10 @@ extension AuthenticationScreen { } } - Button(action: signInWithEmailPassword) { + Button(action: { + if flow == .login { signInWithEmailPassword() } + else { signUpWithEmailPassword()} + } ) { if authenticationService.authenticationState != .authenticating { Text(flow == .login ? "Log in with password" : "Sign up") .padding(.vertical, 8) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index d0c8c10..0fc20b4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -49,6 +49,11 @@ class AuthenticationService { authenticationState = .authenticated } + func signUpWithEmailPassword(email: String, password: String) async throws { + try await Auth.auth().createUser(withEmail: email, password: password) + authenticationState = .authenticated + } + func signOut() throws { try Auth.auth().signOut() authenticationState = .unauthenticated From 4c8b01af9b3b62702d61ee972670a00e75de3023 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Thu, 24 Oct 2024 22:59:48 +0200 Subject: [PATCH 17/50] =?UTF-8?q?=E2=9C=A8=20Connect=20to=20FDC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../FriendlyFlix.xcodeproj/project.pbxproj | 52 +- .../Features/Details/MovieCardView.swift | 20 +- .../Features/Home/HomeScreen.swift | 65 +- .../Features/Home/MovieTeaserView.swift | 38 +- .../Features/MovieList/MovieListScreen.swift | 2 +- .../Features/Search/SearchScreen.swift | 30 +- .../Model/Movie+DataConnect.swift | 35 + .../FriendlyFlix/Model/Movie.swift | 25 +- .../FriendlyFlix/Views/CardView.swift | 5 +- .../FriendlyFlix/Views/MovieListRowView.swift | 22 +- .../FriendlyFlix/Views/MovieListSection.swift | 12 +- .../FriendlyFlix/Views/MovieTileView.swift | 26 +- .../app/FriendlyFlixSDK/Package.swift | 67 +- .../app/FriendlyFlixSDK/README.md | 53 +- .../Sources/FriendlyFlixClient.swift | 97 +- .../Sources/FriendlyFlixKeys.swift | 348 +- .../Sources/FriendlyFlixOperations.swift | 4182 +++++++++++------ .../FriendlyFlix/dataconnect/dataconnect.yaml | 6 +- .../dataconnect/movie-connector/queries.gql | 22 +- .../dataconnect/schema/schema.gql | 6 +- 20 files changed, 3300 insertions(+), 1813 deletions(-) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj index 411cb53..4d78e24 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/project.pbxproj @@ -7,7 +7,9 @@ objects = { /* Begin PBXBuildFile section */ - 8854EC512CC6AC2700A09F27 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 8854EC502CC6AC2700A09F27 /* FirebaseAuth */; }; + 88896F392CCA5AD80089A19C /* NukeUI in Frameworks */ = {isa = PBXBuildFile; productRef = 88896F382CCA5AD80089A19C /* NukeUI */; }; + 88BA433B2CC937E10063E309 /* FirebaseDataConnect in Frameworks */ = {isa = PBXBuildFile; productRef = 88BA433A2CC937E10063E309 /* FirebaseDataConnect */; }; + 88BA43402CC938250063E309 /* FriendlyFlixSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 88BA433F2CC938250063E309 /* FriendlyFlixSDK */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -27,7 +29,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8854EC512CC6AC2700A09F27 /* FirebaseAuth in Frameworks */, + 88896F392CCA5AD80089A19C /* NukeUI in Frameworks */, + 88BA433B2CC937E10063E309 /* FirebaseDataConnect in Frameworks */, + 88BA43402CC938250063E309 /* FriendlyFlixSDK in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -70,7 +74,9 @@ ); name = FriendlyFlix; packageProductDependencies = ( - 8854EC502CC6AC2700A09F27 /* FirebaseAuth */, + 88BA433A2CC937E10063E309 /* FirebaseDataConnect */, + 88BA433F2CC938250063E309 /* FriendlyFlixSDK */, + 88896F382CCA5AD80089A19C /* NukeUI */, ); productName = FriendlyFlix; productReference = 88A9E6342CA834C600B3C4EF /* FriendlyFlix.app */; @@ -101,7 +107,9 @@ mainGroup = 88A9E62B2CA834C600B3C4EF; minimizedProjectReferenceProxies = 1; packageReferences = ( - 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + 88BA43392CC937E10063E309 /* XCRemoteSwiftPackageReference "data-connect-ios-sdk" */, + 88BA433E2CC938250063E309 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */, + 88896F372CCA5AD80089A19C /* XCRemoteSwiftPackageReference "Nuke" */, ); preferredProjectObjectVersion = 77; productRefGroup = 88A9E6352CA834C600B3C4EF /* Products */; @@ -334,22 +342,46 @@ }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 88BA433E2CC938250063E309 /* XCLocalSwiftPackageReference "../FriendlyFlixSDK" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../FriendlyFlixSDK; + }; +/* End XCLocalSwiftPackageReference section */ + /* Begin XCRemoteSwiftPackageReference section */ - 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + 88896F372CCA5AD80089A19C /* XCRemoteSwiftPackageReference "Nuke" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + repositoryURL = "https://github.com/kean/Nuke?tab=readme-ov-file"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 11.0.0; + minimumVersion = 12.8.0; + }; + }; + 88BA43392CC937E10063E309 /* XCRemoteSwiftPackageReference "data-connect-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/data-connect-ios-sdk"; + requirement = { + branch = main; + kind = branch; }; }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 8854EC502CC6AC2700A09F27 /* FirebaseAuth */ = { + 88896F382CCA5AD80089A19C /* NukeUI */ = { + isa = XCSwiftPackageProductDependency; + package = 88896F372CCA5AD80089A19C /* XCRemoteSwiftPackageReference "Nuke" */; + productName = NukeUI; + }; + 88BA433A2CC937E10063E309 /* FirebaseDataConnect */ = { + isa = XCSwiftPackageProductDependency; + package = 88BA43392CC937E10063E309 /* XCRemoteSwiftPackageReference "data-connect-ios-sdk" */; + productName = FirebaseDataConnect; + }; + 88BA433F2CC938250063E309 /* FriendlyFlixSDK */ = { isa = XCSwiftPackageProductDependency; - package = 8854EC4F2CC6AC2700A09F27 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAuth; + productName = FriendlyFlixSDK; }; /* End XCSwiftPackageProductDependency section */ }; diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index c469bbb..ae63dd0 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -18,6 +18,7 @@ import SwiftUI +import NukeUI struct MovieCardView: View { var showDetails: Bool = false @@ -27,23 +28,28 @@ struct MovieCardView: View { var body: some View { CardView(showDetails: showDetails) { if let imageUrl = URL(string: movie.imageUrl) { - AsyncImage(url: imageUrl) { phase in - if let image = phase.image { + LazyImage(url: imageUrl) { state in + if let image = state.image { image .resizable() - .aspectRatio(contentMode: .fill) - .frame(height: 450) - } else if phase.error != nil { + .scaledToFill() + .frame(maxWidth: .infinity) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + } else if state.error != nil { Color.red + .frame(maxWidth: .infinity) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(if: true) } else { Image(systemName: "photo.artframe") .resizable() - .aspectRatio(contentMode: .fit) - .frame(height: 450) + .aspectRatio(contentMode: .fill) + .frame(maxWidth: .infinity) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(reason: .placeholder) } } + .frame(maxWidth: .infinity) } } heroTitle: { VStack(alignment: .leading) { diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index 448f117..151583f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -17,34 +17,83 @@ // limitations under the License. import SwiftUI +import FirebaseDataConnect +import FriendlyFlixSDK struct HomeScreen: View { @Namespace private var namespace + @Environment(AuthenticationService.self) var authenticationService + private var connector = DataConnect.friendlyFlixConnector + + private func mapMovie(_ listMovie: ListMoviesQuery.Data.Movie) -> Movie { + .init( + title: listMovie.title, + description: listMovie.description ?? "", + releaseYear: listMovie.releaseYear, + rating: listMovie.rating, + imageUrl: listMovie.imageUrl + ) + } + + private var heroMovies: [Movie] { + connector.listMoviesQuery + .ref({ optionalVars in + optionalVars.limit = 3 + optionalVars.orderByReleaseYear = .DESC + }) + .data?.movies.map(Movie.init) ?? [] + } + + private var topMovies: [Movie] { + connector.listMoviesQuery + .ref({ optionalVars in + optionalVars.limit = 5 + optionalVars.orderByRating = .DESC + }) + .data?.movies.map(Movie.init) ?? [] + } + + private var watchList: [Movie] { + /// TODO: build a query that retrieves the user's watch list + connector.listMoviesQuery.ref().data?.movies.map(Movie.init) ?? [] + } + + private var featuredMovies: [Movie] { + /// TODO: build query that retrieves movies that are marked as "featured" + connector.listMoviesQuery + .ref({ optionalVars in + optionalVars.limit = 5 + optionalVars.orderByRating = .DESC + }) + .data?.movies.map(Movie.init) ?? [] + } +} + +extension HomeScreen { var body: some View { NavigationStack { ScrollView { TabView { - ForEach(Movie.featured) { movie in + ForEach(heroMovies) { movie in NavigationLink(value: movie) { - MovieTeaserView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) + MovieTeaserView(title: movie.title, subtitle: movie.description, imageUrl: movie.imageUrl) .matchedTransitionSource(id: movie.id, in: namespace) } - + .buttonStyle(.noHighlight) } } + .frame(height: 600) .navigationDestination(for: Movie.self) { movie in MovieCardView(showDetails: true, movie: movie) .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) } - .frame(height: 600) - .tabViewStyle(.page) .tabViewStyle(.page(indexDisplayMode: .always)) Group { - MovieListSection(namespace: namespace, title: "Top Movies", movies: Movie.topMovies) - MovieListSection(namespace: namespace, title: "Watch List", movies: Movie.watchList) - MovieListSection(namespace: namespace, title: "Featured", movies: Movie.featured) + MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) + MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) + MovieListSection(namespace: namespace, title: "Featured", movies: featuredMovies) } .navigationDestination(for: [Movie].self) { movies in MovieListScreen(namespace: namespace, movies: movies) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift index 91d476a..7bc11c7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift @@ -16,6 +16,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +import NukeUI import SwiftUI struct MovieTeaserView: View { @@ -25,20 +26,26 @@ struct MovieTeaserView: View { var body: some View { ZStack(alignment: .bottom) { - if let imageUrl = URL(string: imageUrl) { - AsyncImage(url: imageUrl) { phase in - if let image = phase.image { - image - .resizable() - .scaledToFill() - } else if phase.error != nil { - Color.red - .redacted(if: true) - } else { - Image(systemName: "photo.artframe") - .resizable() - .scaledToFill() - .redacted(reason: .placeholder) + GeometryReader { geometry in + if let imageUrl = URL(string: imageUrl) { + LazyImage(url: imageUrl) { state in + if let image = state.image { + image + .resizable() + .scaledToFill() + .frame(width: geometry.size.width) + .clipped() + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + } else if state.error != nil { + Color.red + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + .redacted(if: true) + } else { + Image(systemName: "photo.artframe") + .resizable() + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + .redacted(reason: .placeholder) + } } } } @@ -67,7 +74,8 @@ struct MovieTeaserView: View { var movie = Movie.mock MovieTeaserView( title: movie.title, - subtitle: movie.subtitle, + subtitle: movie.description, imageUrl: movie.imageUrl ) + .frame(maxHeight: 400) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift index c614202..f5dc324 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift @@ -27,7 +27,7 @@ struct MovieListScreen: View { ForEach(movies) { movie in MovieListRowView( title: movie.title, - subtitle: movie.subtitle, + subtitle: movie.description, imageUrl: movie.imageUrl ) .matchedTransitionSource(id: movie.id, in: namespace) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 5ef3bec..8a63887 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -17,22 +17,34 @@ // limitations under the License. import SwiftUI +import FirebaseDataConnect +import FriendlyFlixSDK -private struct SearchedView: View { +struct SearchedView: View { @Environment(\.isSearching) private var isSearching var namespace: Namespace.ID - var filteredMovies: [Movie] + var filteredMovies = [Movie]() + var connector = DataConnect.friendlyFlixConnector + + private var topMovies: [Movie] { + connector.listMoviesQuery + .ref({ optionalVars in + optionalVars.limit = 5 + optionalVars.orderByRating = .DESC + }) + .data?.movies.map(Movie.init) ?? [] + } var body: some View { if !isSearching { - MovieListSection(namespace: namespace, title: "Top Movies", movies: Movie.topMovies) + MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) CategoriesView() } else { ForEach(filteredMovies) { movie in NavigationLink(value: movie) { MovieListRowView( title: movie.title, - subtitle: movie.subtitle, + subtitle: movie.description, imageUrl: movie.imageUrl ) .matchedTransitionSource(id: movie.id, in: namespace) @@ -48,11 +60,17 @@ struct SearchScreen: View { @State private var isStatusBarHidden = false @Namespace private var namespace - var filteredMovies: [Movie] { - Movie.mockList.filter { $0.title.lowercased().contains(searchText.lowercased()) } + var connector = DataConnect.friendlyFlixConnector + + private var filteredMovies: [Movie] { + connector.listMoviesByPartialTitleQuery + .ref(searchTerm: searchText) + .data?.movies.map(Movie.init) ?? [] } +} +extension SearchScreen { var body: some View { NavigationStack { ScrollView { diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift new file mode 100644 index 0000000..7dd02ba --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift @@ -0,0 +1,35 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK + +extension Movie { + init(from: ListMoviesQuery.Data.Movie) { + self.title = from.title + self.description = from.description ?? "" + self.releaseYear = from.releaseYear + self.rating = from.rating + self.imageUrl = from.imageUrl + } + + init(from: ListMoviesByPartialTitleQuery.Data.Movie) { + self.title = from.title + self.description = from.description ?? "" + self.releaseYear = from.releaseYear + self.rating = from.rating + self.imageUrl = from.imageUrl + } +} + diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index 76e5d15..ffb7dc9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -22,9 +22,9 @@ import SwiftUI struct Movie: Identifiable, Hashable { let id = UUID() let title: String - let subtitle: String - let image: ImageResource + let description: String let releaseYear: Int? + var rating: Double? let imageUrl: String } @@ -32,57 +32,50 @@ extension Movie: Mockable { static var mockList: [Movie] = [ .init( title: "The Hitchhiker's Guide to the Galaxy", - subtitle: + description: "Mere seconds before the Earth is to be demolished by an alien construction crew, Arthur Dent is swept off the planet by his friend Ford Prefect, a researcher penning a new edition of \"The Hitchhiker's Guide to the Galaxy.\"", - image: .hitchhiker, releaseYear: 2005, imageUrl: "https://image.tmdb.org/t/p/w1280/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg" ), .init( title: "Interstellar", - subtitle: + description: "The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.", - image: .interstellar, releaseYear: 2005, imageUrl: "https://image.tmdb.org/t/p/w1280/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg" ), .init( title: "The Matrix", - subtitle: + description: "Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.", - image: .matrix, releaseYear: 1999, imageUrl: "https://image.tmdb.org/t/p/w1280/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg" ), .init( title: "Titanic", - subtitle: + description: "101-year-old Rose DeWitt Bukater tells the story of her life aboard the Titanic, 84 years later. A young Rose boards the ship with her mother and fiancé. Meanwhile, Jack Dawson and Fabrizio De Rossi win third-class tickets aboard the ship. Rose tells the whole story from Titanic's departure through to its death—on its first and last voyage—on April 15, 1912.", - image: .titanic, releaseYear: 1998, imageUrl: "https://image.tmdb.org/t/p/w1280/tuvoTDlqaLm7hFUROR6u0OUtwCW.jpg" ), .init( title: "Slow Horses", - subtitle: + description: "Follow a dysfunctional team of MI5 agents—and their obnoxious boss, the notorious Jackson Lamb—as they navigate the espionage world's smoke and mirrors to defend England from sinister forces.", - image: .slowhorses, releaseYear: 2022, imageUrl: "https://image.tmdb.org/t/p/w1280/dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg" ), .init( title: "Tomorrow Never Dies", - subtitle: + description: "A deranged media mogul is staging international incidents to pit the world's superpowers against each other. Now James Bond must take on this evil mastermind in an adrenaline-charged battle to end his reign of terror and prevent global pandemonium.", - image: .tomorrowneverdies, releaseYear: 1997, imageUrl: "https://image.tmdb.org/t/p/w1280/bkEJA84af63IpaOPP4CbbgTiTlL.jpg" ), .init( title: "The man from U.N.C.L.E.", - subtitle: + description: "At the height of the Cold War, a mysterious criminal organization plans to use nuclear weapons and technology to upset the fragile balance of power between the United States and Soviet Union. CIA agent Napoleon Solo and KGB agent Illya Kuryakin are forced to put aside their hostilities and work together to stop the evildoers in their tracks. The duo's only lead is the daughter of a missing German scientist, whom they must find soon to prevent a global catastrophe.", - image: .uncle, releaseYear: 2015, imageUrl: "https://image.tmdb.org/t/p/w1280/nFiu4lLhkyf1amaGaN6pNoUn5Ly.jpg" ), diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index 13f6496..1374837 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -72,7 +72,6 @@ struct CardView: View { dismissButton heroTitle() } - .frame(height: 450) .clipShape( UnevenRoundedRectangle( cornerRadii: .init( @@ -138,6 +137,7 @@ struct CardView: View { #Preview { CardView(showDetails: true) { GradientView(configuration: GradienConfiguration.sample) + .frame(height: 450) } heroTitle: { VStack(alignment: .leading) { Spacer() @@ -167,6 +167,7 @@ struct CardView: View { ScrollView { CardView(showDetails: false) { GradientView(configuration: GradienConfiguration.sample) + .frame(height: 450) } heroTitle: { VStack(alignment: .leading) { Spacer() @@ -192,6 +193,7 @@ struct CardView: View { } CardView(showDetails: false) { GradientView(configuration: GradienConfiguration.samples[1]) + .frame(height: 450) } heroTitle: { VStack(alignment: .leading) { Spacer() @@ -217,6 +219,7 @@ struct CardView: View { } CardView(showDetails: false) { GradientView(configuration: GradienConfiguration.samples[2]) + .frame(height: 450) } heroTitle: { VStack(alignment: .leading) { Spacer() diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift index 1ea4f45..5c52e98 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift @@ -17,6 +17,7 @@ // limitations under the License. import SwiftUI +import NukeUI struct MovieListRowView: View { var title: String @@ -26,25 +27,28 @@ struct MovieListRowView: View { var body: some View { HStack(alignment: .top) { if let imageUrl = URL(string: imageUrl) { - AsyncImage(url: imageUrl) { phase in - if let image = phase.image { + LazyImage(url: imageUrl) { state in + if let image = state.image { image .resizable() - .scaledToFill() + .aspectRatio(contentMode: .fill) .frame(width: 150, height: 75) - .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) - } else if phase.error != nil { + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + } else if state.error != nil { Color.red + .frame(width: 150, height: 75) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(if: true) } else { Image(systemName: "photo.artframe") .resizable() - .scaledToFill() + .aspectRatio(contentMode: .fill) .frame(width: 150, height: 75) - .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(reason: .placeholder) } } + .frame(width: 150, height: 75) } VStack(alignment: .leading, spacing: 4) { Text(title) @@ -62,13 +66,13 @@ struct MovieListRowView: View { #Preview { let movie = Movie.mock - MovieListRowView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) + MovieListRowView(title: movie.title, subtitle: movie.description, imageUrl: movie.imageUrl) } #Preview { NavigationStack { List(Movie.mockList) { movie in - MovieListRowView(title: movie.title, subtitle: movie.subtitle, imageUrl: movie.imageUrl) + MovieListRowView(title: movie.title, subtitle: movie.description, imageUrl: movie.imageUrl) } .listStyle(.plain) .navigationTitle("Movies") diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift index 6390a55..e33240c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift @@ -21,6 +21,14 @@ import SwiftUI struct SectionedMovie: Identifiable, Hashable { var id = UUID() var movie: Movie + + static func == (lhs: SectionedMovie, rhs: SectionedMovie) -> Bool { + lhs.id == rhs.id && lhs.movie.id == rhs.movie.id // Assuming MovieRepresentable has an id + } + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } } struct MovieListSection: View { @@ -49,8 +57,8 @@ struct MovieListSection: View { MovieTileView( title: sectionedMovie.movie.title, imageUrl: sectionedMovie.movie.imageUrl, - averageRating: 8.7, - userRating: 10.1 + averageRating: sectionedMovie.movie.rating ?? 0, + userRating: 10 ) .frame(maxWidth: 150, maxHeight: 300) .matchedTransitionSource(id: sectionedMovie.id, in: namespace) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift index a3b80d1..353b3b1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift @@ -17,12 +17,13 @@ // limitations under the License. import SwiftUI +import NukeUI struct MovieTileView: View { var title: String = "The Matrix" var imageUrl: String - var averageRating: Double = 8.7 - var userRating: Double = 10 + var averageRating: Double = 5.7 + var userRating: Double = 9 let gradient = LinearGradient( colors: [.blue, .green], @@ -35,23 +36,28 @@ struct MovieTileView: View { var body: some View { VStack(alignment: .leading) { if let imageUrl = URL(string: imageUrl) { - AsyncImage(url: imageUrl) { phase in - if let image = phase.image { + LazyImage(url: imageUrl) { state in + if let image = state.image { image .resizable() - .aspectRatio(contentMode: .fit) + .aspectRatio(contentMode: .fill) + .frame(width: 150, height: 200) .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) - } else if phase.error != nil { + } else if state.error != nil { Color.red + .frame(width: 150, height: 200) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(if: true) } else { Image(systemName: "photo.artframe") .resizable() - .aspectRatio(contentMode: .fit) + .aspectRatio(contentMode: .fill) + .frame(width: 150, height: 200) .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) .redacted(reason: .placeholder) } } + .frame(width: 150, height: 200) } Text(title) .lineLimit(1) @@ -71,9 +77,9 @@ struct MovieTileView: View { ForEach(Movie.featured) { movie in MovieTileView(title: movie.title, imageUrl: movie.imageUrl, - averageRating: 8.7, - userRating: 10.1) - .frame(maxWidth: 200, maxHeight: 300) + averageRating: 8, + userRating: 10) + .frame(width: 200, height: 300) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 05d07b1..52016e3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -1,47 +1,34 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - // swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17), - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"] - ), - ], - dependencies: [ - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), - ], - path: "Sources" - ), - ] + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") + ], + path: "Sources" + ) + ] ) + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 272907a..141e616 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -282,6 +282,47 @@ DataConnect.friendlyFlixConnector.searchAllQuery.execute(...) ``` +## ListMoviesByPartialTitleQuery +### Variables +#### Required +```swift + +let searchTerm: String = ... +``` + + + + +### Using the Query Reference +``` +struct MyView: View { + var listMoviesByPartialTitleQueryRef = DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.ref(...) + + var body: some View { + VStack { + if let data = listMoviesByPartialTitleQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await listMoviesByPartialTitleQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.execute(...) +``` + + # Mutations ## UpsertUserMutation @@ -292,7 +333,7 @@ DataConnect.friendlyFlixConnector.searchAllQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -308,7 +349,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -324,7 +365,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -342,7 +383,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -360,7 +401,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -376,7 +417,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 7755748..d7ca8d2 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,74 +1,69 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import FirebaseDataConnect import Foundation +import FirebaseCore +import FirebaseDataConnect + + + + + + + + public extension DataConnect { + static var friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect( - connectorConfig: FriendlyFlixConnector.connectorConfig, - callerSDKType: .generated - ) + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() + } public class FriendlyFlixConnector { + var dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig( - serviceId: "friendly-flix-service", - location: "us-central1", - connector: "friendly-flix" - ) + public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + // init operations + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, - port: Int = DataConnect.EmulatorDefaults.port) { - dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) } // MARK: Operations +public let upsertUserMutation: UpsertUserMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addReviewMutation: AddReviewMutation +public let updateReviewMutation: UpdateReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let listMoviesQuery: ListMoviesQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let searchAllQuery: SearchAllQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery + - public let upsertUserMutation: UpsertUserMutation - public let addFavoritedMovieMutation: AddFavoritedMovieMutation - public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation - public let addReviewMutation: AddReviewMutation - public let updateReviewMutation: UpdateReviewMutation - public let deleteReviewMutation: DeleteReviewMutation - public let listMoviesQuery: ListMoviesQuery - public let getMovieByIdQuery: GetMovieByIdQuery - public let getActorByIdQuery: GetActorByIdQuery - public let getCurrentUserQuery: GetCurrentUserQuery - public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery - public let searchAllQuery: SearchAllQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 29fb22a..ba7810c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -1,339 +1,431 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - import Foundation import FirebaseDataConnect + + public struct ActorKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension ActorKey: Codable { +extension ActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension ActorKey: Equatable { +extension ActorKey : Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey: Hashable { +extension ActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct FavoriteMovieKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension FavoriteMovieKey: Codable { +extension FavoriteMovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension FavoriteMovieKey: Equatable { +extension FavoriteMovieKey : Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey: Hashable { +extension FavoriteMovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct MovieActorKey { + public private(set) var movieId: UUID - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case movieId - - case actorId + + case movieId + + case actorId + } } -extension MovieActorKey: Codable { +extension MovieActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension MovieActorKey: Equatable { +extension MovieActorKey : Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey: Hashable { +extension MovieActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(actorId) + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + } } + + public struct MovieMetadataKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieMetadataKey: Codable { +extension MovieMetadataKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieMetadataKey: Equatable { +extension MovieMetadataKey : Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey: Hashable { +extension MovieMetadataKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct MovieKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieKey: Codable { +extension MovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieKey: Equatable { +extension MovieKey : Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey: Hashable { +extension MovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + public struct ReviewKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension ReviewKey: Codable { +extension ReviewKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension ReviewKey: Equatable { +extension ReviewKey : Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey: Hashable { +extension ReviewKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } + + public struct UserKey { + public private(set) var id: String + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension UserKey: Codable { +extension UserKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension UserKey: Equatable { +extension UserKey : Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension UserKey: Hashable { +extension UserKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 69a04df..7388825 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,2327 +1,3535 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +import Foundation +import FirebaseCore import FirebaseDataConnect -import Foundation + + + + + + + + + + + + + + + + + + + // MARK: Common Enums public enum OrderDirection: String, Codable { - case ASC - case DESC -} + case ASC = "ASC" + case DESC = "DESC" + } // End enum definitions -public class UpsertUserMutation { + + + + + + + + +public class UpsertUserMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - username: String + + + public var +username: String + + + + + + public init ( + +username: String + + + ) { + self.username = username + - public init(username: String) { - self.username = username + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.username == rhs.username + + return lhs.username == rhs.username + } - public func hash(into hasher: inout Hasher) { - hasher.combine(username) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} enum CodingKeys: String, CodingKey { + case username + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(username, forKey: .username, container: &container) + + } - } - public struct Data: Decodable { - public var - user_upsert: UserKey } - public func ref(username: String) -> MutationRef< - UpsertUserMutation.Data, - UpsertUserMutation.Variables - > { - var variables = UpsertUserMutation.Variables(username: username) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) - return ref as MutationRef - } - public func execute(username: String) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) +public var +user_upsert: UserKey - return try await ref.execute() } + + public func ref( + +username: String + + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } } -public class AddFavoritedMovieMutation { + + + + + +public class AddFavoritedMovieMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_upsert: FavoriteMovieKey } - public func ref(movieId: UUID) -> MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_upsert: FavoriteMovieKey - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedMovieMutation { + + + + + +public class DeleteFavoritedMovieMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + - public init(movieId: UUID) { - self.movieId = movieId + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - favorite_movie_delete: FavoriteMovieKey? } - public func ref(movieId: UUID) - -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > - } - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_delete: FavoriteMovieKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class AddReviewMutation { + + + + + +public class AddReviewMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable { - public var - review_insert: ReviewKey - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_insert: ReviewKey - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return ref as MutationRef } - public func execute(movieId: UUID, + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} - rating: Int, - reviewText: String) async throws -> OperationResult { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class UpdateReviewMutation { + +public class UpdateReviewMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable { - public var - review_update: ReviewKey? - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_update: ReviewKey? - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return ref as MutationRef } - public func execute(movieId: UUID, + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws - -> OperationResult { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteReviewMutation { +public class DeleteReviewMutation{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } - } - public struct Data: Decodable { - public var - review_delete: ReviewKey? } - public func ref(movieId: UUID) -> MutationRef< - DeleteReviewMutation.Data, - DeleteReviewMutation.Variables - > { - var variables = DeleteReviewMutation.Variables(movieId: movieId) + public struct Data: Decodable { - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) - return ref as MutationRef - } - public func execute(movieId: UUID) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) +public var +review_delete: ReviewKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } } -public class ListMoviesQuery { + + + + + +public class ListMoviesQuery{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - orderByRating: OrderDirection? - - @OptionalVariable - public var - orderByReleaseYear: OrderDirection? + + @OptionalVariable + public var +orderByRating: OrderDirection? - @OptionalVariable - public var - limit: Int? + + @OptionalVariable + public var +orderByReleaseYear: OrderDirection? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - } + + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + +} enum CodingKeys: String, CodingKey { + case orderByRating - + case orderByReleaseYear - + case limit + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode( - orderByReleaseYear, - forKey: .orderByReleaseYear, - container: &container - ) + + if $orderByReleaseYear.isSet { + try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - tags: [String]? +public var +id: UUID - public var - description: String? - - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +title: String - case title - case imageUrl - case releaseYear +public var +imageUrl: String - case genre - case rating - case tags +public var +releaseYear: Int? - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +tags: [String]? - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - ListMoviesQuery.Data, - ListMoviesQuery.Variables - > { - var variables = ListMoviesQuery.Variables() +public var +description: String? - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - if let optionalVars { - optionalVars(&variables) - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation - return try await refCast.execute() } + + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetMovieByIdQuery { + + + + + +public class GetMovieByIdQuery{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + - public init(id: UUID) { - self.id = id + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? - public var - rating: Double? +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - description: String? - public var - tags: [String]? +public var +id: UUID - public struct MovieMetadataMetadata: Decodable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - } - } - public var - metadata: [MovieMetadataMetadata] - public struct ActorMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +imageUrl: String - public var - name: String - public var - imageUrl: String - public var actorMainActorsKey: ActorKey { - return ActorKey( - id: id - ) - } +public var +releaseYear: Int? - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +genre: String? - case name - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +rating: Double? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +description: String? - public var - mainActors: [ActorMainActors] - public struct ActorSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String +public var +tags: [String]? - public var - imageUrl: String - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public struct MovieMetadataMetadata: Decodable { + - case name - case imageUrl - } +public var +director: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + enum CodingKeys: String, CodingKey { + + case director + + } - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var - supportingActors: [ActorSupportingActors] + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - reviewText: String? - public var - reviewDate: LocalDate - public var - rating: Int? - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String +public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { + - public var - username: String - public var userKey: UserKey { - return UserKey( - id: id - ) - } +public var +id: UUID - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +name: String - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) +public var +imageUrl: String - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } - public var - user: User + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case id + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } - case reviewText + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - case reviewDate + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] - case rating - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) +public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +id: UUID - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviews: [ReviewReviews] - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +name: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +imageUrl: String - case title - case imageUrl + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - case releaseYear + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } - case genre + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - case rating + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] - case description - case tags - case metadata - case mainActors - case supportingActors +public struct ReviewReviews: Decodable { + - case reviews - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +id: UUID - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +reviewText: String? - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +reviewDate: LocalDate - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) +public var +rating: Int? - mainActors = try codecHelper.decode( - [ActorMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [ActorSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - } - } - public var - movie: Movie? - } - public func ref(id: UUID) -> QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > { - var variables = GetMovieByIdQuery.Variables(id: id) +public struct User: Decodable ,Hashable, Equatable, Identifiable { + + - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id: id) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + } +} +public var +movie: Movie? - let refCast = ref as! QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetActorByIdQuery { + + + + + +public class GetActorByIdQuery{ + let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID - public init(id: UUID) { - self.id = id + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable { - public struct Actor: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String - public struct MovieMainActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Actor: Decodable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - tags: [String]? +public var +id: UUID - public var - imageUrl: String - public var movieMainActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +name: String - public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case genre - case tags - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +id: UUID - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [MovieMainActors] +public var +title: String - public struct MovieSupportingActors: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? +public var +genre: String? - public var - tags: [String]? - public var - imageUrl: String - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +tags: [String]? - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +imageUrl: String - case title - case genre + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - case tags + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } - case imageUrl - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { + - public var - supportingActors: [MovieSupportingActors] - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } +public var +id: UUID - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +title: String - case name - case imageUrl - case mainActors +public var +genre: String? - case supportingActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +tags: [String]? - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - mainActors = try codecHelper.decode( - [MovieMainActors].self, - forKey: .mainActors, - container: &container - ) +public var +imageUrl: String - supportingActors = try codecHelper.decode( - [MovieSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - } - } - public var - actor: Actor? + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + } - public func ref(id: UUID) -> QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > { - var variables = GetActorByIdQuery.Variables(id: id) + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + } +} +public var +supportingActors: [MovieSupportingActors] - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) + } - let refCast = ref as! QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > - return try await refCast.execute() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + } } +public var +actor: Actor? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetCurrentUserQuery{ -public class GetCurrentUserQuery { let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { - public struct Variables: OperationVariable {} + + + } public struct Data: Decodable { - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String - public struct ReviewReviews: Decodable { - public var - id: UUID - public var - rating: Int? - public var - reviewDate: LocalDate +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - public var - reviewText: String? - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +id: String - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +username: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ReviewReviews: Decodable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case reviewDate +public var +rating: Int? - case reviewText - case movie - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +reviewText: String? - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - reviews: [ReviewReviews] - public struct FavoriteMovieFavoriteMovies: Decodable { - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - imageUrl: String +public var +id: UUID - public var - releaseYear: Int? - public var - rating: Double? - public var - description: String? +public var +title: String - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable { - public var - director: String? + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case director - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - director = try codecHelper.decode( - String?.self, - forKey: .director, - container: &container - ) - } - } + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - public var - metadata: [MovieMetadataMetadata] + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct FavoriteMovieFavoriteMovies: Decodable { + - case imageUrl - case releaseYear - case rating - case description +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - case tags - case metadata - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +title: String - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +imageUrl: String - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +description: String? - enum CodingKeys: String, CodingKey { - case id - case username - case reviews +public var +tags: [String]? - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) +public struct MovieMetadataMetadata: Decodable { + - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } - public var - user: User? +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + } - public func ref( - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute( - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + } - let refCast = ref as! QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > - return try await refCast.execute() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + } } +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetIfFavoritedMovieQuery{ -public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect - public init(dataConnect: DataConnect) { + init(dataConnect: DataConnect) { self.dataConnect = dataConnect } public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable { - public struct FavoriteMovie: Decodable { - public var - movieId: UUID - enum CodingKeys: String, CodingKey { - case movieId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } - } - public var - favorite_movie: FavoriteMovie? - } +public struct FavoriteMovie: Decodable { + - public func ref(movieId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - } +public var +movieId: UUID - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) + - let refCast = ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - return try await refCast.execute() + + enum CodingKeys: String, CodingKey { + + case movieId + } -} -public class SearchAllQuery { - let dataConnect: DataConnect + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(dataConnect: DataConnect) { - self.dataConnect = dataConnect + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } +} +public var +favorite_movie: FavoriteMovie? - public static let OperationName = "SearchAll" - - public typealias Ref = QueryRefObservation - - public struct Variables: OperationVariable { - @OptionalVariable - public var - input: String? - - public var - minYear: Int - - public var - maxYear: Int + } - public var - minRating: Double + public func ref( + +movieId: UUID + + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - public var - maxRating: Double - public var - genre: String - public init(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, +public class SearchAllQuery{ - genre: String, + let dataConnect: DataConnect - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } - if let optionalVars { - optionalVars(&self) - } - } + public static let OperationName = "SearchAll" - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - } + public typealias Ref = QueryRefObservation - public func hash(into hasher: inout Hasher) { - hasher.combine(input) + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? - hasher.combine(minYear) + + + public var +minYear: Int - hasher.combine(maxYear) + + + public var +maxYear: Int - hasher.combine(minRating) + + + public var +minRating: Double - hasher.combine(maxRating) + + + public var +maxRating: Double - hasher.combine(genre) + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + enum CodingKeys: String, CodingKey { + case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable { - public struct MovieMoviesMatchingTitle: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String +public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { + - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case genre - case rating - case imageUrl - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct MovieMoviesMatchingDescription: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - title: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } - public var - genre: String? + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } - public var - rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public var - imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieMoviesMatchingDescription, - rhs: MovieMoviesMatchingDescription) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { + - case title - case genre +public var +id: UUID - case rating - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - moviesMatchingDescription: [MovieMoviesMatchingDescription] +public var +rating: Double? - public struct ActorActorsMatchingName: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +imageUrl: String - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } - public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - return lhs.id == rhs.id - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } - enum CodingKeys: String, CodingKey { - case id + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } - case name + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { + - public var - actorsMatchingName: [ActorActorsMatchingName] - public struct ReviewReviewsMatchingText: Decodable { - public var - id: UUID +public var +id: UUID - public var - rating: Int? - public var - reviewText: String? - public var - reviewDate: LocalDate +public var +name: String - public struct Movie: Decodable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +imageUrl: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case id + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } - case title - } + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie - public struct User: Decodable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public struct ReviewReviewsMatchingText: Decodable { + - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case username - } +public var +rating: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } +public var +reviewText: String? - public var - user: User - enum CodingKeys: String, CodingKey { - case id - case rating +public var +reviewDate: LocalDate - case reviewText - case reviewDate - case movie - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +id: UUID - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) +public var +title: String - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviewsMatchingText: [ReviewReviewsMatchingText] + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + } - public func ref(minYear: Int, + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie - maxYear: Int, - minRating: Double, - maxRating: Double, - genre: String, - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchAllQuery.Data, - SearchAllQuery.Variables - > { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) +public struct User: Decodable ,Hashable, Equatable, Identifiable { + - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro +public var +id: String + + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - public func execute(minYear: Int, + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] + + } + + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - maxYear: Int, - minRating: Double, - maxRating: Double, - genre: String, - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) - if let optionalVars { - optionalVars(&variables) +public class ListMoviesByPartialTitleQuery{ + + let dataConnect: DataConnect + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "ListMoviesByPartialTitle" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + public var +searchTerm: String + + + + + + public init ( + +searchTerm: String + + + ) { + self.searchTerm = searchTerm + + + + } + + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.searchTerm == rhs.searchTerm + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(searchTerm) + +} + + enum CodingKeys: String, CodingKey { + + case searchTerm + + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) + + } - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro + } + + public struct Data: Decodable { + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +genre: String? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - let refCast = ref as! QueryRefObservation - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + } } +public var +movies: [Movie] + + } + + public func ref( + +searchTerm: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + +searchTerm: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + diff --git a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml index e12fcf9..aac76c4 100644 --- a/Examples/FriendlyFlix/dataconnect/dataconnect.yaml +++ b/Examples/FriendlyFlix/dataconnect/dataconnect.yaml @@ -1,11 +1,11 @@ specVersion: "v1beta" -serviceId: "friendly-flix-service" +serviceId: "dataconnect" location: "us-central1" schema: source: "./schema" datasource: postgresql: - database: "friendly-flix-database" + database: "fdcdb" cloudSql: - instanceId: "my-cloud-sql" + instanceId: "fdc-sql" connectorDirs: ["./movie-connector"] diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql index 28bf389..d5fb47b 100644 --- a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -210,16 +210,18 @@ query SearchAll( # # The queries below are unused by the application, but are useful examples for more complex cases -# # List movies by partial title match -# query ListMoviesByPartialTitle($input: String!) @auth(level: PUBLIC) { -# movies(where: { title: { contains: $input } }) { -# id -# title -# genre -# rating -# imageUrl -# } -# } +# List movies by partial title match +query ListMoviesByPartialTitle($searchTerm: String!) @auth(level: PUBLIC) { + movies(where: { title: { contains: $searchTerm } }) { + id + title + imageUrl + releaseYear + genre + rating + description + } +} # # List movies by tag # query ListMoviesByTag($tag: String!) @auth(level: PUBLIC) { diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql index 00d4247..96260b9 100644 --- a/Examples/FriendlyFlix/dataconnect/schema/schema.gql +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -1,5 +1,5 @@ # Movies -# TODO: Fill out Movie table! +# TODO: Fill out Movie table type Movie # The below parameter values are generated by default with @table, and can be edited manually. @table { @@ -34,7 +34,7 @@ type MovieMetadata # TODO: Fill out Actor table type Actor @table { id: UUID! - imageUrl: String! + imageUrl: String! name: String! @col(name: "name", dataType: "varchar(30)") } @@ -47,7 +47,7 @@ type User id: String! @col(name: "user_auth") username: String! @col(name: "username", dataType: "varchar(50)") # The following are generated from the @ref in the Review table - # reviews_on_user + # reviews_on_user # movies_via_Review } From 8e4905470d50292bb48146857adfe0ba9c84291f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 28 Oct 2024 18:30:41 +0100 Subject: [PATCH 18/50] =?UTF-8?q?=E2=9C=A8=20Implement=20watch=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../FriendlyFlix/App/FriendlyFlixApp.swift | 18 +- .../AuthenticationService.swift | 10 + .../Features/Details/MovieCardView.swift | 52 +++- .../Features/Home/HomeScreen.swift | 13 +- .../Features/Library/LibraryScreen.swift | 26 +- .../Features/Search/SearchScreen.swift | 2 +- .../Model/Movie+DataConnect.swift | 11 + .../FriendlyFlix/Model/Movie.swift | 18 +- .../app/FriendlyFlixSDK/README.md | 33 +++ .../Sources/FriendlyFlixClient.swift | 2 + .../Sources/FriendlyFlixOperations.swift | 230 ++++++++++++++++++ .../dataconnect/movie-connector/queries.gql | 30 +-- 12 files changed, 419 insertions(+), 26 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index cb8c246..dcc90f3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -18,6 +18,9 @@ import SwiftUI import Firebase +import FirebaseAuth +import FirebaseDataConnect +import FriendlyFlixSDK @main struct FriendlyFlixApp: App { @@ -31,15 +34,26 @@ struct FriendlyFlixApp: App { #endif } - init () { + var authenticationService: AuthenticationService? + + init() { loadRocketSimConnect() FirebaseApp.configure() + + authenticationService = AuthenticationService() + authenticationService?.onSignUp { user in + print("User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")") + let userName = String(user.email?.split(separator: "@").first ?? "(unknown)") + Task { + try await DataConnect.friendlyFlixConnector.upsertUserMutation.execute(username: userName) + } + } } var body: some Scene { WindowGroup { RootView() - .environment(AuthenticationService()) + .environment(authenticationService) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index 0fc20b4..0d01535 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -44,6 +44,11 @@ class AuthenticationService { } } + private var onSignUp: ((User) -> Void)? + public func onSignUp(_ action: @escaping (User) -> Void) { + onSignUp = action + } + func signInWithEmailPassword(email: String, password: String) async throws { try await Auth.auth().signIn(withEmail: email, password: password) authenticationState = .authenticated @@ -51,6 +56,11 @@ class AuthenticationService { func signUpWithEmailPassword(email: String, password: String) async throws { try await Auth.auth().createUser(withEmail: email, password: password) + + if let onSignUp, let user = Auth.auth().currentUser { + onSignUp(user) + } + authenticationState = .authenticated } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index ae63dd0..d618e61 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -19,12 +19,43 @@ import SwiftUI import NukeUI +import FirebaseDataConnect +import FriendlyFlixSDK struct MovieCardView: View { - var showDetails: Bool = false + public var showDetails: Bool = false + public var movie: Movie - var movie: Movie + private var connector = DataConnect.friendlyFlixConnector + public init(showDetails: Bool, movie: Movie) { + self.showDetails = showDetails + self.movie = movie + + isFavouriteRef = connector.getIfFavoritedMovieQuery.ref(movieId: movie.id) + } + + private let isFavouriteRef: QueryRefObservation + private var isFavourite: Bool { + isFavouriteRef.data?.favorite_movie?.movieId != nil + } + + func toggleFavourite() { + Task { + if isFavourite { + let _ = try await connector.deleteFavoritedMovieMutation.execute(movieId: movie.id) + let _ = try await isFavouriteRef.execute() + } + else { + let _ = try await connector.addFavoritedMovieMutation.execute(movieId: movie.id) + let _ = try await isFavouriteRef.execute() + } + } + } + +} + +extension MovieCardView { var body: some View { CardView(showDetails: showDetails) { if let imageUrl = URL(string: movie.imageUrl) { @@ -71,8 +102,25 @@ struct MovieCardView: View { } } details: { Text(movie.title) + Button { + toggleFavourite() + } label: { + Label( + isFavourite ? "Remove from watch list" : "Add to watch list", + systemImage: isFavourite ? "heart.slash" :"heart" + ) + } + // MovieDetailsView(movie: movie) } + .task { + do { + let _ = try await isFavouriteRef.execute() + } + catch { + print(error) + } + } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index 151583f..79e5953 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -54,9 +54,9 @@ struct HomeScreen: View { .data?.movies.map(Movie.init) ?? [] } + let watchListRef: QueryRefObservation private var watchList: [Movie] { - /// TODO: build a query that retrieves the user's watch list - connector.listMoviesQuery.ref().data?.movies.map(Movie.init) ?? [] + watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } private var featuredMovies: [Movie] { @@ -68,6 +68,10 @@ struct HomeScreen: View { }) .data?.movies.map(Movie.init) ?? [] } + + init() { + watchListRef = connector.getUserFavoriteMoviesQuery.ref() + } } extension HomeScreen { @@ -93,6 +97,11 @@ extension HomeScreen { Group { MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) + .onAppear { + Task { + try await watchListRef.execute() + } + } MovieListSection(namespace: namespace, title: "Featured", movies: featuredMovies) } .navigationDestination(for: [Movie].self) { movies in diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index 64ede9e..f7c388a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -17,19 +17,39 @@ // limitations under the License. import SwiftUI +import FirebaseDataConnect +import FriendlyFlixSDK struct LibraryScreen: View { @Namespace var namespace @Environment(AuthenticationService.self) var authenticationViewModel + private var connector = DataConnect.friendlyFlixConnector + + init() { + watchListRef = connector.getUserFavoriteMoviesQuery.ref() + } + + private let watchListRef: QueryRefObservation + private var watchList: [Movie] { + watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] + } +} + +extension LibraryScreen { var body: some View { - @Bindable var authenticationViewModel = authenticationViewModel NavigationStack { ScrollView { if authenticationViewModel.authenticationState == .authenticated { Group { - MovieListSection(namespace: namespace, title: "Watch List", movies: Movie.watchList) - MovieListSection(namespace: namespace, title: "Favourites", movies: Movie.featured) + MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) + .onAppear { + Task { + try await watchListRef.execute() + } + } + + // TODO: insert section with list of all movies the user has rated } .padding() } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 8a63887..5b025ff 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -64,7 +64,7 @@ struct SearchScreen: View { private var filteredMovies: [Movie] { connector.listMoviesByPartialTitleQuery - .ref(searchTerm: searchText) + .ref(searchTerm: searchText.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) .data?.movies.map(Movie.init) ?? [] } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift index 7dd02ba..20d7e3a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift @@ -17,6 +17,7 @@ import FriendlyFlixSDK extension Movie { init(from: ListMoviesQuery.Data.Movie) { + self.id = from.id self.title = from.title self.description = from.description ?? "" self.releaseYear = from.releaseYear @@ -25,11 +26,21 @@ extension Movie { } init(from: ListMoviesByPartialTitleQuery.Data.Movie) { + self.id = from.id self.title = from.title self.description = from.description ?? "" self.releaseYear = from.releaseYear self.rating = from.rating self.imageUrl = from.imageUrl } + + init(from: GetUserFavoriteMoviesQuery.Data.User.FavoriteMovieFavoriteMovies) { + self.id = from.movie.id + self.title = from.movie.title + self.description = from.movie.description ?? "" + self.releaseYear = from.movie.releaseYear + self.rating = from.movie.rating + self.imageUrl = from.movie.imageUrl + } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index ffb7dc9..b55a544 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -20,12 +20,28 @@ import Foundation import SwiftUI struct Movie: Identifiable, Hashable { - let id = UUID() + let id: UUID let title: String let description: String let releaseYear: Int? var rating: Double? let imageUrl: String + + init( + id: UUID = UUID(), + title: String, + description: String, + releaseYear: Int?, + rating: Double? = nil, + imageUrl: String + ) { + self.id = id + self.title = title + self.description = description + self.releaseYear = releaseYear + self.rating = rating + self.imageUrl = imageUrl + } } extension Movie: Mockable { diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 141e616..10b2114 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -323,6 +323,39 @@ DataConnect.friendlyFlixConnector.listMoviesByPartialTitleQuery.execute(...) ``` +## GetUserFavoriteMoviesQuery + + +### Using the Query Reference +``` +struct MyView: View { + var getUserFavoriteMoviesQueryRef = DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.ref(...) + + var body: some View { + VStack { + if let data = getUserFavoriteMoviesQueryRef.data { + // use data in View + } + else { + Text("Loading...") + } + } + .task { + do { + let _ = try await getUserFavoriteMoviesQueryRef.execute() + } catch { + } + } + } +} +``` + +### One-shot execute +``` +DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) +``` + + # Mutations ## UpsertUserMutation diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index d7ca8d2..62d6203 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -43,6 +43,7 @@ public class FriendlyFlixConnector { self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } @@ -64,6 +65,7 @@ public let getCurrentUserQuery: GetCurrentUserQuery public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery public let searchAllQuery: SearchAllQuery public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 7388825..e871dd7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -3533,3 +3533,233 @@ searchTerm: String } + + + + +public class GetUserFavoriteMoviesQuery{ + + let dataConnect: DataConnect + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } + + public static let OperationName = "GetUserFavoriteMovies" + + public typealias Ref = QueryRefObservation + + public struct Variables: OperationVariable { + + + + } + + public struct Data: Decodable { + + + + +public struct User: Decodable { + + + + + +public struct FavoriteMovieFavoriteMovies: Decodable { + + + + + +public struct Movie: Decodable ,Hashable, Equatable, Identifiable { + + + +public var +id: UUID + + + +public var +title: String + + + +public var +genre: String? + + + +public var +imageUrl: String + + + +public var +releaseYear: Int? + + + +public var +rating: Double? + + + +public var +description: String? + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + + enum CodingKeys: String, CodingKey { + + case favoriteMovies + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql index d5fb47b..41cd670 100644 --- a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -313,19 +313,19 @@ query ListMoviesByPartialTitle($searchTerm: String!) @auth(level: PUBLIC) { # } # # Get favorite movies by user ID -# query GetUserFavoriteMovies @auth(level: USER) { -# user(id_expr: "auth.uid") { -# favorite_movies_on_user { -# movie { -# id -# title -# genre -# imageUrl -# releaseYear -# rating -# description -# } -# } -# } -# } +query GetUserFavoriteMovies @auth(level: USER) { + user(id_expr: "auth.uid") { + favoriteMovies: favorite_movies_on_user { + movie { + id + title + genre + imageUrl + releaseYear + rating + description + } + } + } +} # # end of example queries \ No newline at end of file From 75f13874033c53905c5c3b36697e1d2837ffcd1b Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:25:47 +0100 Subject: [PATCH 19/50] =?UTF-8?q?=F0=9F=94=A5=20Remove=20Sign=20in=20with?= =?UTF-8?q?=20Apple=20for=20now?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Authentication/AuthenticationScreen.swift | 30 +------------------ 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index ebe451f..8fe738d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -90,12 +90,7 @@ struct AuthenticationScreen: View { extension AuthenticationScreen { var body: some View { VStack { -// Image("login") -// .resizable() -// .aspectRatio(contentMode: .fit) -// .frame(minHeight: 300, maxHeight: 400) -// Text(viewModel.flow == .login ? "Log in" : "Sign up") - Text("Welcome") + Text("Welcome to FriendlyFlix") .font(.largeTitle) .fontWeight(.bold) .frame(maxWidth: .infinity, alignment: .leading) @@ -170,29 +165,6 @@ extension AuthenticationScreen { .frame(maxWidth: .infinity) .buttonStyle(.borderedProminent) - HStack { - VStack { Divider() } - Text("or") - VStack { Divider() } - } - - if flow == .login { - SignInWithAppleButton(.signIn) { request in - } onCompletion: { result in - } - .signInWithAppleButtonStyle(colorScheme == .light ? .black : .white) - .frame(maxWidth: .infinity, minHeight: 50, maxHeight: 50) - .cornerRadius(8) - } - else { - SignInWithAppleButton(.signUp) { request in - } onCompletion: { result in - } - .signInWithAppleButtonStyle(colorScheme == .light ? .black : .white) - .frame(maxWidth: .infinity, minHeight: 50, maxHeight: 50) - .cornerRadius(8) - } - HStack { Text(flow == .login ? "Don't have an account yet?" : "Already have an account?") Button(action: { From 113682c35f340cd8a775e61984b64418d46c9237 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:28:25 +0100 Subject: [PATCH 20/50] =?UTF-8?q?=F0=9F=94=A5=20Simplify=20account=20scree?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Authentication/AccountScreen.swift | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift index 9177f26..6ee5a14 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -57,12 +57,6 @@ extension AccountScreen { } } - Section { - Button(role: .destructive, action: {}) { - Text("Clear viewing history") - } - } - Section { Button(action: signOut) { Text("Sign out") @@ -84,4 +78,5 @@ extension AccountScreen { #Preview { AccountScreen() + .environment(AuthenticationService()) } From 62d75b10a22d05b2b2d7063080c26b6d4612d4db Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:46:42 +0100 Subject: [PATCH 21/50] =?UTF-8?q?=F0=9F=94=A5=20Remove=20categories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Categories/CategoriesView.swift | 55 ----------- .../Categories/CategoryCardView.swift | 94 ------------------- .../Features/Search/SearchScreen.swift | 1 - 3 files changed, 150 deletions(-) delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift deleted file mode 100644 index 37d8acc..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoriesView.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// CategoriesView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 17.10.24. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import SwiftUI - -struct CategoriesView: View { - let columns = [ - GridItem(.flexible(), spacing: 12), - GridItem(.flexible()), - ] - - var body: some View { - ScrollView { - LazyVGrid(columns: columns, spacing: 12) { - ForEach(0..<16) { index in - CategoryCardView { - GradientView(configuration: .samples[index % 3]) - } title: { - VStack(alignment: .leading) { - Spacer() - Text("Free for Everyone") - .font(.system(size: UIFontMetrics.default.scaledValue(for: 18), weight: .semibold)) - } - .foregroundColor(Color(UIColor.systemGroupedBackground)) - .padding() - } - .frame(height: 100) - } - } - } - } -} - -#Preview { - NavigationStack { - CategoriesView() - .padding(.horizontal, 16) - .navigationTitle("Categories") - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift deleted file mode 100644 index ef42109..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Categories/CategoryCardView.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// CategoryCardView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 15.10.24. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import SwiftUI - -struct CategoryCardView: View { - var background: () -> Hero - var title: () -> Title - - public init(@ViewBuilder background: @escaping () -> Hero, - @ViewBuilder title: @escaping () -> Title) { - self.background = background - self.title = title - } - - - var body: some View { - VStack(spacing: 0) { - ZStack(alignment: .topLeading) { - background() - title() - } - .clipShape( - UnevenRoundedRectangle( - cornerRadii: .init( - topLeading: 16, - bottomLeading: 16, - bottomTrailing: 16, - topTrailing: 16 - ), - style: .continuous - ) - ) - } - } -} - -#Preview { - CategoryCardView { - GradientView(configuration: .sample) - } title: { - VStack(alignment: .leading) { - Spacer() - Text("Science Fiction") - .font(.title) - } - .foregroundColor(Color(UIColor.systemGroupedBackground)) - .padding() - } -} - -#Preview { - let columns = [ - GridItem(.flexible(), spacing: 12), - GridItem(.flexible()), - ] - NavigationStack { - ScrollView { - LazyVGrid(columns: columns, spacing: 12) { - ForEach(0..<16) { index in - CategoryCardView { - GradientView(configuration: .samples[index % 3]) - } title: { - VStack(alignment: .leading) { - Spacer() - Text("Free for Everyone") - .font(.system(size: UIFontMetrics.default.scaledValue(for: 18), weight: .semibold)) - } - .foregroundColor(Color(UIColor.systemGroupedBackground)) - .padding() - } - .frame(height: 100) - } - } - } - .padding(.horizontal, 16) - .navigationTitle("Categories") - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 5b025ff..58ebd96 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -38,7 +38,6 @@ struct SearchedView: View { var body: some View { if !isSearching { MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) - CategoriesView() } else { ForEach(filteredMovies) { movie in NavigationLink(value: movie) { From 0b1e11bb1db8344333dcdb7aed9c9ea47a706637 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:47:06 +0100 Subject: [PATCH 22/50] =?UTF-8?q?=E2=9C=A8=20Improve=20empty=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Library/LibraryScreen.swift | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index f7c388a..5461afb 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -22,10 +22,14 @@ import FriendlyFlixSDK struct LibraryScreen: View { @Namespace var namespace - @Environment(AuthenticationService.self) var authenticationViewModel + @Environment(AuthenticationService.self) var authenticationService private var connector = DataConnect.friendlyFlixConnector + private var isSignedIn: Bool { + authenticationService.user != nil + } + init() { watchListRef = connector.getUserFavoriteMoviesQuery.ref() } @@ -34,13 +38,17 @@ struct LibraryScreen: View { private var watchList: [Movie] { watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } + + private func presentSignInDialog() { + authenticationService.presentingAuthenticationDialog.toggle() + } } extension LibraryScreen { var body: some View { NavigationStack { ScrollView { - if authenticationViewModel.authenticationState == .authenticated { + if isSignedIn { Group { MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) .onAppear { @@ -48,7 +56,6 @@ extension LibraryScreen { try await watchListRef.execute() } } - // TODO: insert section with list of all movies the user has rated } .padding() @@ -73,11 +80,16 @@ extension LibraryScreen { } } .overlay { - if authenticationViewModel.authenticationState == .unauthenticated { + if !isSignedIn { ContentUnavailableView { Label("Your library is empty", systemImage: "rectangle.on.rectangle.slash") } description: { - Text("Your watch list and favourites will appear here.") + VStack { + Text("Your watch list and favourites will appear here once you sign in.") + Button(action: presentSignInDialog) { + Text("Sign in") + } + } } } } From d70ab9182fda0d8d72cba8faeedd8f5cdab3ae17 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:47:32 +0100 Subject: [PATCH 23/50] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Clean=20up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../AuthenticationToolbarButton.swift | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift index 729585c..35c4c36 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -19,20 +19,22 @@ import SwiftUI struct AuthenticationToolbarButton: View { - @Environment(AuthenticationService.self) var viewModel + @Environment(AuthenticationService.self) var authenticationService - var body: some View { - Button(action: onButtonTapped) { - Image(systemName: viewModel.authenticationState == .unauthenticated ? "person.circle" : "person.circle.fill") + private func onButtonTapped() { + if authenticationService.authenticationState == .unauthenticated { + authenticationService.presentingAuthenticationDialog.toggle() + } + else { + authenticationService.presentingAccountDialog.toggle() } } +} - func onButtonTapped() { - if viewModel.authenticationState == .unauthenticated { - viewModel.presentingAuthenticationDialog.toggle() - } - else { - viewModel.presentingAccountDialog.toggle() +extension AuthenticationToolbarButton { + var body: some View { + Button(action: onButtonTapped) { + Image(systemName: authenticationService.authenticationState == .unauthenticated ? "person.circle" : "person.circle.fill") } } } From 4baf3f94fe939265ad6a8eb478a06754e852d5fa Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 1 Nov 2024 12:47:51 +0100 Subject: [PATCH 24/50] =?UTF-8?q?=E2=9C=A8=20Show=20watch=20list=20only=20?= =?UTF-8?q?for=20signed=20in=20users?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Home/HomeScreen.swift | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index 79e5953..0a6127a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -26,6 +26,10 @@ struct HomeScreen: View { private var connector = DataConnect.friendlyFlixConnector + private var isSignedIn: Bool { + authenticationService.user != nil + } + private func mapMovie(_ listMovie: ListMoviesQuery.Data.Movie) -> Movie { .init( title: listMovie.title, @@ -59,16 +63,6 @@ struct HomeScreen: View { watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } - private var featuredMovies: [Movie] { - /// TODO: build query that retrieves movies that are marked as "featured" - connector.listMoviesQuery - .ref({ optionalVars in - optionalVars.limit = 5 - optionalVars.orderByRating = .DESC - }) - .data?.movies.map(Movie.init) ?? [] - } - init() { watchListRef = connector.getUserFavoriteMoviesQuery.ref() } @@ -96,13 +90,14 @@ extension HomeScreen { Group { MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) - MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) - .onAppear { - Task { - try await watchListRef.execute() + if isSignedIn { + MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) + .onAppear { + Task { + try await watchListRef.execute() + } } - } - MovieListSection(namespace: namespace, title: "Featured", movies: featuredMovies) + } } .navigationDestination(for: [Movie].self) { movies in MovieListScreen(namespace: namespace, movies: movies) From 9d203fb03c60c55e64fc26e619f97ec791356cf3 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 4 Nov 2024 15:33:47 +0100 Subject: [PATCH 25/50] =?UTF-8?q?=E2=9C=A8=20Favourite=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Details/MovieCardView.swift | 54 ++++++++++------ .../Features/Details/MovieDetailsView.swift | 44 +++++++++++++ .../Utilities/String+Placeholder.swift | 21 ++++++ .../FriendlyFlix/Views/CardView.swift | 64 +++++++------------ 4 files changed, 123 insertions(+), 60 deletions(-) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index d618e61..dd7dcf5 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -23,11 +23,12 @@ import FirebaseDataConnect import FriendlyFlixSDK struct MovieCardView: View { - public var showDetails: Bool = false - public var movie: Movie - + @Environment(\.dismiss) private var dismiss private var connector = DataConnect.friendlyFlixConnector + private var showDetails: Bool = false + private var movie: Movie + public init(showDetails: Bool, movie: Movie) { self.showDetails = showDetails self.movie = movie @@ -35,12 +36,14 @@ struct MovieCardView: View { isFavouriteRef = connector.getIfFavoritedMovieQuery.ref(movieId: movie.id) } + // MARK: - Favourite handling + private let isFavouriteRef: QueryRefObservation private var isFavourite: Bool { isFavouriteRef.data?.favorite_movie?.movieId != nil } - func toggleFavourite() { + private func toggleFavourite() { Task { if isFavourite { let _ = try await connector.deleteFavoritedMovieMutation.execute(movieId: movie.id) @@ -52,7 +55,6 @@ struct MovieCardView: View { } } } - } extension MovieCardView { @@ -101,17 +103,33 @@ extension MovieCardView { .background(.thinMaterial) } } details: { - Text(movie.title) - Button { - toggleFavourite() - } label: { - Label( - isFavourite ? "Remove from watch list" : "Add to watch list", - systemImage: isFavourite ? "heart.slash" :"heart" - ) + MovieDetailsView(movie: movie) + } + .toolbar { + ToolbarItem { + Button { + toggleFavourite() + } label: { + Image(systemName: isFavourite ? "heart.fill" : "heart") + .font(.headline) + .foregroundColor(.white) + .frame(width: 30, height: 30) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + } + } + ToolbarItem { + Button { + dismiss() + } label: { + Image(systemName: "xmark") + .font(.headline) + .foregroundColor(.white) + .frame(width: 30, height: 30) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + } } - -// MovieDetailsView(movie: movie) } .task { do { @@ -124,6 +142,6 @@ extension MovieCardView { } } -// #Preview { -// MovieCardView(showDetails: true, gradientConfiguration: GradienConfiguration.sample) -// } + #Preview { + MovieCardView(showDetails: true, movie: Movie.mock) + } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift new file mode 100644 index 0000000..e69c2ac --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -0,0 +1,44 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseDataConnect +import FriendlyFlixSDK +import SwiftUI + +struct MovieDetailsView: View { + var movie: Movie + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + // description + VStack(alignment: .leading, spacing: 10) { + Text("About") + .font(.title2) + .bold() + .unredacted() + + Text(movie.description) + .font(.body) + HStack { + Spacer() + } + } + } + .padding() + } +} + +#Preview { + MovieDetailsView(movie: Movie.mock) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift new file mode 100644 index 0000000..1c7b7af --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift @@ -0,0 +1,21 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String { + static func placeholder(length: Int) -> String { + String(Array(repeating: "X", count: length)) + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index 1374837..adb06dc 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -43,33 +43,10 @@ struct CardView: View { self.details = details } - @ViewBuilder - var dismissButton: some View { - if showDetails { - HStack { - Spacer() - Button { - dismiss() - } label: { - Image(systemName: "xmark") - .font(.headline) - .foregroundColor(.white) - .frame(width: 30, height: 30) - .background(Color.black.opacity(0.6)) - .clipShape(Circle()) - } - .padding([.top, .trailing], 30) - } - } else { - EmptyView() - } - } - var cardView: some View { VStack(spacing: 0) { ZStack(alignment: .topLeading) { hero - dismissButton heroTitle() } .clipShape( @@ -105,6 +82,7 @@ struct CardView: View { .statusBarHidden() } .ignoresSafeArea() + // Start: drag down to pop back .background(Color(UIColor.secondarySystemBackground)) .scrollIndicators(scaleFactor < 1 ? .hidden : .automatic, axes: .vertical) @@ -135,30 +113,32 @@ struct CardView: View { } #Preview { - CardView(showDetails: true) { - GradientView(configuration: GradienConfiguration.sample) - .frame(height: 450) - } heroTitle: { - VStack(alignment: .leading) { - Spacer() - Text("Here be titles") - .font(.title) - Text("And subtitles") - .font(.title3) - } - .foregroundColor(Color(UIColor.systemGroupedBackground)) - .padding() - } details: { - VStack { - Text( + NavigationStack { + CardView(showDetails: true) { + GradientView(configuration: GradienConfiguration.sample) + .frame(height: 450) + } heroTitle: { + VStack(alignment: .leading) { + Spacer() + Text("Here be titles") + .font(.title) + Text("And subtitles") + .font(.title3) + } + .foregroundColor(Color(UIColor.systemGroupedBackground)) + .padding() + } details: { + VStack { + Text( """ Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. """ - ) - .font(.body) - .padding() + ) + .font(.body) + .padding() + } } } } From 4ed5d6543b062a78eadfb0c048ad34c3b4c3b148 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 4 Nov 2024 18:50:32 +0100 Subject: [PATCH 26/50] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20More=20movie=20detai?= =?UTF-8?q?ls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../Features/Details/MovieDetailsView.swift | 123 +++++++++++++++++- .../Features/Reviews/MovieReviewCard.swift | 62 +++++++++ .../Features/Reviews/StarRatingView.swift | 39 ++++++ .../FriendlyFlix/Model/Movie.swift | 54 +++++++- .../Sources/FriendlyFlixClient.swift | 4 +- .../Sources/FriendlyFlixKeys.swift | 14 ++ .../Sources/FriendlyFlixOperations.swift | 102 ++++++++------- .../.dataconnect/schema/main/mutation.gql | 63 +++++++++ .../.dataconnect/schema/prelude.gql | 83 +++++++----- 9 files changed, 463 insertions(+), 81 deletions(-) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift index e69c2ac..7b825bd 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -15,10 +15,49 @@ import FirebaseDataConnect import FriendlyFlixSDK import SwiftUI +import NukeUI struct MovieDetailsView: View { - var movie: Movie + private var movie: Movie + private var movieDetails: MovieDetails? { + DataConnect.friendlyFlixConnector + .getMovieByIdQuery + .ref(id: movie.id) + .data?.movie.map { movieDetails in + MovieDetails( + title: movieDetails.title, + description: movieDetails.description ?? "", + releaseYear: movieDetails.releaseYear, + rating: movieDetails.rating ?? 0, + imageUrl: movieDetails.imageUrl, + mainActors: movieDetails.mainActors.map({ mainActor in + MovieActor(id: mainActor.id, + name: mainActor.name, + imageUrl: mainActor.imageUrl) + }), + supportingActors: movieDetails.supportingActors.map({ supportingActor in + MovieActor(id: supportingActor.id, + name: supportingActor.name, + imageUrl: supportingActor.imageUrl) + }), + reviews: movieDetails.reviews.map({ review in + Review(id: review.id, + reviewText: review.reviewText ?? "", + rating: review.rating ?? 0, + userName: review.user.username) + }) + ) + } + } + + public init(movie: Movie) { + self.movie = movie + } + +} + +extension MovieDetailsView { var body: some View { VStack(alignment: .leading, spacing: 10) { // description @@ -34,11 +73,93 @@ struct MovieDetailsView: View { Spacer() } } + + if let movieDetails { + if !movieDetails.mainActors.isEmpty { + actorsSection(title: "Main actors", actors: movieDetails.mainActors) + } + if !movieDetails.supportingActors.isEmpty { + actorsSection(title: "Supporting actors", actors: movieDetails.supportingActors) + } + + // Reviews + DetailsSection("Ratings & Reviews") { + VStack(alignment: .leading) { + HStack(alignment: .center) { + Text("\(movieDetails.rating, specifier: "%.1f")") + .font(.system(size: 64, weight: .bold)) + Spacer() + VStack(alignment: .trailing) { + StarRatingView(rating: Double(movieDetails.rating)) + Text("23 Ratings") + .font(.title) + .bold() + } + } + Text("Most Helpful Reviews") + .font(.title3) + .bold() + ScrollView(.horizontal) { + LazyHStack { + ForEach(movieDetails.reviews) { review in + MovieReviewCard(title: "Feedback", + rating: Double(review.rating), + reviewerName: review.userName, + review: review.reviewText) + .frame(width: 350) + } + } + .scrollTargetLayout() + } + .scrollTargetBehavior(.viewAligned) + .scrollIndicators(.hidden) + } + } + } } .padding() } } +extension MovieDetailsView { + func actorsSection(title: String, actors: [MovieActor]) -> some View { + DetailsSection(title) { + ScrollView(.horizontal) { + LazyHStack { + ForEach(actors, id: \.id) { actor in + VStack(alignment: .center) { + if let imageUrl = URL(string: actor.imageUrl) { + LazyImage(url: imageUrl) { state in + if let image = state.image { + image + .resizable() + .scaledToFill() + .frame(width: 96, height: 96, alignment: .center) + .clipShape(Circle()) + } else if state.error != nil { + Color.red + .redacted(if: true) + } else { + Image(systemName: "person.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 96, height: 96, alignment: .center) + .redacted(reason: .placeholder) + .clipShape(Circle()) + } + } + } + Text(actor.name) + .font(.headline) + } + .padding(.horizontal, 8) + } + } + } + } + } +} + #Preview { MovieDetailsView(movie: Movie.mock) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift new file mode 100644 index 0000000..825dcae --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift @@ -0,0 +1,62 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +import SwiftUI + +struct MovieReviewCard: View { + var title: String + var rating: Double + var reviewerName: String + var review: String + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text(title) + .font(.headline) + HStack { + StarRatingView(rating: rating) + Text("·") + Text(reviewerName) + } + .font(.subheadline) + Text(review) + Spacer() + } + .padding(16) + .frame(height: 200) + .background(Color(UIColor.secondarySystemBackground)) + .clipShape( + UnevenRoundedRectangle( + cornerRadii: .init( + topLeading: 16, + bottomLeading: 16, + bottomTrailing: 16, + topTrailing: 16), + style: .continuous)) + } +} + +#Preview { + ScrollView { + MovieReviewCard( + title: "Really great", + rating: 4.5, + reviewerName: "John Doe", + review: + "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." + ) + .padding() + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift new file mode 100644 index 0000000..70f5b1e --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift @@ -0,0 +1,39 @@ +// Copyright © 2024 Google LLC. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +import SwiftUI + +struct StarRatingView: View { + var rating: Double + + var body: some View { + HStack(spacing: 4) { + ForEach(0..<5) { index in + Image(systemName: self.starType(for: index)) + .foregroundColor(.yellow) + } + } + } + + func starType(for index: Int) -> String { + if rating > Double(index) + 0.75 { + return "star.fill" + } else if rating > Double(index) + 0.25 { + return "star.lefthalf.fill" + } else { + return "star" + } + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index b55a544..c7ffa27 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -19,6 +19,55 @@ import Foundation import SwiftUI +struct Review: Identifiable, Hashable { + let id: UUID + var reviewText: String + var rating: Int + var userName: String +} + +struct MovieActor: Identifiable, Hashable { + var id: UUID + var name: String + var imageUrl: String +} + + +struct MovieDetails: Identifiable, Hashable { + let id: UUID + let title: String + let description: String + let releaseYear: Int? + var rating: Double + let imageUrl: String + + let mainActors: [MovieActor] + let supportingActors: [MovieActor] + let reviews: [Review] + + init( + id: UUID = UUID(), + title: String, + description: String, + releaseYear: Int?, + rating: Double, + imageUrl: String, + mainActors: [MovieActor], + supportingActors: [MovieActor], + reviews: [Review] + ) { + self.id = id + self.title = title + self.description = description + self.releaseYear = releaseYear + self.rating = rating + self.imageUrl = imageUrl + self.mainActors = mainActors + self.supportingActors = supportingActors + self.reviews = reviews + } +} + struct Movie: Identifiable, Hashable { let id: UUID let title: String @@ -101,10 +150,5 @@ extension Movie: Mockable { static var topMovies = Array(mockList.prefix(3)) static var watchList = Array(mockList.suffix(5)) -// static var featured = Array([mockList[0]]) -// static var topMovies = Array([mockList[1]]) -// static var watchList = Array([mockList[2]]) - - } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 62d6203..800a4cb 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -13,7 +13,7 @@ import FirebaseDataConnect public extension DataConnect { - static var friendlyFlixConnector: FriendlyFlixConnector = { + static let friendlyFlixConnector: FriendlyFlixConnector = { let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() @@ -22,7 +22,7 @@ public extension DataConnect { public class FriendlyFlixConnector { - var dataConnect: DataConnect + let dataConnect: DataConnect public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index ba7810c..a331ec1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -56,6 +56,8 @@ extension ActorKey : Hashable { } } +extension ActorKey : Sendable {} + public struct FavoriteMovieKey { @@ -126,6 +128,8 @@ extension FavoriteMovieKey : Hashable { } } +extension FavoriteMovieKey : Sendable {} + public struct MovieActorKey { @@ -196,6 +200,8 @@ extension MovieActorKey : Hashable { } } +extension MovieActorKey : Sendable {} + public struct MovieMetadataKey { @@ -250,6 +256,8 @@ extension MovieMetadataKey : Hashable { } } +extension MovieMetadataKey : Sendable {} + public struct MovieKey { @@ -304,6 +312,8 @@ extension MovieKey : Hashable { } } +extension MovieKey : Sendable {} + public struct ReviewKey { @@ -374,6 +384,8 @@ extension ReviewKey : Hashable { } } +extension ReviewKey : Sendable {} + public struct UserKey { @@ -428,4 +440,6 @@ extension UserKey : Hashable { } } +extension UserKey : Sendable {} + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index e871dd7..4c72460 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -24,7 +24,7 @@ import FirebaseDataConnect // MARK: Common Enums -public enum OrderDirection: String, Codable { +public enum OrderDirection: String, Codable, Sendable { case ASC = "ASC" case DESC = "DESC" } @@ -104,7 +104,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -125,6 +125,7 @@ username: String return ref as MutationRef } + @MainActor public func execute( username: String @@ -210,7 +211,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -231,6 +232,7 @@ movieId: UUID return ref as MutationRef } + @MainActor public func execute( movieId: UUID @@ -316,7 +318,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -337,6 +339,7 @@ movieId: UUID return ref as MutationRef } + @MainActor public func execute( movieId: UUID @@ -458,7 +461,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -483,6 +486,7 @@ reviewText: String return ref as MutationRef } + @MainActor public func execute( movieId: UUID @@ -608,7 +612,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -633,6 +637,7 @@ reviewText: String return ref as MutationRef } + @MainActor public func execute( movieId: UUID @@ -722,7 +727,7 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { @@ -743,6 +748,7 @@ movieId: UUID return ref as MutationRef } + @MainActor public func execute( movieId: UUID @@ -859,12 +865,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1010,11 +1016,12 @@ movies: [Movie] return ref as! QueryRefObservation } + @MainActor public func execute( - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil ) async throws -> OperationResult { var variables = ListMoviesQuery.Variables() @@ -1101,12 +1108,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1152,7 +1159,7 @@ tags: [String]? -public struct MovieMetadataMetadata: Decodable { +public struct MovieMetadataMetadata: Decodable, Sendable { @@ -1187,7 +1194,7 @@ metadata: [MovieMetadataMetadata] -public struct ActorMainActors: Decodable ,Hashable, Equatable, Identifiable { +public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1264,7 +1271,7 @@ mainActors: [ActorMainActors] -public struct ActorSupportingActors: Decodable ,Hashable, Equatable, Identifiable { +public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1341,7 +1348,7 @@ supportingActors: [ActorSupportingActors] -public struct ReviewReviews: Decodable { +public struct ReviewReviews: Decodable, Sendable { @@ -1367,7 +1374,7 @@ rating: Int? -public struct User: Decodable ,Hashable, Equatable, Identifiable { +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1596,6 +1603,7 @@ id: UUID return ref as! QueryRefObservation } + @MainActor public func execute( id: UUID @@ -1682,12 +1690,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct Actor: Decodable ,Hashable, Equatable, Identifiable { +public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1708,7 +1716,7 @@ imageUrl: String -public struct MovieMainActors: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1806,7 +1814,7 @@ mainActors: [MovieMainActors] -public struct MovieSupportingActors: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -1980,6 +1988,7 @@ id: UUID return ref as! QueryRefObservation } + @MainActor public func execute( id: UUID @@ -2019,12 +2028,12 @@ public class GetCurrentUserQuery{ } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct User: Decodable ,Hashable, Equatable, Identifiable { +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -2040,7 +2049,7 @@ username: String -public struct ReviewReviews: Decodable { +public struct ReviewReviews: Decodable, Sendable { @@ -2066,7 +2075,7 @@ reviewText: String? -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -2180,13 +2189,13 @@ reviews: [ReviewReviews] -public struct FavoriteMovieFavoriteMovies: Decodable { +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -2232,7 +2241,7 @@ tags: [String]? -public struct MovieMetadataMetadata: Decodable { +public struct MovieMetadataMetadata: Decodable, Sendable { @@ -2449,6 +2458,7 @@ user: User? return ref as! QueryRefObservation } + @MainActor public func execute( ) async throws -> OperationResult { @@ -2533,12 +2543,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct FavoriteMovie: Decodable { +public struct FavoriteMovie: Decodable, Sendable { @@ -2583,6 +2593,7 @@ movieId: UUID return ref as! QueryRefObservation } + @MainActor public func execute( movieId: UUID @@ -2762,12 +2773,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct MovieMoviesMatchingTitle: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -2866,7 +2877,7 @@ moviesMatchingTitle: [MovieMoviesMatchingTitle] -public struct MovieMoviesMatchingDescription: Decodable ,Hashable, Equatable, Identifiable { +public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -2965,7 +2976,7 @@ moviesMatchingDescription: [MovieMoviesMatchingDescription] -public struct ActorActorsMatchingName: Decodable ,Hashable, Equatable, Identifiable { +public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -3042,7 +3053,7 @@ actorsMatchingName: [ActorActorsMatchingName] -public struct ReviewReviewsMatchingText: Decodable { +public struct ReviewReviewsMatchingText: Decodable, Sendable { @@ -3068,7 +3079,7 @@ reviewDate: LocalDate -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -3134,7 +3145,7 @@ movie: Movie -public struct User: Decodable ,Hashable, Equatable, Identifiable { +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -3279,6 +3290,7 @@ genre: String return ref as! QueryRefObservation } + @MainActor public func execute( minYear: Int @@ -3293,7 +3305,7 @@ genre: String , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil ) async throws -> OperationResult { var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) @@ -3380,12 +3392,12 @@ public func hash(into hasher: inout Hasher) { } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -3516,6 +3528,7 @@ searchTerm: String return ref as! QueryRefObservation } + @MainActor public func execute( searchTerm: String @@ -3555,24 +3568,24 @@ public class GetUserFavoriteMoviesQuery{ } - public struct Data: Decodable { + public struct Data: Decodable, Sendable { -public struct User: Decodable { +public struct User: Decodable, Sendable { -public struct FavoriteMovieFavoriteMovies: Decodable { +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { -public struct Movie: Decodable ,Hashable, Equatable, Identifiable { +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { @@ -3748,6 +3761,7 @@ user: User? return ref as! QueryRefObservation } + @MainActor public func execute( ) async throws -> OperationResult { diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql index 1f60122..1dad217 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/main/mutation.gql @@ -189,6 +189,69 @@ extend type Mutation { data: User_Data! ): User_KeyOutput! @fdc_generated(from: "User", purpose: UPSERT_SINGLE) """ + ✨ Insert or update `Actor` objects into the table, based on the primary key. Returns the key of the newly inserted `Actor`. + """ + actor_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [Actor_Data!]! + ): [Actor_KeyOutput!]! @fdc_generated(from: "Actor", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `FavoriteMovie` objects into the table, based on the primary key. Returns the key of the newly inserted `FavoriteMovie`. + """ + favorite_movie_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [FavoriteMovie_Data!]! + ): [FavoriteMovie_KeyOutput!]! @fdc_generated(from: "FavoriteMovie", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `Movie` objects into the table, based on the primary key. Returns the key of the newly inserted `Movie`. + """ + movie_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [Movie_Data!]! + ): [Movie_KeyOutput!]! @fdc_generated(from: "Movie", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `MovieActor` objects into the table, based on the primary key. Returns the key of the newly inserted `MovieActor`. + """ + movieActor_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [MovieActor_Data!]! + ): [MovieActor_KeyOutput!]! @fdc_generated(from: "MovieActor", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `MovieMetadata` objects into the table, based on the primary key. Returns the key of the newly inserted `MovieMetadata`. + """ + movieMetadata_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [MovieMetadata_Data!]! + ): [MovieMetadata_KeyOutput!]! @fdc_generated(from: "MovieMetadata", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `Review` objects into the table, based on the primary key. Returns the key of the newly inserted `Review`. + """ + review_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [Review_Data!]! + ): [Review_KeyOutput!]! @fdc_generated(from: "Review", purpose: UPSERT_MULTIPLE) + """ + ✨ Insert or update `User` objects into the table, based on the primary key. Returns the key of the newly inserted `User`. + """ + user_upsertMany( + """ + List of data objects to insert or update if it already exists. + """ + data: [User_Data!]! + ): [User_KeyOutput!]! @fdc_generated(from: "User", purpose: UPSERT_MULTIPLE) + """ ✨ Update a single `Actor` based on `id`, `key` or `first`, setting columns specified in `data`. Returns `null` if not found. """ actor_update( diff --git a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql index d6867cc..d6124ac 100644 --- a/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql +++ b/Examples/FriendlyFlix/dataconnect/.dataconnect/schema/prelude.gql @@ -2,7 +2,7 @@ enum AccessLevel { """ This operation is accessible to anyone, with or without authentication. - Equivalent to: @auth(expr: "true") + Equivalent to: `@auth(expr: "true")` """ PUBLIC @@ -391,7 +391,19 @@ directive @fdc_generated( type _Service { "Full Service Definition Language of the Frebase Data Connect Schema, including normalized schema, predefined and generated types." - sdl: String! + sdl( + """ + Whether or not to omit Data Connect builtin GraphQL preludes. + They are static GraphQL publically available in the docsite. + """ + omitBuiltin: Boolean = false + """ + Whether or not to omit GQL description in the SDL. + We generate description to document generated schema. + It may bloat the size of SDL. + """ + omitDescription: Boolean = false + ): String! "Orignal Schema Sources in the service." schema: String! "Generated documentation from the schema of the Firebase Data Connect Service." @@ -830,16 +842,16 @@ Customizes a field that represents a SQL database table column. Data Connect maps scalar Fields on `@table` type to a SQL column of corresponding data type. -- scalar `UUID`: [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html). -- scalar `String`: [`text`](https://www.postgresql.org/docs/current/datatype-character.html) -- scalar `Int`: [`int`](https://www.postgresql.org/docs/current/datatype-numeric.html) -- scalar `Int64`: [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html) -- scalar `Float`: [`double precision`](https://www.postgresql.org/docs/current/datatype-numeric.html) -- scalar `Boolean`: [`boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html) -- scalar `Date`: [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html) -- scalar `Timestamp`: [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html) -- scalar `Any`: [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html) -- scalar `Vector`: [`pgvector`](https://github.com/pgvector/pgvector) +- scalar `UUID` maps to [`uuid`](https://www.postgresql.org/docs/current/datatype-uuid.html). +- scalar `String` maps to [`text`](https://www.postgresql.org/docs/current/datatype-character.html). +- scalar `Int` maps to [`int`](https://www.postgresql.org/docs/current/datatype-numeric.html). +- scalar `Int64` maps to [`bigint`](https://www.postgresql.org/docs/current/datatype-numeric.html). +- scalar `Float` maps to [`double precision`](https://www.postgresql.org/docs/current/datatype-numeric.html). +- scalar `Boolean` maps to [`boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html). +- scalar `Date` maps to [`date`](https://www.postgresql.org/docs/current/datatype-datetime.html). +- scalar `Timestamp` maps to [`timestamptz`](https://www.postgresql.org/docs/current/datatype-datetime.html). +- scalar `Any` maps to [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html). +- scalar `Vector` maps to [`pgvector`](https://github.com/pgvector/pgvector). Array scalar fields are mapped to [Postgres arrays](https://www.postgresql.org/docs/current/arrays.html). @@ -882,6 +894,8 @@ directive @col( Each GraphQL type can map to multiple SQL data types. Refer to [Postgres supported data types](https://www.postgresql.org/docs/current/datatype.html). + + Incompatible SQL data type will lead to undefiend barehavior. """ dataType: String """ @@ -917,7 +931,8 @@ type ManyTable @table { type OneTable @table { id: UUID! @default(expr: "uuidV4()") someField: UUID! - manyTables_on_refField: [ManyTable!]! + # Generated Fields: + # manyTables_on_refField: [ManyTable!]! } ``` Data Connect generates the necessary foreign key constraint. @@ -964,6 +979,8 @@ type Bug @table { assignee: User reproter: User } + +type User @table { name: String! } ``` ##### Required Many-to-One Relation @@ -979,6 +996,8 @@ type Comment @table { post: Post! content: String! } + +type Post @table { title: String! } ``` ##### Many To Many Relation @@ -1002,17 +1021,19 @@ knows this is a join table, so expands the many-to-many query field. ```graphql type Group @table { name: String! - users_via_Membership: [User!]! - memberships_on_group: [Membership!]! + # Generated Fields: + # users_via_Membership: [User!]! + # memberships_on_group: [Membership!]! } type User @table { name: String! - groups_via_Membership: [Group!]! - memberships_on_user: [Membership!]! + # Generated Fields: + # groups_via_Membership: [Group!]! + # memberships_on_user: [Membership!]! } ``` -###### Example: Transerse the Many-To-Many Relation +###### Example: Traverse the Many-To-Many Relation ```graphql query ($id: UUID!) { @@ -1024,7 +1045,7 @@ query ($id: UUID!) { } ``` -###### Example: Transerse to the Join Table +###### Example: Traverse to the Join Table ```graphql query ($id: UUID!) { @@ -1049,9 +1070,9 @@ type Account @table { user: User! @unique } # Alternatively, use primary key constraint. -type Account @table(key: "user") { - user: User! -} +# type Account @table(key: "user") { +# user: User! +# } ``` ###### Example: Transerse the Reference Field @@ -1064,7 +1085,7 @@ query ($id: UUID!) { } ``` -###### Example: Reverse Tranverse the Reference field +###### Example: Reverse Traverse the Reference field ```graphql query ($id: UUID!) { @@ -1084,17 +1105,17 @@ query ($id: UUID!) { """ directive @ref( - "The SQL database foreign key constraint name. Defaults to {table_name}_{field_name}_fkey." + "The SQL database foreign key constraint name. Defaults to snake_case `{table_name}_{field_name}_fkey`." constraintName: String """ - Foreign key fields. Defaults to {tableName}{PrimaryIdName}. + Foreign key fields. Defaults to `{tableName}{PrimaryIdName}`. """ fields: [String!] "The fields that the foreign key references in the other table. Defaults to its primary key." references: [String!] ) on FIELD_DEFINITION -"Defines the direction of an orderby query" +"Defines the orderBy direction in a query." enum OrderDirection { "Results are ordered in ascending order." ASC @@ -1166,8 +1187,8 @@ directive @index( Configure the SQL database index id. If not overridden, Data Connect generates the index name: - - `table_name_first_field_second_field_aa_idx` - - `table_name_only_field_name_idx` + - `{table_name}_{first_field}_{second_field}_aa_idx` + - `{table_name}_{field_name}_idx` """ name: String """ @@ -1728,6 +1749,8 @@ as a JSON array. All elements must be finite (no NaN, Infinity or -Infinity). Example: [1.1, 2, 3.3] In the PostgreSQL table, it's stored as [`pgvector`](https://github.com/pgvector/pgvector). + +See `Vector_Embed` for how to generate text embeddings in query and mutations. """ scalar Vector @@ -1816,6 +1839,8 @@ type Post @table { } ``` +NOTE: All natively supported `Vector_Embed_Model` generates vector of length `768`. + ###### Example: Insert embedding ```graphql @@ -1861,5 +1886,5 @@ scalar Vector_Embed_Model @fdc_forbiddenAsFieldType @fdc_example(value: "textembedding-gecko@003", description: "A stable version of the textembedding-gecko model") @fdc_example(value: "textembedding-gecko@001", description: "An older version of the textembedding-gecko model") - @fdc_example(value: "text-embedding-004", description: "Annother textembedding model") + @fdc_example(value: "text-embedding-004", description: "Another text embedding model") From 8cfc8c6dd5bba12a6d1521665c1ed3b9ffa4cd79 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 4 Nov 2024 19:10:03 +0100 Subject: [PATCH 27/50] Formatting Signed-off-by: Peter Friese --- .../FriendlyFlix/App/FriendlyFlixApp.swift | 25 +- .../Authentication/AccountScreen.swift | 6 +- .../Authentication/AuthenticationScreen.swift | 17 +- .../AuthenticationService.swift | 9 +- .../AuthenticationToolbarButton.swift | 6 +- .../Features/Details/MovieCardView.swift | 22 +- .../Features/Details/MovieDetailsView.swift | 17 +- .../Features/Home/DetailsSection.swift | 4 +- .../Features/Home/HomeScreen.swift | 23 +- .../Features/Library/LibraryScreen.swift | 9 +- .../Features/MovieList/MovieListScreen.swift | 3 +- .../Features/Reviews/MovieReviewCard.swift | 10 +- .../Features/Reviews/StarRatingView.swift | 3 +- .../Features/Search/SearchScreen.swift | 10 +- .../FriendlyFlix/Model/Mockable.swift | 2 +- .../Model/Movie+DataConnect.swift | 37 +- .../FriendlyFlix/Model/Movie.swift | 57 +- .../Utilities/ButtonStyle+NoHighlight.swift | 8 +- .../FriendlyFlix/Utilities/Color+Hex.swift | 1 - .../Utilities/View+Extension.swift | 6 +- .../FriendlyFlix/Views/CardView.swift | 11 +- .../Views/GradienConfiguration.swift | 1 - .../FriendlyFlix/Views/MovieListRowView.swift | 2 +- .../FriendlyFlix/Views/MovieTileView.swift | 9 +- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../Sources/FriendlyFlixClient.swift | 86 +- .../Sources/FriendlyFlixKeys.swift | 348 +- .../Sources/FriendlyFlixOperations.swift | 4510 +++++++---------- 28 files changed, 2032 insertions(+), 3263 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index dcc90f3..053cb64 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -1,5 +1,5 @@ // -// FriendlyFlixMocksApp.swift +// FriendlyFlixApp.swift // FriendlyFlixMocks // // Created by Peter Friese on 28.09.24. @@ -16,22 +16,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import Firebase import FirebaseAuth import FirebaseDataConnect import FriendlyFlixSDK +import SwiftUI @main struct FriendlyFlixApp: App { private func loadRocketSimConnect() { -#if DEBUG - guard (Bundle(path: "/Applications/RocketSim.app/Contents/Frameworks/RocketSimConnectLinker.nocache.framework")?.load() == true) else { - print("Failed to load linker framework") - return - } - print("RocketSim Connect successfully linked") -#endif + #if DEBUG + guard Bundle( + path: "/Applications/RocketSim.app/Contents/Frameworks/RocketSimConnectLinker.nocache.framework" + )? + .load() == true else { + print("Failed to load linker framework") + return + } + print("RocketSim Connect successfully linked") + #endif } var authenticationService: AuthenticationService? @@ -42,7 +45,9 @@ struct FriendlyFlixApp: App { authenticationService = AuthenticationService() authenticationService?.onSignUp { user in - print("User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")") + print( + "User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")" + ) let userName = String(user.email?.split(separator: "@").first ?? "(unknown)") Task { try await DataConnect.friendlyFlixConnector.upsertUserMutation.execute(username: userName) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift index 6ee5a14..8d5c7d5 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -34,9 +34,7 @@ struct AccountScreen: View { do { try authenticationService.signOut() dismiss() - } - catch { - } + } catch {} } } @@ -67,7 +65,7 @@ extension AccountScreen { .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem { - Button(action: {dismiss()}) { + Button(action: { dismiss() }) { Text("Done") } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index 8fe738d..edae42a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -16,8 +16,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import AuthenticationServices +import SwiftUI private enum FocusableField: Hashable { case email @@ -44,11 +44,10 @@ struct AuthenticationScreen: View { @State private var errorMessage = "" @State private var displayName = "" - private var isValid: Bool { + private var isValid: Bool { return if flow == .login { !email.isEmpty && !password.isEmpty - } - else { + } else { !email.isEmpty && !password.isEmpty && password == confirmPassword } } @@ -78,8 +77,7 @@ struct AuthenticationScreen: View { try await authenticationService.signUpWithEmailPassword(email: email, password: password) errorMessage = "" dismiss() - } - catch { + } catch { print(error.localizedDescription) errorMessage = error.localizedDescription } @@ -147,14 +145,13 @@ extension AuthenticationScreen { Button(action: { if flow == .login { signInWithEmailPassword() } - else { signUpWithEmailPassword()} - } ) { + else { signUpWithEmailPassword() } + }) { if authenticationService.authenticationState != .authenticating { Text(flow == .login ? "Log in with password" : "Sign up") .padding(.vertical, 8) .frame(maxWidth: .infinity) - } - else { + } else { ProgressView() .progressViewStyle(CircularProgressViewStyle(tint: .white)) .padding(.vertical, 8) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index 0d01535..63595cd 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import FirebaseAuth import Foundation import Observation -import FirebaseAuth enum AuthenticationState { case unauthenticated @@ -28,7 +28,7 @@ class AuthenticationService { var presentingAccountDialog = false var authenticationState: AuthenticationState = .unauthenticated - var user: User? = nil + var user: User? private var authenticationListener: AuthStateDidChangeListenerHandle? @@ -37,8 +37,7 @@ class AuthenticationService { if let user { self.authenticationState = .authenticated self.user = user - } - else { + } else { self.authenticationState = .unauthenticated } } @@ -60,7 +59,7 @@ class AuthenticationService { if let onSignUp, let user = Auth.auth().currentUser { onSignUp(user) } - + authenticationState = .authenticated } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift index 35c4c36..6b8c56e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -24,8 +24,7 @@ struct AuthenticationToolbarButton: View { private func onButtonTapped() { if authenticationService.authenticationState == .unauthenticated { authenticationService.presentingAuthenticationDialog.toggle() - } - else { + } else { authenticationService.presentingAccountDialog.toggle() } } @@ -34,7 +33,8 @@ struct AuthenticationToolbarButton: View { extension AuthenticationToolbarButton { var body: some View { Button(action: onButtonTapped) { - Image(systemName: authenticationService.authenticationState == .unauthenticated ? "person.circle" : "person.circle.fill") + Image(systemName: authenticationService + .authenticationState == .unauthenticated ? "person.circle" : "person.circle.fill") } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index dd7dcf5..d8ace40 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -16,11 +16,10 @@ // See the License for the specific language governing permissions and // limitations under the License. - -import SwiftUI -import NukeUI import FirebaseDataConnect import FriendlyFlixSDK +import NukeUI +import SwiftUI struct MovieCardView: View { @Environment(\.dismiss) private var dismiss @@ -38,7 +37,10 @@ struct MovieCardView: View { // MARK: - Favourite handling - private let isFavouriteRef: QueryRefObservation + private let isFavouriteRef: QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > private var isFavourite: Bool { isFavouriteRef.data?.favorite_movie?.movieId != nil } @@ -48,8 +50,7 @@ struct MovieCardView: View { if isFavourite { let _ = try await connector.deleteFavoritedMovieMutation.execute(movieId: movie.id) let _ = try await isFavouriteRef.execute() - } - else { + } else { let _ = try await connector.addFavoritedMovieMutation.execute(movieId: movie.id) let _ = try await isFavouriteRef.execute() } @@ -134,14 +135,13 @@ extension MovieCardView { .task { do { let _ = try await isFavouriteRef.execute() - } - catch { + } catch { print(error) } } } } - #Preview { - MovieCardView(showDetails: true, movie: Movie.mock) - } +#Preview { + MovieCardView(showDetails: true, movie: Movie.mock) +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift index 7b825bd..faac4f0 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -14,8 +14,8 @@ import FirebaseDataConnect import FriendlyFlixSDK -import SwiftUI import NukeUI +import SwiftUI struct MovieDetailsView: View { private var movie: Movie @@ -31,22 +31,22 @@ struct MovieDetailsView: View { releaseYear: movieDetails.releaseYear, rating: movieDetails.rating ?? 0, imageUrl: movieDetails.imageUrl, - mainActors: movieDetails.mainActors.map({ mainActor in + mainActors: movieDetails.mainActors.map { mainActor in MovieActor(id: mainActor.id, name: mainActor.name, imageUrl: mainActor.imageUrl) - }), - supportingActors: movieDetails.supportingActors.map({ supportingActor in + }, + supportingActors: movieDetails.supportingActors.map { supportingActor in MovieActor(id: supportingActor.id, name: supportingActor.name, imageUrl: supportingActor.imageUrl) - }), - reviews: movieDetails.reviews.map({ review in + }, + reviews: movieDetails.reviews.map { review in Review(id: review.id, reviewText: review.reviewText ?? "", rating: review.rating ?? 0, userName: review.user.username) - }) + } ) } } @@ -54,7 +54,6 @@ struct MovieDetailsView: View { public init(movie: Movie) { self.movie = movie } - } extension MovieDetailsView { @@ -106,7 +105,7 @@ extension MovieDetailsView { rating: Double(review.rating), reviewerName: review.userName, review: review.reviewText) - .frame(width: 350) + .frame(width: 350) } } .scrollTargetLayout() diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift index 3e4174b..4ea3e45 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift @@ -48,12 +48,12 @@ struct DetailsSection: View where Title: View, Details: View { } extension DetailsSection where Title == Text { - init (_ title: Text, content: @escaping () -> Details) { + init(_ title: Text, content: @escaping () -> Details) { self.title = { title } self.content = { content() } } - init (_ title: any StringProtocol, content: @escaping () -> Details) { + init(_ title: any StringProtocol, content: @escaping () -> Details) { self.title = { Text(title) } self.content = { content() } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index 0a6127a..e95a8b2 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -16,9 +16,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import FirebaseDataConnect import FriendlyFlixSDK +import SwiftUI struct HomeScreen: View { @Namespace private var namespace @@ -42,23 +42,26 @@ struct HomeScreen: View { private var heroMovies: [Movie] { connector.listMoviesQuery - .ref({ optionalVars in + .ref { optionalVars in optionalVars.limit = 3 optionalVars.orderByReleaseYear = .DESC - }) + } .data?.movies.map(Movie.init) ?? [] } private var topMovies: [Movie] { connector.listMoviesQuery - .ref({ optionalVars in + .ref { optionalVars in optionalVars.limit = 5 optionalVars.orderByRating = .DESC - }) + } .data?.movies.map(Movie.init) ?? [] } - let watchListRef: QueryRefObservation + let watchListRef: QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > private var watchList: [Movie] { watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } @@ -75,8 +78,12 @@ extension HomeScreen { TabView { ForEach(heroMovies) { movie in NavigationLink(value: movie) { - MovieTeaserView(title: movie.title, subtitle: movie.description, imageUrl: movie.imageUrl) - .matchedTransitionSource(id: movie.id, in: namespace) + MovieTeaserView( + title: movie.title, + subtitle: movie.description, + imageUrl: movie.imageUrl + ) + .matchedTransitionSource(id: movie.id, in: namespace) } .buttonStyle(.noHighlight) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index 5461afb..b6bafbd 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -1,5 +1,5 @@ // -// ProfileScreen.swift +// LibraryScreen.swift // FriendlyFlixMocks // // Created by Peter Friese on 28.09.24. @@ -16,9 +16,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import FirebaseDataConnect import FriendlyFlixSDK +import SwiftUI struct LibraryScreen: View { @Namespace var namespace @@ -34,7 +34,10 @@ struct LibraryScreen: View { watchListRef = connector.getUserFavoriteMoviesQuery.ref() } - private let watchListRef: QueryRefObservation + private let watchListRef: QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > private var watchList: [Movie] { watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift index f5dc324..ae231b1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift @@ -1,5 +1,5 @@ // -// MovieListView.swift +// MovieListScreen.swift // FriendlyFlixMocks // // Created by Peter Friese on 30.09.24. @@ -33,7 +33,6 @@ struct MovieListScreen: View { .matchedTransitionSource(id: movie.id, in: namespace) .navigationLink(value: movie, hideChevron: true) } - } .listStyle(.plain) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift index 825dcae..a688384 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI struct MovieReviewCard: View { @@ -43,8 +42,11 @@ struct MovieReviewCard: View { topLeading: 16, bottomLeading: 16, bottomTrailing: 16, - topTrailing: 16), - style: .continuous)) + topTrailing: 16 + ), + style: .continuous + ) + ) } } @@ -55,7 +57,7 @@ struct MovieReviewCard: View { rating: 4.5, reviewerName: "John Doe", review: - "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." + "Velit officia quis ut ut dolor velit voluptate magna Lorem. Sint do ex adipisicing laboris magna et duis aute fugiat culpa minim id culpa nulla do. Occaecat in anim ad Lorem eu aute consectetur excepteur fugiat laboris eiusmod. Et tempor Lorem quis eu magna cillum adipisicing consectetur." ) .padding() } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift index 70f5b1e..682eb5d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI struct StarRatingView: View { @@ -20,7 +19,7 @@ struct StarRatingView: View { var body: some View { HStack(spacing: 4) { - ForEach(0..<5) { index in + ForEach(0 ..< 5) { index in Image(systemName: self.starType(for: index)) .foregroundColor(.yellow) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 58ebd96..15578c7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -16,9 +16,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import FirebaseDataConnect import FriendlyFlixSDK +import SwiftUI struct SearchedView: View { @Environment(\.isSearching) private var isSearching @@ -28,10 +28,10 @@ struct SearchedView: View { private var topMovies: [Movie] { connector.listMoviesQuery - .ref({ optionalVars in + .ref { optionalVars in optionalVars.limit = 5 optionalVars.orderByRating = .DESC - }) + } .data?.movies.map(Movie.init) ?? [] } @@ -66,7 +66,6 @@ struct SearchScreen: View { .ref(searchTerm: searchText.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) .data?.movies.map(Movie.init) ?? [] } - } extension SearchScreen { @@ -83,7 +82,8 @@ extension SearchScreen { MovieCardView(showDetails: true, movie: movie) .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) .task { - // NavigationStack requires `.statusBarHidden` to be applied to the navigationstack itself, not on any children. + // NavigationStack requires `.statusBarHidden` to be applied to the navigationstack + // itself, not on any children. // See https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui isStatusBarHidden = true } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift index 7971142..30261bf 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift @@ -16,7 +16,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - public protocol Mockable { associatedtype MockType @@ -28,6 +27,7 @@ public extension Mockable { static var mock: MockType { mockList[0] } + static var mockList: [MockType] { [] } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift index 20d7e3a..ff6b48c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift @@ -17,30 +17,29 @@ import FriendlyFlixSDK extension Movie { init(from: ListMoviesQuery.Data.Movie) { - self.id = from.id - self.title = from.title - self.description = from.description ?? "" - self.releaseYear = from.releaseYear - self.rating = from.rating - self.imageUrl = from.imageUrl + id = from.id + title = from.title + description = from.description ?? "" + releaseYear = from.releaseYear + rating = from.rating + imageUrl = from.imageUrl } init(from: ListMoviesByPartialTitleQuery.Data.Movie) { - self.id = from.id - self.title = from.title - self.description = from.description ?? "" - self.releaseYear = from.releaseYear - self.rating = from.rating - self.imageUrl = from.imageUrl + id = from.id + title = from.title + description = from.description ?? "" + releaseYear = from.releaseYear + rating = from.rating + imageUrl = from.imageUrl } init(from: GetUserFavoriteMoviesQuery.Data.User.FavoriteMovieFavoriteMovies) { - self.id = from.movie.id - self.title = from.movie.title - self.description = from.movie.description ?? "" - self.releaseYear = from.movie.releaseYear - self.rating = from.movie.rating - self.imageUrl = from.movie.imageUrl + id = from.movie.id + title = from.movie.title + description = from.movie.description ?? "" + releaseYear = from.movie.releaseYear + rating = from.movie.rating + imageUrl = from.movie.imageUrl } } - diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index c7ffa27..0043282 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -32,7 +32,6 @@ struct MovieActor: Identifiable, Hashable { var imageUrl: String } - struct MovieDetails: Identifiable, Hashable { let id: UUID let title: String @@ -45,17 +44,15 @@ struct MovieDetails: Identifiable, Hashable { let supportingActors: [MovieActor] let reviews: [Review] - init( - id: UUID = UUID(), - title: String, - description: String, - releaseYear: Int?, - rating: Double, - imageUrl: String, - mainActors: [MovieActor], - supportingActors: [MovieActor], - reviews: [Review] - ) { + init(id: UUID = UUID(), + title: String, + description: String, + releaseYear: Int?, + rating: Double, + imageUrl: String, + mainActors: [MovieActor], + supportingActors: [MovieActor], + reviews: [Review]) { self.id = id self.title = title self.description = description @@ -76,14 +73,12 @@ struct Movie: Identifiable, Hashable { var rating: Double? let imageUrl: String - init( - id: UUID = UUID(), - title: String, - description: String, - releaseYear: Int?, - rating: Double? = nil, - imageUrl: String - ) { + init(id: UUID = UUID(), + title: String, + description: String, + releaseYear: Int?, + rating: Double? = nil, + imageUrl: String) { self.id = id self.title = title self.description = description @@ -98,57 +93,55 @@ extension Movie: Mockable { .init( title: "The Hitchhiker's Guide to the Galaxy", description: - "Mere seconds before the Earth is to be demolished by an alien construction crew, Arthur Dent is swept off the planet by his friend Ford Prefect, a researcher penning a new edition of \"The Hitchhiker's Guide to the Galaxy.\"", + "Mere seconds before the Earth is to be demolished by an alien construction crew, Arthur Dent is swept off the planet by his friend Ford Prefect, a researcher penning a new edition of \"The Hitchhiker's Guide to the Galaxy.\"", releaseYear: 2005, imageUrl: "https://image.tmdb.org/t/p/w1280/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg" ), .init( title: "Interstellar", description: - "The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.", + "The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.", releaseYear: 2005, imageUrl: "https://image.tmdb.org/t/p/w1280/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg" ), .init( title: "The Matrix", description: - "Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.", + "Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.", releaseYear: 1999, imageUrl: "https://image.tmdb.org/t/p/w1280/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg" ), .init( title: "Titanic", description: - "101-year-old Rose DeWitt Bukater tells the story of her life aboard the Titanic, 84 years later. A young Rose boards the ship with her mother and fiancé. Meanwhile, Jack Dawson and Fabrizio De Rossi win third-class tickets aboard the ship. Rose tells the whole story from Titanic's departure through to its death—on its first and last voyage—on April 15, 1912.", + "101-year-old Rose DeWitt Bukater tells the story of her life aboard the Titanic, 84 years later. A young Rose boards the ship with her mother and fiancé. Meanwhile, Jack Dawson and Fabrizio De Rossi win third-class tickets aboard the ship. Rose tells the whole story from Titanic's departure through to its death—on its first and last voyage—on April 15, 1912.", releaseYear: 1998, imageUrl: "https://image.tmdb.org/t/p/w1280/tuvoTDlqaLm7hFUROR6u0OUtwCW.jpg" ), .init( title: "Slow Horses", description: - "Follow a dysfunctional team of MI5 agents—and their obnoxious boss, the notorious Jackson Lamb—as they navigate the espionage world's smoke and mirrors to defend England from sinister forces.", + "Follow a dysfunctional team of MI5 agents—and their obnoxious boss, the notorious Jackson Lamb—as they navigate the espionage world's smoke and mirrors to defend England from sinister forces.", releaseYear: 2022, imageUrl: "https://image.tmdb.org/t/p/w1280/dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg" ), .init( title: "Tomorrow Never Dies", description: - "A deranged media mogul is staging international incidents to pit the world's superpowers against each other. Now James Bond must take on this evil mastermind in an adrenaline-charged battle to end his reign of terror and prevent global pandemonium.", + "A deranged media mogul is staging international incidents to pit the world's superpowers against each other. Now James Bond must take on this evil mastermind in an adrenaline-charged battle to end his reign of terror and prevent global pandemonium.", releaseYear: 1997, imageUrl: "https://image.tmdb.org/t/p/w1280/bkEJA84af63IpaOPP4CbbgTiTlL.jpg" ), .init( title: "The man from U.N.C.L.E.", description: - "At the height of the Cold War, a mysterious criminal organization plans to use nuclear weapons and technology to upset the fragile balance of power between the United States and Soviet Union. CIA agent Napoleon Solo and KGB agent Illya Kuryakin are forced to put aside their hostilities and work together to stop the evildoers in their tracks. The duo's only lead is the daughter of a missing German scientist, whom they must find soon to prevent a global catastrophe.", + "At the height of the Cold War, a mysterious criminal organization plans to use nuclear weapons and technology to upset the fragile balance of power between the United States and Soviet Union. CIA agent Napoleon Solo and KGB agent Illya Kuryakin are forced to put aside their hostilities and work together to stop the evildoers in their tracks. The duo's only lead is the daughter of a missing German scientist, whom they must find soon to prevent a global catastrophe.", releaseYear: 2015, imageUrl: "https://image.tmdb.org/t/p/w1280/nFiu4lLhkyf1amaGaN6pNoUn5Ly.jpg" ), ] - static var featured = Array(mockList.filter { $0.title.contains("The")}) - static var topMovies = Array(mockList.prefix(3)) - static var watchList = Array(mockList.suffix(5)) - + static var featured = [Movie](mockList.filter { $0.title.contains("The") }) + static var topMovies = [Movie](mockList.prefix(3)) + static var watchList = [Movie](mockList.suffix(5)) } - diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift index 98b10ef..f149e3b 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift @@ -1,5 +1,5 @@ // -// NoHighlightButtonStyle.swift +// ButtonStyle+NoHighlight.swift // FriendlyFlixMocks // // Created by Peter Friese on 30.09.24. @@ -23,9 +23,7 @@ struct NoHighlightButtonStyle: ButtonStyle { configuration.label } } - + extension ButtonStyle where Self == NoHighlightButtonStyle { - static var noHighlight: NoHighlightButtonStyle { - get { NoHighlightButtonStyle() } - } + static var noHighlight: NoHighlightButtonStyle { NoHighlightButtonStyle() } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index 48b1e88..c0846d2 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -16,7 +16,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI extension Color { diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift index ff5bc25..7a970f3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift @@ -16,7 +16,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI extension View { @@ -31,13 +30,14 @@ extension View { func navigationLink(value: any Hashable, hideChevron: Bool = false) -> some View { if hideChevron { // If hideChevron is true, apply the overlay trick to hide the chevron - // Put the NavigationLink into an overlay, and set its opacity to zero. By using this trick, we can hide the chevron. + // Put the NavigationLink into an overlay, and set its opacity to zero. By using this trick, + // we can hide the chevron. // Source: https://www.reddit.com/r/SwiftUI/comments/13rhg02/how_can_i_use_navigationlink_inside_list_without/jlkqbkz/ overlay { NavigationLink(value: value) { EmptyView() } - .opacity(0) + .opacity(0) } } else { // If hideChevron is false, return the original view without modification diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index adb06dc..8be15cc 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -16,7 +16,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI // Try for blendmode https://saeedrz.medium.com/unleashing-creativity-a-deep-dive-into-blendmode-in-swiftui-2edc3f204fa8 @@ -130,11 +129,11 @@ struct CardView: View { } details: { VStack { Text( - """ - Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. - Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. - Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. - """ + """ + Amet culpa excepteur sit ad tempor minim aute anim nisi voluptate do. Exercitation nisi adipisicing esse officia sit ullamco. + Tempor ullamco irure proident cupidatat non Lorem ut voluptate est ad in deserunt esse velit exercitation. Tempor voluptate ex aute id. + Fugiat in minim labore minim duis et duis eiusmod ullamco eiusmod minim deserunt voluptate. + """ ) .font(.body) .padding() diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift index cbcb17d..243625b 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift @@ -16,7 +16,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - import SwiftUI let neonSunsetBlurb = diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift index 5c52e98..7252a46 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift @@ -16,8 +16,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import NukeUI +import SwiftUI struct MovieListRowView: View { var title: String diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift index 353b3b1..e7e3b5d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift @@ -16,8 +16,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import NukeUI +import SwiftUI struct MovieTileView: View { var title: String = "The Matrix" @@ -63,8 +63,9 @@ struct MovieTileView: View { .lineLimit(1) .font(.headline) HStack { - Text(star).foregroundColor(.yellow) + Text(" ") + Text("\(averageRating, specifier: "%.1f")") + - Text(" ") + Text(star) + Text(star) + .foregroundColor(.yellow) + Text(" ") + Text("\(averageRating, specifier: "%.1f")") + + Text(" ") + Text(star) .foregroundColor(.blue) + Text(" ") + Text("\(userRating, specifier: "%.1f")") } } @@ -79,7 +80,7 @@ struct MovieTileView: View { imageUrl: movie.imageUrl, averageRating: 8, userRating: 10) - .frame(width: 200, height: 300) + .frame(width: 200, height: 300) } } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 52016e3..e0619f4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,31 +4,30 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") - ], - path: "Sources" - ) - ] -) + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"] + ), + ], + dependencies: [ + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), + ], + path: "Sources" + ), + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 800a4cb..a3406d9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -4,68 +4,64 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - public extension DataConnect { - static let friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) + let dc = DataConnect.dataConnect( + connectorConfig: FriendlyFlixConnector.connectorConfig, + callerSDKType: .generated + ) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - let dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "dataconnect", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) - + // init operations + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let upsertUserMutation: UpsertUserMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addReviewMutation: AddReviewMutation -public let updateReviewMutation: UpdateReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let listMoviesQuery: ListMoviesQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let searchAllQuery: SearchAllQuery -public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery -public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery - + public let upsertUserMutation: UpsertUserMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addReviewMutation: AddReviewMutation + public let updateReviewMutation: UpdateReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let listMoviesQuery: ListMoviesQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let searchAllQuery: SearchAllQuery + public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery + public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index a331ec1..39d3051 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,444 +2,338 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension ActorKey : Sendable {} - - +extension ActorKey: Sendable {} public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension FavoriteMovieKey : Sendable {} - - +extension FavoriteMovieKey: Sendable {} public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } -extension MovieActorKey : Sendable {} - - +extension MovieActorKey: Sendable {} public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieMetadataKey : Sendable {} - - +extension MovieMetadataKey: Sendable {} public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieKey : Sendable {} - - +extension MovieKey: Sendable {} public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension ReviewKey : Sendable {} - - +extension ReviewKey: Sendable {} public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension UserKey : Sendable {} - - +extension UserKey: Sendable {} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 4c72460..46bc78b 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -3,44 +3,16 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - - - - - - - - - - - - - // MARK: Common Enums public enum OrderDirection: String, Codable, Sendable { - case ASC = "ASC" - case DESC = "DESC" - } + case ASC + case DESC +} // End enum definitions - - - - - - - - -public class UpsertUserMutation{ - +public class UpsertUserMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -49,105 +21,70 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - + public var + username: String - - - - public init ( - -username: String - - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -156,105 +93,77 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -263,105 +172,76 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -370,149 +250,110 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_insert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_insert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class UpdateReviewMutation{ + return try await ref.execute() + } +} +public class UpdateReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -521,149 +362,111 @@ public class UpdateReviewMutation{ public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_update: ReviewKey? + } + public func ref(movieId: UUID, + rating: Int, -public var -review_update: ReviewKey? + reviewText: String) + -> MutationRef { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws + -> OperationResult { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -672,105 +475,70 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -779,272 +547,201 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -orderByRating: OrderDirection? + @OptionalVariable + public var + orderByRating: OrderDirection? - - @OptionalVariable - public var -orderByReleaseYear: OrderDirection? + @OptionalVariable + public var + orderByReleaseYear: OrderDirection? - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - -} + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case orderByRating - + case orderByReleaseYear - + case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + + if $orderByReleaseYear.isSet { + try codecHelper.encode( + orderByReleaseYear, + forKey: .orderByReleaseYear, + container: &container + ) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public var + genre: String? + public var + rating: Double? + public var + tags: [String]? -public var -title: String + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -imageUrl: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -releaseYear: Int? + case imageUrl + case releaseYear + case genre -public var -genre: String? + case rating + case tags + case description + } -public var -rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - + public var + movies: [Movie] } -} -public var -movies: [Movie] - } + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } @MainActor - public func execute( - - - - _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - + public func execute(_ optionalVars: (@MainActor (inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class GetMovieByIdQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class GetMovieByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1053,580 +750,396 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? -public var -title: String + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -imageUrl: String + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -releaseYear: Int? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -genre: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -description: String? + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [ActorMainActors] -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable, Sendable { - - - -public var -director: String? + public struct ActorSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String - + public var + imageUrl: String - - enum CodingKeys: String, CodingKey { - - case director - - } + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -id: UUID + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID -public var -name: String + public var + reviewText: String? + public var + reviewDate: LocalDate + public var + rating: Int? -public var -imageUrl: String + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var userKey: UserKey { + return UserKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case reviewText -public var -name: String + case reviewDate + case rating + case user + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] -public struct ReviewReviews: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -reviewText: String? + case imageUrl + case releaseYear + case genre -public var -reviewDate: LocalDate + case rating + case description + case tags -public var -rating: Int? + case metadata + case mainActors + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -username: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + public var + movie: Movie? } -} -public var -reviews: [ReviewReviews] + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1635,383 +1148,258 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Actor: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + tags: [String]? -public var -id: UUID + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -name: String + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -imageUrl: String + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -id: UUID + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [MovieMainActors] -public var -title: String + public struct MovieSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public var -genre: String? + public var + tags: [String]? + public var + imageUrl: String + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -tags: [String]? + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case genre - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + case tags - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + supportingActors: [MovieSupportingActors] + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -title: String + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -genre: String? + case imageUrl + case mainActors + case supportingActors + } -public var -tags: [String]? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -imageUrl: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetCurrentUserQuery{ - +public class GetCurrentUserQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2020,466 +1408,334 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String + public var + reviewDate: LocalDate + public var + reviewText: String? + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviews: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewDate -public var -reviewText: String? + case reviewText + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -id: UUID + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -title: String + public var + title: String + public var + genre: String? - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + imageUrl: String - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public var + releaseYear: Int? - + public var + rating: Double? - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + public var + description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public var + tags: [String]? - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + case title + case genre -public var -id: UUID + case imageUrl + case releaseYear + case rating -public var -title: String + case description + case tags + case metadata + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -rating: Double? + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } -public var -description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] -public var -tags: [String]? + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public struct MovieMetadataMetadata: Decodable, Sendable { - + case reviews + case favoriteMovies + } -public var -director: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - enum CodingKeys: String, CodingKey { - - case director - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - + public var + user: User? } -} -public var -metadata: [MovieMetadataMetadata] - - - public var movieKey: MovieKey { - return MovieKey( - - id: id + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - public var userKey: UserKey { - return UserKey( - - id: id + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetIfFavoritedMovieQuery{ +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2488,847 +1744,590 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct FavoriteMovie: Decodable, Sendable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable, Sendable { - - - -public var -movieId: UUID - + public var + favorite_movie: FavoriteMovie? + } - + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - enum CodingKeys: String, CodingKey { - - case movieId - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) + + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } } -public var -favorite_movie: FavoriteMovie? +public class SearchAllQuery { + let dataConnect: DataConnect + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } - public func ref( - -movieId: UUID + public static let OperationName = "SearchAll" - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - + public typealias Ref = QueryRefObservation - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? - @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double + public var + genre: String + public init(minYear: Int, -public class SearchAllQuery{ + maxYear: Int, - let dataConnect: DataConnect + minRating: Double, - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxRating: Double, - public static let OperationName = "SearchAll" + genre: String, - public typealias Ref = QueryRefObservation + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minYear: Int + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxYear: Int + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -minRating: Double + hasher.combine(minYear) - - - public var -maxRating: Double + hasher.combine(maxYear) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minRating) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct MovieMoviesMatchingTitle: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + imageUrl: String + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -genre: String? + case title + case genre + case rating -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -imageUrl: String + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] + public struct MovieMoviesMatchingDescription: Decodable, Sendable, Hashable, Equatable, + Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + rating: Double? + public var + imageUrl: String -public var -id: UUID + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -name: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -imageUrl: String + public var + actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable, Sendable { + public var + id: UUID - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var + rating: Int? - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviewsMatchingText: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewText: String? + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } -public var -reviewDate: LocalDate + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case reviewText + case reviewDate - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + case movie - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + case user + } - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviewsMatchingText: [ReviewReviewsMatchingText] + } -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public func ref(minYear: Int, + maxYear: Int, -public var -id: String + minRating: Double, + maxRating: Double, + genre: String, -public var -username: String + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) + if let optionalVars { + optionalVars(&variables) + } - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + @MainActor + public func execute(minYear: Int, - + maxYear: Int, - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + minRating: Double, - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + maxRating: Double, - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + genre: String, - } + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) - @MainActor - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } } - - - - - -public class ListMoviesByPartialTitleQuery{ - +public class ListMoviesByPartialTitleQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3337,221 +2336,158 @@ public class ListMoviesByPartialTitleQuery{ public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > public struct Variables: OperationVariable { - - - public var -searchTerm: String + public var + searchTerm: String - - - - - public init ( - -searchTerm: String - - - ) { - self.searchTerm = searchTerm - - - + public init(searchTerm: String) { + self.searchTerm = searchTerm } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.searchTerm == rhs.searchTerm - + return lhs.searchTerm == rhs.searchTerm } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(searchTerm) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(searchTerm) + } enum CodingKeys: String, CodingKey { - case searchTerm - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID - + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case imageUrl + case releaseYear -public var -releaseYear: Int? + case genre + case rating + case description + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + public func ref(searchTerm: String) + -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > } - public func ref( - -searchTerm: String - - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - @MainActor - public func execute( - -searchTerm: String - - ) async throws -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - + public func execute(searchTerm: String) async throws + -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) -public class GetUserFavoriteMoviesQuery{ + let refCast = ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > + return try await refCast.execute() + } +} +public class GetUserFavoriteMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3560,220 +2496,168 @@ public class GetUserFavoriteMoviesQuery{ public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable { + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + imageUrl: String -public struct User: Decodable, Sendable { - - - - - -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - - + public var + releaseYear: Int? + public var + rating: Double? + public var + description: String? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -title: String + case genre + case imageUrl + case releaseYear -public var -genre: String? + case rating + case description + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -releaseYear: Int? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -rating: Double? - - + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } -public var -description: String? + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movie: Movie + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] - + enum CodingKeys: String, CodingKey { + case favoriteMovies + } - - enum CodingKeys: String, CodingKey { - - case movie - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - + public var + user: User? } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - - enum CodingKeys: String, CodingKey { - - case favoriteMovies - + public func ref( + ) + -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - From 43da772a99b3afbce997a7be4a835aeabc9d460b Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 4 Nov 2024 19:29:25 +0100 Subject: [PATCH 28/50] Fix trailing whitespaces. Signed-off-by: Peter Friese --- Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql | 2 +- Examples/FriendlyFlix/dataconnect/schema/schema.gql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql index 41cd670..2ad3863 100644 --- a/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql +++ b/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql @@ -219,7 +219,7 @@ query ListMoviesByPartialTitle($searchTerm: String!) @auth(level: PUBLIC) { releaseYear genre rating - description + description } } diff --git a/Examples/FriendlyFlix/dataconnect/schema/schema.gql b/Examples/FriendlyFlix/dataconnect/schema/schema.gql index 96260b9..edbebe5 100644 --- a/Examples/FriendlyFlix/dataconnect/schema/schema.gql +++ b/Examples/FriendlyFlix/dataconnect/schema/schema.gql @@ -34,7 +34,7 @@ type MovieMetadata # TODO: Fill out Actor table type Actor @table { id: UUID! - imageUrl: String! + imageUrl: String! name: String! @col(name: "name", dataType: "varchar(30)") } @@ -47,7 +47,7 @@ type User id: String! @col(name: "user_auth") username: String! @col(name: "username", dataType: "varchar(50)") # The following are generated from the @ref in the Review table - # reviews_on_user + # reviews_on_user # movies_via_Review } From c4cefbcdc21222d6de1450f8a2a4a9c087c18887 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Mon, 4 Nov 2024 19:36:25 +0100 Subject: [PATCH 29/50] Trailing spaces Signed-off-by: Peter Friese --- Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 10b2114..fdce190 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -366,7 +366,7 @@ DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -382,7 +382,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -398,7 +398,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -416,7 +416,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -434,7 +434,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -450,7 +450,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` From be62582bb4530d6a06e0b6c8dfa11005c20a6cb1 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 8 Nov 2024 19:40:30 +0100 Subject: [PATCH 30/50] =?UTF-8?q?=F0=9F=92=A1=20Fix=20copyright=20headers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift | 6 +----- .../app/FriendlyFlix/FriendlyFlix/App/RootView.swift | 6 +----- .../Features/Authentication/AccountScreen.swift | 6 +----- .../Features/Authentication/AuthenticationScreen.swift | 6 +----- .../Authentication/AuthenticationToolbarButton.swift | 6 +----- .../FriendlyFlix/Features/Details/MovieCardView.swift | 6 +----- .../FriendlyFlix/Features/Home/DetailsSection.swift | 6 +----- .../FriendlyFlix/Features/Home/HomeScreen.swift | 6 +----- .../FriendlyFlix/Features/Home/MovieTeaserView.swift | 6 +----- .../FriendlyFlix/Features/Library/LibraryScreen.swift | 6 +----- .../FriendlyFlix/Features/MovieList/MovieListScreen.swift | 6 +----- .../FriendlyFlix/Features/Search/SearchScreen.swift | 6 +----- .../app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift | 6 +----- .../app/FriendlyFlix/FriendlyFlix/Model/Movie.swift | 6 +----- .../FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift | 6 +----- .../FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift | 6 +----- .../Utilities/String+StringInterpolation.swift | 7 +------ .../FriendlyFlix/Utilities/View+Extension.swift | 6 +----- .../app/FriendlyFlix/FriendlyFlix/Views/CardView.swift | 6 +----- .../FriendlyFlix/Views/GradienConfiguration.swift | 6 +----- .../FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift | 6 +----- .../FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift | 6 +----- .../FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift | 6 +----- 23 files changed, 23 insertions(+), 116 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index 053cb64..a4f844d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -1,8 +1,4 @@ -// -// FriendlyFlixApp.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift index 3f1a37b..e5d9411 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift @@ -1,8 +1,4 @@ -// -// RootView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 10.10.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift index 8d5c7d5..ae6a65e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -1,8 +1,4 @@ -// -// AccountScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 10.10.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index edae42a..03328e0 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -1,8 +1,4 @@ -// -// AuthenticationScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 10.10.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift index 6b8c56e..b396b8d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -1,8 +1,4 @@ -// -// AuthenticationToolbarButton.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 10.10.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index d8ace40..0dec489 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -1,8 +1,4 @@ -// -// MovieCardView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift index 4ea3e45..a442733 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift @@ -1,8 +1,4 @@ -// -// DetailsSection.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index e95a8b2..edce111 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -1,8 +1,4 @@ -// -// HomeScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift index 7bc11c7..ea54e03 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift @@ -1,8 +1,4 @@ -// -// MovieTeaserView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index b6bafbd..af9b28f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -1,8 +1,4 @@ -// -// LibraryScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift index ae231b1..f4b4596 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift @@ -1,8 +1,4 @@ -// -// MovieListScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 15578c7..8474008 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -1,8 +1,4 @@ -// -// SearchScreen.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift index 30261bf..0b4dc71 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift @@ -1,8 +1,4 @@ -// -// Mockable.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index 0043282..9ceff7e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -1,8 +1,4 @@ -// -// Movie.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift index f149e3b..56149f8 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift @@ -1,8 +1,4 @@ -// -// ButtonStyle+NoHighlight.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index c0846d2..9b5c20d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -1,8 +1,4 @@ -// -// Color+Hex.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift index a744357..711140f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -1,9 +1,4 @@ -// -// String+StringInterpolation.swift -// FriendlyFlix -// -// Created by Peter Friese on 28.08.24. -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift index 7a970f3..d057f45 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift @@ -1,8 +1,4 @@ -// -// View+Extension.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index 8be15cc..2a1aa27 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -1,8 +1,4 @@ -// -// CardView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift index 243625b..f203588 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift @@ -1,8 +1,4 @@ -// -// GradienConfiguration.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift index 7252a46..0c389ed 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift @@ -1,8 +1,4 @@ -// -// MovieListRowView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 01.10.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift index e33240c..b065d28 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift @@ -1,8 +1,4 @@ -// -// MovieListSection.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 30.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift index e7e3b5d..36829b1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift @@ -1,8 +1,4 @@ -// -// MovieTileView.swift -// FriendlyFlixMocks -// -// Created by Peter Friese on 28.09.24. +// Copyright © 2024 Google LLC. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. From 9a83c3b8c9da4dc7c030ea84f191003d6e42f8a7 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 8 Nov 2024 19:40:50 +0100 Subject: [PATCH 31/50] =?UTF-8?q?=F0=9F=94=A5=20Remove=20movie=20posters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../hitchhiker.imageset/Contents.json | 21 ------------------ .../yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg | Bin 150677 -> 0 bytes .../interstellar.imageset/Contents.json | 21 ------------------ .../gEU2QniE6E77NI6lCU6MxlNBvIx.jpg | Bin 434049 -> 0 bytes .../login.imageset/Contents.json | 21 ------------------ .../Assets.xcassets/login.imageset/Login.png | Bin 33698 -> 0 bytes .../matrix.imageset/Contents.json | 21 ------------------ .../f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg | Bin 111650 -> 0 bytes .../slowhorses.imageset/Contents.json | 21 ------------------ .../dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg | Bin 362505 -> 0 bytes .../9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg | Bin 565515 -> 0 bytes .../titanic.imageset/Contents.json | 21 ------------------ .../tomorrowneverdies.imageset/Contents.json | 21 ------------------ .../gZm002w7q9yLOkltxT76TWGfdZX.jpg | Bin 357910 -> 0 bytes .../uncle.imageset/Contents.json | 21 ------------------ .../y5yZaForGSJbPD66Cvq9AT5WMAD.jpg | Bin 274126 -> 0 bytes 16 files changed, 168 deletions(-) delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/interstellar.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/interstellar.imageset/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/slowhorses.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/slowhorses.imageset/dnpatlJrEPiDSn5fzgzvxtiSnMo.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/uncle.imageset/Contents.json delete mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/uncle.imageset/y5yZaForGSJbPD66Cvq9AT5WMAD.jpg diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json deleted file mode 100644 index 4f159c6..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/hitchhiker.imageset/yr9A3KGQlxBh3yW0cmglsr8aMIz.jpg deleted file mode 100644 index c71309f40bd76367f8ddf07af62ed0202f042676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150677 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

    jv;sqlHir@mg8 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

    NLA_nq~WvCKP4z|2vJx~1++ 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 z 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

    f*Ev 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 Ih_-X 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≫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

    Bij9b#_%5_RI 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


    jERupq6Xo~o4fLEWF;eHbL z2Nx*eSuq8cnxwK5nM2I8Qtp318v|1=NE}?HoW|=4mn=rJ-d875h|3J2X_C)<`*^fsi|ZX@u>lof?=L4?Rp_q?Ef@<|g7_REQRyXFsxWAzFdapUMf=+)=nG zZT-v(zw-h&_(UnNIfGTs)nt`wXlw z-iYgC<|B5?s2y<-FQ9nkYVa@;ZHF5eGy(qrqUEikI4SO8K=tlf`K7sMQ%TMhf$n26 zcLAtjg_j~Jq?AB{9AL!&s^qC!1JzZ3#8gh86LyN+WR8pvkvHzQL-Cj;a0315YL<6p z;pB|U!)L_29_3QVbeI`o8)iOqyMGkY^;f%tWG8Ns|l}E95RP#Y&X{bWMB+ z%7v41*|ElF8MuPkHb6&KwU00>Crl6{P+*13$=$C~x$H}}w^$=BNp3y!8ez%Q9e)uk zfqxR`9LDwaDlWEGb$h5Se23yye8Lt9buZzh0QEggM5u)?8OtefT)2YOaRFJ$8??q8 zSc*}ydswS5f2fvbt1RGNWl50{m*{FgAL2hy`FENjCoxJp(5 zT7=TEy+4?^jN|;YE0auMyE^p-R#!eqHp<3QrKId<37N9X_^U7U-_3j^2Xn;KDKhwJ z8>NJ~aSRh|s+?}6me6$=xwv!*YT>g{@(T&9q78f`)ZD2_PlNDXq81u;2ul4a@T8bb zzA-h&#+D^pnE0S-RH;zJVv?=Mi7g{BCd%$|UkO@@&ZYGu_M_NA*yAy1(!ooEX+XGG z=kNw4g5}~CMB|HuhXZlU6%9vH_*K>>A$&`@jSYM;sDF=&pS-SFf}gT1FY4oY7^Y5T z5XO6ev8hKG;v{NZ2Pv1RU`LM=2FK=czL5aKO7#*(wBjYdq-N@jZ}?-Jx++!bOKXk| z^#vZemMz1>xoa($yloy?OI9L8a<%;dfO=5uta&ZD>rqKq$?2QAhG;#&h+ zJ3$yrmQQ3>rCc#}%MO=$iwZna+XIa%C=uEvUC>?#nC1}U#4io19$1tSfA*C|>7ajd zCO?S3BumT6@d2v%!Dfi4dY6>MI*Xyb%qo<^=WbG5`81b3;WzNt%hk*!bIAk}%(3c= z9sd9gB_M9)aWD$SsE!(xUo`LFvrwn#xiS0|_ewhM0MI*@Rxt7j2QBd z#L`@9BvA->>?OAeS(J4!maU4d(ult{US?pU)M-!@OOAiRnS2kXU*>U^)tHYntpNW3 z6DdJ>TCk>p=WKw(q@^#7zGzDR<{t6_kBjsh~U#P7*wIe zG+0N(_l!y?&5j;Ok5J&vyM;o67nmslb;n;4Ao&&)$(;Vu&OrNv*hAFWj)N)YxM68e zQGGX!O>tb2F|0gw=2C{0RqkT%4Bzt;CoysiZaO8DaWBDSX5wMSVsoRRxTxSXa)U|x z^%KinCGTS>Q+t$ zS8FW~RlowGy8!|PCT+|H*o`@s^3S4Ph|2hi&h7*mm_k-1{6ObF0Zhpg4>K`tI2t0Q zq0Hf#OP6qJa5hV>WgyL5N!;?!KfzgS8kD`ut|nPTLrPwE49zhxUJ!O2MK-hY$t%Ga z*!w?#hTQa@ytbzfK@ys~233)-5NGlp6ZVb;t&iNIn=dzrZsXJUB9xlrPuZBwy>SNP zNl{NYE%zJ5*~q1O!B~l=VA|p^6yc6}&SO`HfXq6ZV_9Z!>TFf4h+4-}NadJJ}&^zhxxy$#N3@K2qj#-0{{v{sK4)2IvR%IJl(KFTs!|tQ4>}CC+)&NPzV&S;y)M|YAq z%MQuME@r;si>3>N3o}he!xTYcAcC_~0vi(3xhL*fblYV!7PU6_AVOVe zs#3jQcRuEPT@Z_2gZw11Xc-e4h|9S5QGR*P-4a_2;eQOhTkHOf%!(L{auz^TAx*@n zayGRSI+)HPr4uA!K<%C-hS`1WxU$}u*{>UmVl7Lj4UycIwHPW4aSi6;q{8^~0?O&6 zN?F3Wt|GL?G*7v~(CP-y#2#}{;YX=Jy)K~|l-Es ziEOWm_{~MHfC-nwIDt8Ki?uXKWNPDJ{tQHziham=fZ{s2jgR6g(}=d`n8j}rvau-R zP<1IN)DBUWH#Hl|MUmmPi&gekO%|(|CJk3Zh-Q2+&kYri3%b$)T7&V!*05A@j zskOU^$mPE-L>g&Q{{YHSxztrdO5!O+I2h>W(zvQQAZiDWqjhs~mWm(`2ACjIk233w z{{WeFLzg|p;5!U*DC3A&{{WRKj&@T%hFcrcAKHpwz*DDe)It5rp&P6chc43rR?~}x zg!EYoIF(ZRMPd!5o2O6_L`j6mQ<KiOPaQC_T;%kM_1<93j-uAla<1}u zoN*ic${=}{Y(_a+^)O}|;x(li%oMFnz^g!InK%u@GOA}TSV2ZVLd{~&;73y6!fQSb zqjOOUyG8d7R@aK0Ssl1j%oGu>R7#0loOy(A64|*@zd~aQ@I@NAO2Ao^*5?m6 z81plVg4v^p>@uqs)5|01Uv(bLxQW^>DjWp5NK9O@A&8b@W(t<_gxCC`@nlS660hKE zD{%x&5H3QSkW}4$3=7~mr^7HJ=*1((Sv^L!wV1WCy5d`&>AM4`h$7-oGJ<5|w94zX zdy7(_9OgAxHSB>HH3ea!7J-0V>Re`VrCQ46;*3Og)3dT@|DgaVw|^d z?5{PL#P|!1RtjHH@X+PW{wE{ol>60k-K)8T^tXkw!z??MyME_^T;8EqfvA6zZ zX~b46UWQk`RS!>z-G{_&64fIVgapeK)TP$tjtPvPQViFWDGPoIOP2s#!+=o$m~4(8 zi9|w$dFFBPj7Ah#D!DwUD*=_Hyse44;$alW<`MBj^DhW0$N;jNve`jA)fB64ESgIDqD8gDq-IhYMi) zg)sr@0mXbOECAaHd}h$51?ISAjqfQ~mv`3U9Z>$%23LG>-Qg=VTXfIVW0B`JViFEA z#C+TbizVm9aT%e{Gx@2WyvGb85St+J_*gi6Lrb>f-y`uq7v>YyKX{&IBOEcyj6}5A z+@-fpBWO5m{^c9hr!jtw)O5L~5zqy$f)%POXu~AtX1v@sp<0dDUQbgDH3NjK?xtl@ zUR3kz{w1`Aiu_c(=vm*_q+w}lXD~Lm3nA5W7#T_LH@}TR z@k9eK+z!lpmJE?{l2Tz;iCT-Pzr4WwrCC*B+&1Cy7S+VOSH+r>IheHt%W(&bbtzHz zn<-l&t|;DNODM4?_ahfx5iM~j5|XmUroL3T&kjoc!sca#RLC~VrsAJc$&EuZ7?_Xd zmTKx_an0&4codvNL{*nih~Ws1iEMMuT8I_sx0;Gu`AW{O!W%Bex`9}W>E=`S&aatn z2Fz65W@h9CDik&FB4~EO4O5O|TUG8AeuPBoU6l0!S!J;?p^T#IE#^~E<-aJcMlQ0Y zNB!N#Pa?aBY>wME8MPe2ry}MV)0@O1xb@7VnQK{@7I3@nQ>jTWT`-mn;rfEdKh&od zj~4QXjQ~|~)x?%iHyoo76asL2jXhF^)6j$21oU2D6bHJ93A;Gu!l@@sL z!39w_C_Ep7HZoJm{*eyMSuDc!#6x;&&AN<f)#4wVKfW%2bPu?c;6`F~yL{5l~ zT9@KexyFI0WiYcd@YQhLMd>NU9+;HG`;Gu&11hM>*Tu?3ELO{orf((;>&(zVF)Gan*Q7wYc@eG} z;y$W!)Vy`>ToCz2C+mUCM|oAWGB;q_ae_p%E%(aDhf*69%kBDRc13N{OeKz*9x64vI?_ zvBbEx5T#)QV4SW?vsEjvK zUMDDYh7xA&ho3W)`%K;f?Et$iUk9iW@~1%JKRRs&8S+8I|?IiR*tit|?&0bZO%5Il*? zuOHpwC0?AtDi092XBi+M*#`i_3?^=BZtk$uEV4jiU~HF?8-FX}B_K z^8%C;@ytsHCZ#(}%&jmAH2(l0h$?6dCzz%qrdiya%c*uT%Mz8EXkkp6f0R+%rxH{HlyPr_QcsPLJg%7!2RX06M?%*uC z2!;5Mgj7Zim*YMla)8HTsYRHx2H1R|;c28O=ZTWQ^C$EFJo-(W@ zlP{KOi~&6%R*%H7sX&NeMz98HY)qAAAj&gBR$8te=AGGWCC1o7Xp{ntWgOl5LIZ#@ z<;xAhm%lL}?pa%@ckV9fvgL$%mO0etF;_9Exw4FIZtdT?h_(n9BlI3 zOQrjN#J)=YQQq(p)ROJEhD;?}PxS;Un(+_~XPr$W&x@4gqo$ypM6;vZr5f0eh&%*C zKnv{*8MxANYco)JnMkf#*!3Fe+z>Gz)O3seBlQ0O5ygzuqpZZ4T45f}{{YPEg_+_k zmF*=wmt_RYDSgDD{eJ~F#3DC6gCwNA(G0uQi~j(sXn+IiC4Ef71!PK^!>PH4_(Z@o zIELs^wlr!sCSvXW(B~#)c#5H+_7E(VcfvNGdJoMF$Ufa z2m=#_GcHubyrRMwhXPe%0^IXaS6m0w3 zyF{o=Q;+2@xkfx4QshUzs{oV%Qf@%|$8IKKDH810HFhr>2maX1RL{F6V4MDrA5 z?q_kpDb!$EfH(|R(6l5Pl^?)3e!Pik# zv*Ht1cZ<~JmD$_?h|U%=wW)XRBGLSkl`FEb7#?2cM@2=G6diLMN#jIwrr&q|A*PYh zHb$}6{6elV8szaEFPN#>9}LpHbe6)UZ>NvmN3UKi*5O9RmSj}H*= z+J-dwg@CdMXE7V9nb32~3MyD;Rp2ak-!VwG4MsQ5faWH7t|Fg|nY8E_Sq5m(?Gu;% zR--m#h>>KMUZXU?1T7Ov{7ZNDG3PS^)Gp|6%Mx!I&D>p}Z&!6TMsYyQ0Y&i(BYi`o zaRZf2vU`S=a6q8y%)u1vGTC%qAUX5QK$u4vP_P!o?k>)bYBho77GZ#~7i#epng0NU z!hVvGE8jrN*Wf|6ZG&eM_nSIFLl}UF)NPi;Tr`9%ViH_6GEw|Wr8g+VwYMvqaZ?iK zxupws&cxLnvtId*m#1(>f(X}BE10-I43TVhW-`IHpi>gYqpP`4G4PfYVyBqIJr;^c zn*g0>CB!DjfQANRNLGVOiPx%u<4O`=Gs3|5nbfx=RZsXMLE0L2W7((Y0iOOmzN+zV@A;h-` zrPKz9)S$C^Ba%@;#KPPwg|)(LRx@b;FVw!FM$nk(cYMFhKuTc{&&v@-l?xl~}9no_<+N{CWR zj$;Je!%*arZv@mJOU@Wvgk9{Z09ubTC)DoR>KloJ|B9BE!(^qM;!_3R_Mv0; zQtLzn;-h8F<+_S!;`eg;-r))+31hA!u2Z6>iKfoA`@#FVG36>|x`P(F?(-SGxgd}a zYj6XuEKK{89y*t*Fpzc=6VGrLa84#5YnX+E8*xyIEJ>VuJ;w*Rm34@@ z9k(%)(flLTDvV6N5G-CHh*3srD#lqV8jCQd()ZL+kq%hEUd9+K`%{c(h?nckOS0h} ziG4|6wv-w;iWM>3JcPp$j@ISQCTnlzC{SkE;#i?kRZPI9YL6|Hz(Vc=nTJTq>H$$L zj1iL25HQVDv_=^DN?6})Y+SV#Kn8vWa+Zk{;x{xlzo@1naFkwRlB3LgrWbIwS92mE zsc;=X*he~Xw@`5Msd2u!+4nMxX*zmkZ+)&m+G*}iu-#>L+Kj@;fv0{TDfcq;j$#bU zEKWT=d=y?26)van${1KciKnP7lyY$~yj-kMM*)1*OySN$!So@*%kfO@IR5~&(c#jf zoDyRR%Fx2t@FplxGTN`V`Hx{cy8E0tPob6>Mfyy2f~Lh;1zbCf-jCvG47^V{%Tq>X z3;zHT%XKXZnn-XWi#cVy99|!K8Ll96&_j+#yZT!Y^zkP*-!3TA0)~h#bL0e=$^*jv|T-G;;<`kQ---T!{i# zO~enjA;VDf1O&{eyZ#q4oPTuFA25YT#nc?RtwSuyxW?abxm8Bx;`Y?MiWL@I z&2bRh_JPQN&BD5kYPxsk2;8VCc&U>W!HsMf?iI*R6AU^RVwj6k%5$ly0k&CV9m`;E zqB!DmJBdaShXq%(>P{{pSFT{7zVuHSW$`dWFygPMjT+8@pHPRbCKeZO%UYQGjp5;{ zS%^WzY35~4HxNF*X^JPb1`1`pKQioNPh-T+VsqOabd#m$)P6{P1O>iV?EqEe{X;wo ztqF9l+VK%qSUM40Q}j4Gtj^B}0}86>-^&<`TNO zc*iKTRpxORiBTIxW-po8d>B?<9^K3-r^a~tW*T7Js3gn&)ITt(n;pOgB3(Sjt-maH z89Jha#8FswH&9kY{{SRp_l&aYYsKnjG?p%)Hh05%mbljF`$l48nL~n+PwW2U5AP{< zg^V{V2+ArS;FVUkLu33EJUDXriB1o7tW4G}{{ZeK9_xY>EbUxOq2x@68z`4a+)LiV zuhA?1Wqp;@#fYl@Q=HZgri3cQvOXi?3r45|w+bZ`Dj>V?%b4=x{-=8`YB1=;D$T&m z2p)1NPPyV%>+H-v;8mHIP;b%=s|JDu%Nm%7D%>8dApZbmGpyrX#O&WlnZd|Pp_{n6 zuo9^k(opjQm|_OS;sd6o#g#96j`J0ZcQV_2%&g!RPO20-wj;s>-9dLLUSjswiH}_o z`INl1D9mm$mD~=5f{VkX&H(_aMWJk7HCcgnz(6%A_X3bGVO-WZgF#C&F5o+bS2G4? z9qM+14z6U0ttgfuBUoxs+ghGJl<)_ii8Vr48^p+Waj=7dDPde9-r&@;F)m+dHy3## zQJ~#w16@u0yO(Fv1L1=BQGq->h6I!Akb>2w-NR0kG>B*sjrP#Y2sRXh2>FBPN=De~ z9~gx`{sQfS-9>{{L?w01Fj+Z-(1r}jE)Q^Ee&UCneGHw4KNbG}#qCYjwMlf1i|bx{ zRW`ZE-kW>PZZ*eFA9UC0cs$DRA;NX^MKe z6WqY8afrh08#z5toA#WipQeO4GcPUF&j8a|+dVwrfuF2F98L@r=)+rcFWy}b7^EYZ zH24drKjfN9OFz`DEx2L`F8s1nbZqH z`aO)2aG~3eZeB|PjJsk)<}AM0f+D^jB0@Uxh|#5ohB^CONv#k;u!|v+-xl{Xfry31 z_Zdt9BqlsYZQnnA8v4}ytIFWrImw=ofkRE{!Gr7CbY}u(dgO_ud6k3G*YiRt&KIP| z#1Db-u#mEFfR?cjiH+*0vefV$TOOO&ins%bVkI;tUt`0hyG*Cqb340a1P$~R#Rg@# zwASm~{`LT+DD;KE_Bg5bqewSJm;|WKuF~8WOsuub3p_(}nAO`%_W8Kyn8@%cW-}A( zA`f-XE2~6)BRUcU7`E_BD+H{e+^@vietjunY9!21nHJ`$Z_QX-i zqb_?4R}oSxk@N)Ex>B|;Wk?R;dX;2bDm-*+F*Q`U@ws#wA*+62RFu=0Hzm+>VhEZQ zrJ5b>*;(~7O2A6oDC|}omTP5S(ezz4)a9MJU5n~GKCOeTIa%qEpTee>s*;hlS6j$g z3kt%RVzXLcTbYvocao9mR^3h0Ktl7ijmTj+k5^f%o^=gHFKsNs2L>fR+|M%#nR2zf ziXFDeq}rdu?E{DS^geP;z1SFNFC900De+7|MDn9u8pot|R>Zs=f9gkZ{1PAC@BBL{Bt8duS->>t0dt_~^`$EQn+fWiC+pQjq4-VXWc+MZ==LMy&&9a> z2O7sy_wXsSB~ivAwRdPSwgx+ufw#=mUeTj@^eLX|0?to=L5E77^@vu;R$)5Q=TNlP2e9V7I@LxoArs|N`_`epX`Y;E= zP;wc!$5f`FcKUqUD9$yS!2tLyHbf#Kyjwdf#m4Hj=@cQ5NJBnWDk36zL|z}?`B_@w zI5}YR25(ufo7WNNSs0pV`Fi?Ug5&?uur63Z#k~dxwg!1lHtSMgSAcrkf%js9_BC5} zwE>K^tc*6_JXb^`G~eQ*H<=maeZ+`kkG{P9Q{EE?6!RZ!3&M#v^VlZlg^_#e2HjHt zvyCZ8y36;a5>mq!pzmcBMeGoYn@9;GMj_9iu_-;cG}E5zH@cdV5bI>lK|bTk0b7&w zsLlhAlD=ZH9sopde7^X3<{y4Ts=6vn5|y^g=%~Q7QOwT9%Q4Pn_C22xTPi8pF7|zR3ZnFq|-R-AMcA6E@1 z!dtka1wb-)kOnuT36Et4KLulq-ZumjK{iEq?8{PhZPmq zSJx|I{qWkFwJ}NIn{sn;&zqF$Vr$3BsjbvMCQS$Q)#-?Ri~yVCSm760=tqFS{9a}b zk)vb&x2d;7;DV{OF~DLTT3*s%o%z^6eE!*O1jpYD%U3|8Jo)vneV-T^Z{F4umKGt~ zoF`+C7Yy^66Kdc13NAOFa_B2T#u?ucKi9EZE-Co<@1&^LltdPjZs|uVjk~mt_4~#G z*DA41E74KdN%@8M^Nc5?KaqO|uiv0}!e6Degew#>4%#?@8cDHdOjUD!ZK|O9I#n#6 zM4e@ht-kNdeU$p=9_+FDFq?OTcG+Hr=b!A+ZP?Itl%!QtjqUyguFjnv*VRJZ3mxLo zVopJldwF|yXEExU`5E-+vCMuoh!6v1vheU#wvf&MV({u(*43mdpGoZcQSarNJQ1j9 zS`44jenfW~O5BwTey_hu$vRh*RT=}=dI@{*aSZ3A>1W9A`$Ev(#ssDuD~`!Da&Szx zjMA#~H?|{7;eyfqZ8fS7p7c3;LyB1OBwoe$^;pEEp}N(&ycFFvn|?l8L2f}}-_rds z555&r3kOKL55ZPz`|vRu{<8APybX3=`Ad0rwB=+swzLNx1es6cGeGJ4CTE-Gn;zDz6PMEuoknO`gJU+h2X^0KmP8NRdzjIwUc|x2ZyOUxm>DM1Hx+D;C z*EyRZ7F%3n=PRV&2HXryW~d!7O|#y^fWibJz_GN*rvPT(pvITibi>8mghyUw^=1eT zNc%6X;qXtWP7Z%cdZL47K_`cU+L(Q6D1gHC(+OzP)$o&pBX8$9{0A92e3j`xXNc%1 z#y2iKF+9rilJ3)ZJ&#XTm=#>sO4o=RpP%J_v&RYfPe#i`?8oi zjcz2TCCU^yypYE^UTo3La-Ce}USHqIe&|Unev`e3JCb&vwSCUrGwiB8RM4?oVLcS} zHnXKavn2apjW65o8#{D10GAZnOJHj_V8Mk|XZy)Hn1f|y$K<=W)0H`iuMm4#I;%`D zj^meBvoTw_2cPqY`O* zT-LVoMQ)5=W_6$4YC>(;NY%%`lyKW$xuMETNF2JUIIRt6A|F2Iy`kQR;=3Hkw&t{_ zWtl8TyE<`%+q|RT?#`HN}QK=!y3VsCeRV`CTAEaqv8dk$T`jHwd2bG<}DNQ5Tu zQRzi-c2P8~I)k*Myg|LYPPX0pp9zN6LprwPkXk^x@vyan0nxVFv%^Ri#0vTvgVwJi zx=R+*5Jms)u_X!}ax?+K-o;}+05noEnx){^jZcg(RkPYCOIo>N^x`@5{9+@n;X3FC zXvF&XsW|G8axdUvI)YRcE|4@u_X@tuH1cQUP$>E?Hf=Zg<; z?lp8b*B}p~h_hZo$uX10j9*lS(raIY|0(957p)>U^i)_N!PfY1n)0bycpgu;HQs~Q z3q9&IyKQdEsn}|38`xQWKjI zQQYI4A%!eaZA%3+piR<2CiFU3d%WGWZ@$ohu2wme@&PijBW)Zw2Vat(0<#(pA z25EG{k~UH1_)KYz;%7&5hp%?v>$}eE(65PTYkNuiu3kCqE8WQdq%#N-{%ldVC3}%R z`z82HoCRS?L4Ft)o& zsI2jcgYTwj?6JQgXhW@2giG`!p|^D}Dvk%|4I5+lh*Hnt1>=#OA(wWWAQC6ww zi2S%B;mjdIdKj5kAD40GqTF4*F>S+uKI7(sd-c`?qv5=CSdfSeitiV1evqHQ<-E|d zMmi+%{@`|qHaP`#o7w{4q`!S9h@pTsrOd41oFhv@CSZ>s&+@(g27!QC{*~9LsRCd; zlVk8gYi-!>fj|8vI0cv#M!tIrY08LA_-3O2&@>S_t5j1l9fwr(M41887zd*EeU?wo z4&@j^jYF^T5WjLpOtq;>eM#H%oK|c76wPh4T9?V*;&0ckJXXj{d0zA2XuiWc^O4BM z%4sV=y`yQx97w@)WE;Z_F(5B$USx2%hUoeyDv>){pP#E*drTJQgz`%Ru6_ycW(EtP zyb=^F{K8afRvo1($0mXIfY07D{5ca%{oc;~O7|N}I^6Uy6XG6<30GWt9C0{W#$WJ?D6tW-KDr)7>X&bpm4b;_MW47r=8_bdio@tv? zintIckgS5c5Q;<)J`nOVOqS$!+GOaAXa{J^k|lQ0-(Md7=@;1O=dl8;Q)K?mrr zIxg>2mQv$giRI|0aIctX=v$)KcHARQYG3SsI<1>&^D&orkU8UCrMlzWakvq4N z^mi(0TsF*VpIHtznXU;gT>hKE`?LOk++khXuwm}`ZC27`zzQp6$(W$K)BCtd>BZeD>uk%tJ^16om}b|RAMEO*V1eoI8{kVZv;gw2k*w8XAs zm~=Dmf6Y^A?MM-yr@fgc@Lh{?lRM`S^55%6#l@jd4F1rnj5fT;q01vf6w#ih`FhgX zre6RmUD;&y5{mls-`SvxED=3}`-G+SqwE>f~y4*P&N35yr9SCI8rPT(yJQH0a{2n@4=}_9MV=c$a6g z1<@Nemll{sq4o5PqpSWKPYOtd?Dns#`J>%p`fFI)bK{}C2x*ACggU)6mrr7S^eio5 zhs+q_R&+tIusAKY?FtF&=MZ$ZJBAZYm;X>>gIMiGgCzjm4pT&;E2rfaftVf7J=T%g zh@{zfKavY?W1Ei%E|y2!zWazRy;}(oS?~?}DlZPJ|I_$CztH5(naYh!%?5kM9wn+9 z;!sNd`I+eGZ;j+2dUN|bd5U(>(BK4*dGwJGtEm1ogKlK zTRs4A2~ZxJXXH0r`UZ+y_2wYrVow#OKMLU9?D4ko!~X8<%wKtz85`rssDqLhuk2-( zR-ZzS((IVm>~Bmi@I9FFDOD$Yx!Lt3rv=jD8dBYy6+iM$`{zO9QnI`wjL)^49+Z;n zy2^G%W)x}Sl$XJhbVByb=WqKAS** zK2#U0vWsl>gnPk}B54nzv_4L&y49gMy(nm+8<=Jt5{geVeeR;E7{gnEd<$`@cPb=X za65+YGM+a+cd3&VvW?=nDqx+d#qm_%O9jt-%@B0WVcMR1^@2yQmsw;|AeQ`^l`fv8 zo1q;laRHPd%V+mm55_<@ZWUcVd+{A&4~R*rWssxgyy^Zdcc{em&>RmwXH2zkG>gb^ z8ww*YEU;zAqC@_-92jme{7-sg_HU75cyXjfP%~@RM=;E?EHS0G2IB4DxZ?JgJ)#sv3r_@E?0LcImB>ICWetF zK4v9LC2no7Q-&Ah&57{lcBlp420}A7oW^xr#6&%_&_q?!Q7YS>U{o9VUrFD8oeDD_ z2VGjt?;taReh_LGuV)Xx<%vw`9_Slje@Oa?Yc?So4+%o?&Hj zxc4mg1by(x;;tJud{5{$)wh;GQlLUg9G6?Tm*#aUaTo;XtVv(cJOqgP6E>fM=Q{~5(<%D_Ao2%pEN@d0vs>1C8sdWXV z=9HXyPK)Zz8+vn&7VtYzC7HcZ`LMTDQ|e&dmmVKxEDiN^N{ztFJ6XL1FrO@sN-`DR zrsKQi<@@Hw7>%P5YGm<()x>o(tY_z8Ftqq7-tm#?^oiswz>B_d4_{5KfqlD%{{I3n{Yv?Ac8g~!hi}hs^M7vTL z;rTtKqvDH%glj1ri(!84_K?z3@+`)wAk(HDxo*Ee7f2m-qztDx*!=AMAC*t<$p|)Qlz4``q2*E8utb z?YcBv$%ek0am%e7hRzy`*#?z#=D0*{^xdqI9t5T$uga};*%cSGwm}=qa2cDvhkXRY zrg*`fWP3uj$WNxliPcwv(6AJf>NHmmphd;As{qIxO61&Ij?bYc{THFdqE<_4Z z85eJdCL$qZ?QkPquJGbZ4(Dm$LaSy8&}ksbh3v-(fzeN;5tXj z<9s~TaRg2+?Bmf&!6HDfm}qLQ(eVr<;cIPRQfV*n<5|`r>kkqIVM!m=jmB?1I`Gyy z7W8(Ul=iRkqrVoLP|cpfj)5wtU%&s-#B40LVnn(_Xgb9f4hfPa!32NnU6K4E(_7J7 z3kiO%rcNL3oieqO7>~Tq2y|Uk z`gIIVYxQ?reyGzPHy%eP!X|}lqRZXlxu3lcf0fROH#Ztq^^PC~|IY?AlnV!_Ps$v2 z56^Fp@MoFZ~0YU2w2!kFmJ|MSX#-bSiKekpMq)L)iXcHPMceGQ9IN?JRN9;vDSn@ z!Rb2!fNgcQ%a;1lYl(`y|HPF8;Pd;C%16RLxwdJQ&if(Db@%5Sz3ygmhrity(rSfi zgJZ~MAJHyeZB-1h8#MdoNBCX6Nkn*aqeA)6mw|sPEwS+sny@W(;XkJDsC=bulhZSk z3d?`-$ythqyFNywGLvyNU%k%wnV?VS^x>_-!o4Vw!mPHXe|EbcP72;idr1=~3^~|` zfC~$(<-}%#>@Gw3q*zrocdBIV^X(KxghvQ?)vh!HZ(UtV0Zq#nECl9BD}=MUCpTm6 zMV1NduoR4J&y93eYE`O467LNSI%5R@5xW4&{TE@o{4RU=rx1c#+;FoOrS0mlV#Wo!zs9w8*t9Eo<{x$&T4^oaRovM{<1M-YV z6gcY<8;V=%SLI!o@J10IiyS@6;q;0?Q=ld#WH0nrmd~IW|F|I*9wc`7r=)HkppGk` z&ga<(`;%g#_sV&z(>(^d-|$FKxgYyJm*R%C0o_^hTuUyJ#H~zKXR0qU8ok z2KS%+lzl|!cc<*eawZ{_vF%ycIDih_Z2 z0cF@M*^KSQn5FnV+_2Mvah4i6?kmOC!-MGVuf8eOnE+hvzOKJlLR;;o%KqLdXg76D zIcwC>h&FVL5j*zNBGOK`Qx(LKNX#D{Q+UVy!QL)!%5R-nQThsG&1h1Nn6=qDiBh~r zjW~5lPKyv^V|y5vW=3RHIAjMvJuNMaGI+$aaz%=VhV`+d%P5tP9IbA}rs_E-%nZPd zyp3>~I&6r~&Yv8%D`t~h6uo#uy8lS<++vit>7ZxLlRufsP9YUz}wpsj|OFeu}d|SlAuX5n&6fg+ybGA>J_L{B5vDQz^BGr_#lYA zs!ir(YeVW&ZK7jbs(YzztYJeDhe4KW|A6g6pIpx2Oit4CnzogjwRTm_7lug{mbs4j z6u96RKzVdtpa%Sga=aj@8!S7JqF1SW(= zvB?AWq!!sQ@=2COp}r>+$;CnQeGyplbp?IIexRj6*Y^-W9Bav=iE zp+vDfkX*G<)(w+9t?%en_$fwCMDpapV3KQQ>9M9^dq8d3KYPWsr)fXr-5dGp;#}mTPOZcyE2~@HfX9A{#xhS$)Tp_NQ+t)$vK4;pEn7 zs@}DQgGzy80`2*noCH5olclqWCM5*`HuA{lO%9lRvVa;FudV>FUD?jU1(nI2$CgSr zpZ>>u{E?^h2><}HzK3? z)Q;MiM0ZXNr|R}0v|Sd|#j#z21CxRQF1C%xKS)4uEL-xsk@_gbPoW@|uIeQ7wb(& z>;Z-%v6zfW(!yjoS1d}o3=TH;8uZXf72+mNozxTEOGE5P%vkTc>ALgxOS60lK+kO) z_<%sO}Lw+UEeWst@nI_!P!Fj&?R$d{rZz;Y| z^$|&W<6d`M^d6?v=Udj$YvWwYPU2;iHN|0q>w_&y5xmK7G`O4~t>aE)@`SCjz~%^R zgRqpyldCsE_G-g;eE@o` z*HbHnvfR2|D6fs-wLSF>XOWm8wn`K8udO9nUD@AABg~0TtV#E80}uAF`2>Wv*+h9> zV+?R}R~+aGHFm@25iAdZ0clDe^LKk+u2}bVI6>_dd-Y>r?9ov+Jxq)>TEVSWDbVpS zLz##OHa77p_G=2_ghQCw8ST_zK*>bS+IdS^yG@4OW)N zuvuy?719JuNxqNEN?NL6p7G>GFG0%VEv2bodM2l5Ru8~&IW_yu^Zdz91w!lw6~;o5 zxLq5tD9^jc3Aa?A+QS-YsVahyJnQO8Z4)avljGc>6iF^=O#9h&dK*!vKj^Gh9;a8? zMX?6;;gYAh*0&}Kl{z@j<*X7U?H&2pi#ZBzakCG+xeDynh5gomBXUbIkk3)Xl&=t8;g0eN+}$H(Oftf;OCe6EO@ z^bePsa5=?)e0Znly5&_{{}#;kRB6_~ouUA!RULaG^kcd17FY9{O0)J;OQtfJZRIr1 z3*RB6zzJipe{pz+N#(lYSfB8(yYrgtZuOi(xmVN3%ut>@L;KaoB_=fyyzPfNpT^84 zAdD7V+ow2VA}IMA72&h;QUdH2!^ki~pE~i2ZwW%+7a0&QiHe6kl`7Ac{HXrdq*a7M zRr%70-Vy#pI)PzYgfvwNnlq;3Sj^K{4q)N+4(4$e{x#dKd5kNbz|~S#UYEG6KKVV~ zxOpQ?n*^0h@e^u(pLDA0ftN-xti+}*7(}q1O;W*4)k+dLv4k*4yf%Lk&v zv_qseH6|ZUEG_rr!`%t3+)aWCTKT7BdvsiWoO4jvGqPc0=r`gGGf2gzrBU)mC<@Ky zVV&cld%g5rlsWvV3gPDB#^6u80SQfNRl)kuJ_lRPE)?==AzICiq-%(>=kvQ19(z{u?Q_E)w@Oq)hFQl23phL+|@ji#8FIAWdWxm^{fu;u< ztMN_Wr_&uBvo8&TlsoA)s=N>FmF@6I9iUn6-R z)qQlO!3YY=_2Jr}Wt6RBz`Tw+6X>Hgyek=|1&?6bcN{7$6ce|W4k;n`NfLRs(0M>W z%b}Nu$COtR>gIin=&$t)TjJzkN$55+Sr*-xHE9Rahf*Fa7no7jj9jPTG?6!2SIN>^Lq#Q7{~oZJ$n>_G zf7J92)-AYUn{*8Xc-{{uKL_e|j)#ixmIOL&o?(Hg3(P6%4(|XYbk~ zO$!H|`viO_!)CUGolCP*@zxW-+0Ykd2eo`k4mZ4cuk@o*aU-=C92q6GIsfU+5RNUGhQ-r7-LqYue_E#JQxn> zVzR5u{l2J_V2*A76mQWjkBJ2X1$)IBUQphlXVjrK!Q0n6$J^WfVWATkFT0F@3;lxsqNRT?D>MlYa(Y1tkoxG5$PTC z@}!z^Ty-G1DO@!8DBVRX13nT;-TJmNlOQe%%rS_1%J16&_VA!njJ?BXU^zZa zRaK<2EmZk)2SpGp?o%FcdW)G5g*e9LC5if+;>7jPjVQ%_VIuc9u~ee)eH9Z}QgyJx zZbMb(+U=jjM9o11$0HdTsCC=6x`j;)BbGDwX@BLMQV-A_W>DAg+ z8)D*8dXL)&EdYT3le`fV?wynWyI#YH|J%8ot6nek5j*Vhn?kPJM z6`M(JF8)_U-!NMBEdmVKN6>OHdJX0tDHw*tn@MZZQvA4|qwSq6ilZ_OUx9trZRwK( zUgZuX@9SLXoo60CF0NE;G6jWt`DkSjY)W!9%vO4iM$Ie}-iK@A4{-OD;F0xBsEA;$ zE1aUKozI(|&o?>sC52r!m>(`tThF_XL20*wa*@_-*6kGk)=i2 zjEuq6ha;-5ThiTUJQLSqf|t_qMmrFmR(YGRdOCaC{Sid$I6aGtaGWHL0QLRs_Bh}N z)>M^hIj~N?jYcVe^bp~c9hGof(EL#+uu80#Jm+gOje4GBhE73H`F^GEbFjKJN)Yw? z^uNBU$T8haTlGn78V>h%7~8;12n$<}%SNJkVIo9%i5pm5*p@ zJ!dzJzzF+gLYZC;)XM@D1AmMU`R2eBEpOrBUfVwN>g1sai>`}9+Gke`W!56zuhx63 zWuy=b!jwl*c(s7+q+J!qv#!e)@03}B)y`pT-l;N+sf(fSM|%%u{Ym8ZnI?}z&x+6u z(qn94dw|#D%ypN(2h1rKXnOkgTZ9s2exjjTTcu@&F;!Tddb71ujv^^<@gH_8PB`3q z2TT0@$i&7eKcm}rQ>~q2lA%^mVLC_OIR6h47K?sn4s%jEV+hlX!RMQNABHg9=_cvf z&dd4p2Qw%5`aS-qox>~>;92SY;*>YtlUvjTqBk$qy?qE^bQqEEcn}Q+r~e||d?RMi zASm%c&q^dGV@LGXJvz=beFwNgWK**8%bL~kb5=)izz@QZfVcb^-`7*B91x~PK-4sg zxTrj-xAM3>eUv2E1TTNBE)mX3^~!p2cYg)_AJ#eQ#zO**!jf59eQk)sOBAI0*^5M} zN@`tLv7(!}xa9M!70&ar=YM8KHgj*qTM8vlT(?yy2eLlEAT(<;oeg3}>Vk#~1okKj z@l)UdNuIh3%tPA-TZcJu19hc~h9df_xvsUrob_i(^1IGa5y73u~s$X`>YNG5;|1NQ*c}#PZqlMq#^+m;^ zZKqD8-fs4*G`~PY7jq{8Bx5Q z)bUg<9XNG?)ggM0w*HytY5a6gB@VWDpVMK?aHPHzCCA>3Gp#e|JEo_GE@i^JPw6@) z4YOQ)h_70wEKU`Z;OXi#n>dGFVK3=hJ|x~`=l&iFDn2gxM@^u-M+~})n`_S8g+4n! z61&7DLY`BiY}RUmCan(kqBzC^7+k%BZu=NcbF(N$D>b7?T8iBn=)OaznL9DaIL(%~ z!3xjb+WocganMB`dOINaVegPkPMIblKIvpYZt>ULe>Ma*feM7Dl3Ld{rAM!l9@TX7 zE18Z^^fa_GB|er6UXDTdSj?_xMoB-V>rIEHe#lR4O^#P1GvmKxI@{%b8WZ~jk(xgS zjc>&p=g9`=O3m32#Ye}Ki|pRLC8>bbhqr8MKh1~XoCag)n(fM0>#H^?dc97TG{NnS zif&EUh5+d{a1gV3Nbxq|Tx{cCH7_DPIBe5Er+paVrRv)8v?!>Ieu)V0|5pGLXGUv) zG%V>cV45E-7v(+zk2Li2M5k3I8r`|V)Sr#xOdH#!kTk02+A9|`r%BQ`)64h z?3m_>VZfj4RaMT$?01L34hC~(?+b?#W#!mO00}48}uH&&BTFUG!^9?!;14#}3icsQf=-V~h`?0!NAfknk z;MY0-=>UksNmk~=+^MAl#RV=M9Bmgv&3-4_fH%5zm&76ibn?b`@bw71H@!Z~v%!(} z2A|;N_l55n*5KW3Doc)*z>Sob<`As`rkujB4P+mIcy?)`jE0P7T!jC33qK{ub^Obk z%FnhjxFpQ%e><;Xzb{lJye5cBD-@O7b|dBACMr!sC~)~NR7AKcOInC#UYgc4zEO`W zesVJ9{k^d9XI2ORg%PG|FPv@sit+uJk76?@6?6G2vqbeWE;UiYBQE>>;Ro>gwsD(e z{*msEn#?O1us566Q$0^W4>!K%ueHU&R*JvxUoN4kZXz2coH7zeZDB zi8>?1c8AKldn&4dF!Ym;tj=XULJyW+rnYF}-5c;^KW#3Sby1oJaum)g%sW>dL%}g^ zk(4T0?R7p>MigV-b>VlEM;8i#g~78E4i`6tIvGn<8iOLwIH`?NtA6m&c7lAnPcd%T z6;;HMHd6nAtd8FihY3qpNX8^B6s_#EfEND&dD4nhoH?#0Iop5VsV<2dN^AVEl{x-n zc`?9bYK==V%PiSdwK*Du)qB0$9W-6BZC(Mn>MU-5m6&%++5Gns`-ARW;f)adt38#! z{zLww0c?P;i34I?un#WPnf`{@cXr%=a19t97OiLs6qt@W;RiA>u zEHPn#Hm%oyr`d<$(?I}c&`;Bhb(f0JyWA^@4~;@R0Y4-NU!oc1VLHG(VG6uc9o*N| zM9(i{e7#JV`c_pZ?9Hyy7l!sfH}>)sHXMdq0!d3BRFWsJxWy<+G~1$&>pQaIwH5Zb zS#_yH4t>ekDS14GzfVE4@&Pv=iO5yXgt=SOiU!R&ynkYvo>pv}IBMFk61nrp^4Gwhi}DZqZsisc z0I>zi&ydL49{NV))+{Obf-s~nnC?Ibh-<6WtX_Cq!|sN$|Cy>m6k@@2Sh$y?=ZW$y zU7fItoG@~yG8z>El-Ha7!BduN;-0fa=k)n<{=CQ61^7z@`QXJ>T-D0Y)LeDTI@%j*RtGy0mL%d)mZ zc(-f^r3K?2_H4p;ubEgKC-FIgmL7MPBZb*+IsAUs;3CW2e3T6UrZyjM@ue!z{6=s( z;03;%0;dnh8(oi_b8-Smz?CfO|J4Z9>sl<6r?D9-9~AFuY1+&A@$Arw{4UMvKhWkB zN%|1t))Fzy4N@jn^@@!Hni~s#y7##T5AD;NeB;PWqa6X7#1%WOHxXua;{C)VfBG*7 z*7w`q@r9PWrFyEtxrR8y$AYpc#N)wlS9YKX(PbqH}2@M_puRU59vtnhzFoED`E`* zU-tu|(H$|xZhBNTlj&(OSFSujZYK=s)hVOX2wM@l%d?^6Iy^r1lP(U?2YkgZlIayB zGy3*rx@%iqRODiyJ?HSK-kc76(U+N_ryT5xxP*-yGiZAt$L$-lo>jx16c}`0r)kSE zt+2NJpuB&pZmx~e3tvOZ1rTOXpuo_S89e^CWX;cK^;c*I`kJ;nbG4?Jm+(2YceS2z zAxc7dXwUyOXD$cc>gLn@K2H~0InTE)q9HXpY*SY}aISa~Nv$ahbcT`|>3)1p42z@N z+d+`JeFIlOiB-8UM#}??vd2rlHf3b@ZReq;r0`$fvGN%oB{`u=Gnsk z@hxy}r|`|m$f}o}=~--{I897!uY3U|D8+ToA?wBq|HNdJisJ`Zf3}4OiLg!^qpk&s zVsImL8{cpPciIY*8bv=c-eao%v{|tETiEeFjxQ)El#e+1ze6A(f*%GH4;+wb;ILGM zH`--r@q&NY$Pw^{yDFpcmq1sk@A!%q73m~KS^jvnZ<1in`Tq*iuz-C+iub40mWMyORH7sa*m3~vX)L!g=$cu?OF6ig)Qs#>b74V!>D7A zkZ#PZ;SWND% zp%0_gc@k*emjT!DHjazJ2Jq*0?WCG@EoS>0iB5M0p9IEO@hLi9Du2=Wh1`Ta?`;*i%*02 zIBhmf9g{d&ta^&A5X_ny1CUC4hZe@wUN&!1bTQ4#37bt`x+W**kVFY3K6Jjhn--t& zn{+C_lb6(|4rL(maNlLk-}6h4K^8B?iKX!;mNSH#r+5LC2F5}`y`LC6o zh;$bIh#JTAa_PE#iN0H|iVP6RH_)fgWMMT&kFmUEoe3+7SyN29=TI*rZnnMq9##Ff zv+OuGRulj2+!}sEgBL$jG+lP2Nc>aq@^x5$aVK(LW2d5?Xm80F?mQqNdHR&;*|QqB z8AY-_^GyW%Tf}=7Mzb{GuENoP3}J!PTEGO4YTH#OrIX49>Kxnrp*0}ua~ zVOv1?btdXGOy;B(bfY%H!)L!IZrOCSYqye|8OyM_qD}q{oUB_|XHtW&)dL7+U+`Rs zqZp=#Wd5eu)zrSJq_R=(G@#2eSrm{Na?K_V2}#P^-1`9CZUeH0NqWfntntYolp;fg z!BQ&yB?I(4hVAxa;Lh|r{6<{hQU&oBoP^h~J<3pK5QcO}mARkxqgXwF%OS;9pc5*Z zl|DD?;||IR65(710|{Lngpfjs>5&^*d61Xcz@KdYS}1A%|lR zyez*teTihdeYMqf5}0rCAlas=Ao+csF0=WUr1$eNa^A8Mnxg23ASV|V9*s!#Uv!iz zQ?iL`gK6g=hgT7j-jQpL^J1DRWEV!5=PE@t!IOA|98LdfD8r3)7^2GZd~``pB+}&E zvWj*2Jq!yCL??c+z1YMDXy&*^>+vW`pg*ipxMvs*dbfxZgfpI|#3monvbj!9W}0)( zbn_eO6)?xG#=p~?qb%KjSZJ9ip4wW|dj2VaQ686u5%3|1YK{1uy{p8aa}udERYP=~ z_C{_b@D_`mi%0&gDK{84X4HX>y|{u^{+ozGknm z^4=EXRj`uQ($6lx>}Y!-9O7v(9Gh_s0ngKu_<>8^`c+Y1<*_lx+YBk*qj`1z_)1Ny zomJr{S<|-5R=rD>`)T!WSxrsg&zT4(FlUBoptLAh)F4UFsI2_=K>0#`|gg(N+fBQB{4`^Q{>6OpU9&LsY0gFJJ&zJkE z*vI<{b#8^TS=xg>M-yRtwv!zrJ0mIC7k@@!eZKjX;fo2P7QrRuaaOfEgS>uBhT?`r-+&6!ger`6YN!tQ9NeEeQkQZUwsbXnY^XOm>)_Gxi&FX;(p47H&rdZv$~ zEA+;VtZ&bxbsp0!Ju&@Z3y_Z5VD|zJ5~rIaY<+$$&i;AqMri(zL#3Y|++7&OCt5eh zI`K5qx^M^B9OMdfrpsZ8t{{ZelESr9?J}?w%H7n`vvz%Qm=psb@;2) zozqK(#>U_|omYB3Px;y!euzHmx_3HFH|$(!e()+5Jd!^a z!`-stH>o>4n&2FjR7*5>%mvHTW{kdkX8`37ak`!}u_1`J#}Tc=9olniGgFXG2)j0( zV*Kc(g;HJ(bF$&Xm}WnG{R-#(O?JNrHh!&8+)sXq?S1zvOkgOPXqxb8!pd>9?G-+S=& z42CK@v(w_chtjiunx>9i?a@SsZda}KFdpEY)~POBREbp2x|=sxkc0SkjGL`q!>{i= zLe!Z5r|2yFnsC21Oy}tCl7`V8(ltQ3Yqa!0N)TyADlyn7X$DBwNQn``K*50`6Jf|y zzA`~XP|)AY`%j$D^PF?v*OjGOo#z9V3VKl5ZSIbY)Jc;t^i|{}&LsIb93;1hdpP=e zj_oNZwuFy__wGW`u}U~b?=1z_H*n#=HB9bbo97v)h4>og5;O}U^Z5mhN!kkxe)V(_ z+b}f!uqxl0jSM~7oZaIql}umj*3$R50aUNmLTOZuZs=UA#i{?l&a*zF(=?ZW#w%uN}P-aJ5`!osfCqw*_M&LFUKEwaiNwVn$28% zjUM0e#K@4&yQLYr$PV^kstjhYigw*6zYhO7CB9Bon@o#STdizfP9_g$I%&|w@oqE{|yxr&l*4P=H9y7QaV zqy7+Z0{i1TO;+eH43V!o3rnuJ@d&%~BE7U*jgh@P0=2aTYD~2U*w>u{QO^37wRay0 z#lFTfvG>WzO5LE#)cq%l_XuU#26ESE!B}^%W1(-gMP93gFF3H)+?c#g&;5xV^^YoK zfw2pQ4j&0l-c%lrvcYD{1eqg*r(p0dkQ}+T*!fsWSEqS|1+T(C>$hf}$L!;s+tX^J znTVr2c0OQz@g9sU28#-@iRu0v7#5Xfw6l{uYVbSa$bqaYrcT}rZ@!3ZG#KzjMQim#);6ufqh#G>q6nKyU)^_nx$In2u^(s*hoX@*PSv+ zb(JzxHt9q!E4f7W@2ZVP$w=c`NNiWJO_3zK={UBZz2|cr{aI#UH@d+m=HNQLww9#{ zJZx<+a*lNWmCbfODqzPo;!kMeSy{=Tav=o&slihf3yNw6CPMo>j*j_;x%lTY?|)dF z!as$AH3u%3pxOVjem?D~{nv^#i6OY!Lf>Ws&;jm+9dd(Zga|Lk4wG0&>Q%;E67-hU z@><&2bu8=AZ*kBn?4Q_0s>?nJa8bkAd)iU#jbc6%JKhPLWv)*M7PtCMf7*6}Kmjm~ z;mlq5@Un@@f+)IF0%xK<)j*=s*+W`TjJVNQv5)wh`w<9b(`d@i0yXm^pXM|q z{Eb8G{V1Bp#!HZk*9(d2geMs5|B>Xo128~B(b_fQW$3_;5&d{S)_(muibfd8?u&@GYHCj^1$#s869)vPz4vz7B@yg?9~S6y&K_1)bAD7b`;D?IT;@gcd_LZ59>BsD~Lf8KW} zs>4S2S~zrAHFl(LcH?BoWE^Dz=ns z%Kuu=TzMO?t%h25Zc+oh&-?3JQ8jHFT6X`TfYv${3j;T1QIFQ%!t1hcRinEt80D3z z8`U!ow0xKkU(NRz`Dqo$r!7_{p0Z;N)4s=IF+$^acE{%e$bJrSGSt3Re#4&To*MGv zPRwF*?cMQnG8J{#YySe7Gwa8Qsv9QO9_k#O>N7#l(zK>=#kb1G=QMY@5HXKke2z%w zJpvNjP_W&+M^>W?*kS8vxoe;g&|YO>G9&V*V;9`!G~Hjf?M!%*BD9MM6gTwv%X4@DUxfS_Sl-nK?8z1o|$5 zgH}^VV%S8%xG%x<1c`t+DMbxOMhQxIo?$o$^}6kVotlX)JzC>fxqXLhyjJ1#5z@P#ZQOsp4aN17YaQ?JIM-@W*mpaN~L>3Y0 zh3;bEZovEqJhxw@j8=vn64z(`WKUB%8QY0W6BVcSJm=?0x7|A$kwrISQmmbO^yzJk zd9Sn!zAM6rwUPkj>rdEmb#9xC$RSxWlhcr;K?`c$UFKnj`C}OG20f5{pI-0%a@BBUD z=fe*(Gc?@3Y(BWOI-Bn;`nPg^QWEUbRe)0ONI%>Iay5mFuyT07Orq@-F@`m$UaMUF zl?%?#zhPI^UJLEH-rlB4YE|>V=Kf^;1~PXWClC71P>uYDf;;vg53?bIMHvw=fhP)- zY37Vo&j@tSJaFd;+mB1ZJ8-T{`%~|z$z30XlLfkdFqTn4w=lvN?#Yz8he^mzAD*B2 zh{bE)*i`bbnAi7sM}-#WC(1_kbEF0lQkd5$4gFwA!do#Mlm|-U%!m=rU7S** z^4^0p)IQaky3f-eqG)6mSzV%X!xZgo9Gl#subr9nP=Q(^)NuZQOIEKHquZrZX=^HU z-C?D5AJenevZ#rF=zmm>r2JClJ9mpR{^HOv7Hf7LY#%0SE}E#wfap4x22m3IG{PiB z4-xm}@i(>$U2b9jQQbj2Jg8(kqxOk)bXG~87>K93&6Yo+dLQiDT%vbX;Pl8SscLmx zguZC2>SjK6c7*PLjHOt_QGV`qYFi=3?BRch>lDOqMbc!nqoQl2d&R#?mS3jQ*LK57 zlxT#>vdAfy=6#Dn5~7$EDun_1s5a53OfiL(WO4TT5)5;U1?i1#6YKt!eta2b@iC2L zzjN-9Cn!O@jYch~b{-gXRq7~4iBwM$%C-hH7rzUe#(P%R3~CYxhNgR;EnlVHS>&Hp z^RzeX`7&@(3<9n#$u@vGX|!(P;q_q8^&_6wcTwYKMLHOR0~KtU?mnyjHK=5;+P7`S0mo zN_`{$RH+p=i+#g7S2mZGy2N#g*sK(H(@?)7RxzloOcYu5P0Ww+6nZh{9YdqY)bci< zwzmILs4F@SV(gXy8|pN=fTR)F6{f{N8CTe#?)On)-q{y4dE_IWpqsURBH4TKQT>+I z5^xwi)s2Ny>1>FERvxD#tnvQcu_RJP#Kz@VV`ge;gxuZVtsm;z}yoMVLI&@0k40w&yDNZRW68q1%DY|gx%vF@0JQHfkzCHHLm$94*T6ugx6bB$Y6Z4JpA~2fu1Fu-Z3-HNE zJvRLy5#1YCXhHBX`?s7h?X6O77iuLl>L83KBET}3J0QX6U*Cg`Z<#$qQ8%-b%6+bQ z&U2`8pOfd`y=85>;G6Pn`T~7TuP^yBHnOWfEXHkMYez?5ji zVfSe7sJi7rTXXTZ_IKk*HhEBeP@Y|CLxFkWE)Cp@kjzHSWp9MRU(jf%Axx9&_-CA` zQNx7@4X$;6)kl2|zcmqC_W-YbQ8QUhI-3aufv>0W4sYbB_R*9GKaqeljL=gN-eBXN_3T{X_ z{fcny7Wswvk;H!zjEe-8aBJgtcM%vJ2BUnwFBsXH_e43n+qufDsr1slFx;a?pph!0 z5pN$mIb{%%<{xWo*`nCRdm-gxLNbn<=ip-->-=KcjeZcINckmahtdaBmkUXS@R+8O z!N$8P3|ja5>BfE9Ekj+>ntp=7aiUiD_7vOR+0dLBjr_ggriM604f{T({VMk{zZ~S$ zSqWm%N{^Dy&x^z+u)?sz+&cbhs-KGfBnoAB&%Nczj3I_B?(2y6?xH{zMK`NHv@xAa zN@~sjqBvfrE(lOuV0_3$Zrg(RoynzLO!HC|cf-f5y3krp{82}o?qOeX?abbJS~w1A_26Vd)_3hQpK2ro z54ke?vtq{tX4h5Nmwr4kOz&P*yI$oMUbYodK4(K4u^tO7h`0|5O;U(ac2TsRvsSFL zz5)0r0={e?M%u9RgmKWhOUE0!CLV`5-?X~aP`r#*g7qh(z&_%lFYp|cr?1XpNGcl? zb{(5l^t}SH19Z1-fXDC*M{w7I!I|8$%~OQ8Y^A(s-F1cBz@8{wQ#j_8haXB?Xivj4 zJC+v_&svuJ+yu$|O5fVL=5qsDoMQy+X!i{aeSJbs6rfAc&bY@IsQ}$9a?!3e)-^d2 zyEC<`T!Gi)(|_%o!_Cmm2$xO18;MRZ8=azu5!K@S8eaB+86gHCcRTihB}TN zQ=QR0FHsTxZ2XCw>|`Olu+FwByS|>!1(omHiB)vALDnI8tfkhxh3aNkkwgbKB2B$! zb)`={5VZbmevo;cQOq{mG);IRj6Go#D`SFLlVl05HXYf3(s^|Hb2CDp^aTx?Xf)xk zgM%V69y|=Z!#&6bDONzja zcBLc!9vh1)r+aJ<^;t_d1Fc^91TA}hw)3xllj;AwEfo5G9_eeW)a!PJ^Cp=_SggVXcNMbdA?ALmUJ;cRg`Qa_f7RHI6kMi6)k=5v$Eg zT&8JvPZir_M1Gz$|v#IHf}8 zeIPiP?^D%K=)X^0Sw`4VMFJhs{l`j8emeJnr=`IOBHcan%N^&|?^y?O;E%EC(*1Av zxzxy=9Rsb@Bu9J-oRGSST5+_GRy7pp#1en4~_aArYBBw?p^?RebzBe z&tdn<*^o^Z1JLKmplB&KHNcVtZBE#3a{nhq_%p;Wej*>ZcADKFSA-R~7{y^XVZ z5Z93SY4yJ!iBu6_)8U)BfZ(9dVlp`l!L+6I+;Vq1TAdhtW8B6cS>Jc*&9&F*sKoW` z%VX3rygE^SFy3zKOQ}UAQmIKaW@RwWr02_x*m7oR|MjYZ;;h*|@%iS}3pOU6RfzW| zL$WAO)x)u5i_`wt5mAL<`JT<#dn$k}95#cSw4@%NOjqyb_wzZg@iJqX{N~{unXFlQ zWrNY!xAw@?hm)+YVJ2LV>_+ti=z+D6v}@-Ws2WRKg8yCRdgw4PpkZGceb=GZ7ovKo zaVc$}*Qp-iF+v?Kah+}w_Dq5K%Z5x?=bz%-9C%KAM;K(1f1d1e<)w+$=;MMcH!%g~ z?ugvA|_?krq!Dk@3=<@o&1``L>JJH|LA-X!=L+aqf+c*w%i!9n=gJc-lL zYPA$fGE~iGgc(vlox58(EAXQ*IY#Bcb&L+<#|U(CKWMfVq4NKZ=yO2X0A9Qkv+uHz@{Lf+RmY0 zfehWb+toR||Z8J825;BAmXnZp)2Nw$xA64#T6eK=cmFfb-mc%m6N#0rLzcK0frdeU#;BXnM`Rzo=zvc*K>eZh=n31J4M7F zVx=hm#;)cLsGkQk>`KI%&aQF^v>!c6U#D5w0wA9LkVJ6`@^)kH{U z_J5kMS}L%|l-20=c2w&9%9wP;SBlLsySFg~pJ`IhS|_~Ec#74af{ameyLKl}2c#(f$pgBxbo#lM{9ETMN} zv;#61XOUu34{^M}oyVAty-ReeQtY}x&5x?0=UkydPrvxBdjEZe3%u3JxU?3Kma$9R ze!Vx-B_7saP$nxrEsQ?y@wpPNAoy-l(eK3RRGk@E2KzA*>3^~pB@Db6&CHKsNl%oS zD;)hUU}9D%ehwV}(N&?Or_Ohwih1ZN9+7K>CG<5=HYq&}Tub zK-}@+0_oGY*d5DpAk}6bGNVtN5-H~%bR#XV~mfq}WGBB`4B48=5 zS!s~ybvJpy(&)GWM{X3r_BBf)c*^`|h{Fr3M^wdTht6Nc!HJTucou zuV-A2xtDm>%J(P3$jJsm!}H%9JOp|p5>XkUjKz*4T?AUr89cqh&d6uR<`QS&g?E1a z`M9J8=n;>^@KVrev8>JUf#UhsUndYB5xf_mBVitM8&)StS)LFTMX4y6f5KCSK(va> zf83nXxaN*y3dd+Q@&^$eagq7+vltB)d2x0~hiPFjnP~Krj@oY4pR)#&jqhp&wBNmw;t8}#jm3D5?Qle7;Gekoz8dB69olm5C{1XUCPd*t2B%%n?WviqX&AgD zrPqa-3HHHSQqZ%fr=jh<%BCHcjkV-y#0TqJD>_d&r6e`! zLdi%EmIVEeL?ssdcjmE4a;v<>$Ndkas3c_q<*O5#`vVd*UY`y-LIdhBhjiOjac8Pk zUItC+)hfVL8lgFzKxeitUCexbhFxV+2|0UCs=Vr=1|(WK9X2>?R4w>AtE&q)ID!J( znFSSMKKWCo50#u&ZazZ;>Ce@te*W7q9qS3I&>YdGd0^BNQ$e*H%dJQI1n4g?JC_Gl zvLl59&yht%fBOy+H3Wd|#OiS4Y^YYJQVvXu7tQ)@=DzTf9Y&P{B8a#+ zO$WPuhue8lP{%t0WVKqV*f7&&Rk2uVk{Gm#>ehPF6t-uq&N60%nV*e89Qnf1Z!f_A zgVkaqScYx`!e%AZYZ^MzJ7+MU&ulfAv>IO34@9)qpWaIWrhNZ`EV|JMt}+yMqX{0>UKb z=;Blgh_n4Cc4$cO&MN*QQS1v%SE3YF59!G5bg{2A0skYBhf-67800j^oRGU$phnR( zA7|_q-azlDpeM~~Py)0Ovd6sEiw!BEb`ybhW5po`)q;xc5DPdxKI zgst`pichpbuMp)(yGpbmAh}qDdp)@_gy$+2jcsNLx}j&UX?wyJPg?)v&dXT744aZT z7Lko)r{|RAvmI3#DKH9U_avI4oY~bg4QzuG-8WOx0cqJMY?iHKi3AO|tE0&ovSzhUwr4Mj zt9YS#N#q?x9@ErpMCTe7PvM2Pb|2M5R0deJl1g&fALeh$9qU22Ew;wMaZ+9;oX^1v zd^rJhm0Z%?Z&^|`jm3b%o=rq|On;^Dd+wt`ilY+nnf$T(RyhqY2P1=YWH}8QGG9D% zRIXI|Th82Tu^=EsU+Id7cu~qEhzRAnlMLeUb$AONJyR*e+nR6NjSFBrb}x(MQd5fc0GH!(A^vHrA3QjMOZcW6JG z|0XISE;=rPOSTb;ao0H0fN=1iOVhN+y{y^c#mBLo%dER9-wn-EG4+KjHq_F5Ue zooaZ%I^0Ct6`ECXK9r-#k3K0!j;0#sgXHVMRxnPPW0f&mVRErYr5$S^A`?|vE@Lx^ zi}msoMEWFm^8)63gdu4BRz$d;NHb7^Cu2N157x6N%@Dj5te<2r0ft(<%1Zv(?Lx&n zYeeC9KxocRu>nrs_wIBy`PQc(x|^ogueB?35L5DTytrq0kA5hx%d!0|a(g&3vzf+w z(BMqgx`2x=t1M5Y956^#!TiCRO?t$y4pl2+rN*ZupW9RqmhFY|6t}5q!YI>%)cqv1 z;H^xw1@OTvQW}Sl{QD2>BxZt$f6^0|c_2!y6_}CT);A_Df4tSI@;R@5iGT8wT@RvG z*#sXli#GH%{Kc}}LFzTI)M-cNu^|eSRJJPRqJLG++=C3V$7CM=7IC{9`zt3Eb1q2Z zMXm_vBe+u@+EI(Mj0{RgE5EgErGu?u`YmZw%N9Rpx}%4WWs@*>LmQdNE&(C?B#~5o zcrc@IPf+oijRAm23Wl7}myXxNc>N*a9DMXKR#TkLl$8cf!?SVrc$HA(L2-fCf?vG>^|S}_!iB~Nt+3Y2kN?R{K!YR^_r_2#N(DiE{zixuw>SsN981MoGxkuI#bf_L z#zQu#r{O!WB2ko@LqkK$A#Si``d}!a9J5YxiFUCS8Zsy4dUmX|lvD^mg8xw>yUM6K z^`hv60atBJ{917%^v`mNP~s)uSqhDGcv7`Ini`mO3h&XpUwfDpl9K}62;qT}x$r+B z2FM@3`Kef?m9P)*P2Y1c5*>Z^Yhf%AC|wg`AV_m4>y|G?V?x`9pub?P{dw#bu7^oW zu2A1aZ?did1B1~5O7~CLo_>cs6eD$GSuh!1H)C*>Ra4)3gy!16hpG(zy-q3pCvqG)_QkV4DS5F;3VoPN><;cc_}RS=P_mRYe!@ zJ7hJF%vF#Y$=)l`824G=Zs%!g=mphUq6#_lFbT22TthF7LSI69)QEpFn%Wqx3L#QH zXKuaCauzansCP{t!T*~+BMWm|vRlgR-W{usW(3>a#%9QtDOrNJ$-6opy3Jj(&r_-Q zD=E#%@xYX^fXFVT&JZYHg?(86sgXK&df}gaFgp5oUPEonM^q*`SL#)jr;|X@J%2Wy&qfMrymr-B0I{K`};x1Bv{$#$eT!wO=(hE1&n&4SZ*s$ z`qBgqzy+%V=RZ{qezH-NblE?ee%@U`S(Xsx7Zpm1)|D`q46U_MZY(ARrd~V0Dpo8+ z!h?=QbKSF-kZ$52_pxVZZGG4JE#KPPTGkAB&iv|FOgJyQEeWls205_9x!<454;*I> zou{2wiaK;WpzMUjewZ!tW7O&>WM{WW4w$>tEd{S7va)9lXz}*nw7J!~E=efFJ)MAy z6mDQw9MQmC;7X}St_Y6SrwLqxdX;PAZRG5yd#;V9se;wqo>e3BGqC;r(j%e=Po(ph zk#AE?-EPD)8A9{bOtiBZNInJql=f^bZhM%;(Kf6~DtAWYXuCP7_G^o*TpRX-DQ5Qg z(YVj6b)7>eU6Xa6CbrQovsNh%ZI7CrRhVx1$LsI6$| zx6bo$GWgA{_c=*2ha7iP+4i)!0#(6c=f|+B`<0)WVHfr7hhYfzzBDEVXTleBj$~}m zgmJNl2t?iS+2EaAB*e+@l46lrEc}5zz0-s8h?gsBiyj#A6S>U$nM^9NRZ`y1Kax0v zqS7RVn4xh1N?})c7jr|7-+yrP6fs&g+(7PrbZk8!tX(VVg`W7cxNi7jE!zaI8!5{f z>k0yac`^q;xm!+)DmDQ`j691#E!vWOsY2W#g@*lOPF_0@01*POav`b1rCfTKQ;u7;ZMK!_mbd#hNH}?ZhaK`O3K7$nS*(k+L$kbfY*)^j( z2yvJ2x$*RJkBYB&fn$%)lZG=2*x|C-C9=B(i{7N4l7b&|2#p0-hvJvAix;IdOO|c3 z$|k^8W?Oh2saCVBfLe7%|DW69pTuRJpd6-Vh8)x~$vCa@?(oQ>zB=S6g$-D*fG8$V zI(L&?r}y8Mc`xC%G(mO!Q1;EmlqS`$yuEi!GkjVBKs8{S=zz#-uz!l?lT4Lgtrv!& z7(iK z2l;*~T6Wd0I*d^~`cd2&SXJ?(;-nG6;sdQTi~;EH)RB?k)RA5)t*z=eO0CXl z^oGQ@rw=@*Mf;u&t4Y+F@~`@fAR!%~ipq7r>(ti^L69k3GisRjQg__w#!7ei%r_Ew~e8B$Wp+jjM%4 zewyEsGh<1fK`Mxf3tZ8N@OnUdDI*OEKfxW*ZFq0M)vZuTtNHoLFKU})cqg9hgvVhQ z?ZG!29gkM!pwv*}FVZ6Ne1H!gd1iyV`16BK~ z{IOJN`RiC^2YzG9<$$xi<0~ibtwTQ{IG{IO&VU6Pld9I0{{`8Z@1e_ryKhdXT z3r`q6Rpvapr=Z*ootvv$B6!owmU5^*G8bLnDH0xJIrf()U68i2B5;eLPBJ~j&8mmz znz#aT;B-%{jlY)Uk7)NE;hS8J|3?yNMIC&ln87rFWT!0!b#o>9* zp8nx*VE^mP4Qo+{_tLJOnM*kQm|aEH5K+ZCG?-v(T7}W9yv2g#n|^BIlDG(xhdj88 zh>r$*?*L1z;wj{1XGxk>>1%RpU-c{?#?D-zS@M_-*|3zL@G z0x=)N!h5rl1`RnU%1Jtq)a%CwWb&E(p4>b75}ajpT^Kq09q6a_>>QqMljSVkw24*?Uh2^` zNvsL+HveyO+h&>MO;VA_G2LV5+VG=gz~5k3%B-N-?vU|2T!Y z9p2zH|C`TFEW!c5+aFo{WG-NfoI3W2tp+db#Jy#~$^4H*4y5=6-@Ggn2wt;dq_mKU z%0rk=wo3(vV%spW!EVYGZ=syvhX$O0h7lCpfWyr;g~1AN%TR| z>~}Hq54P5WKvXciU#olfz-}9vLJa4>ox<%Z$fQ9P3&}Q#)%!m-=nlw^_hZ&s=U4kb zRvi_MKPJP>6;GJSZt+%7@Kwi|K27!@JUNJ?VF^N!-1*Ypc%vg+ks>xG%*CtCVP_As zF&xkJvW5=HBuhP8oB=&IyMjMORae31*V&UR01I70Sz{GG;A(=OR=O;Uf8n{zA$wdB zocT(SCBsyfAdKsG6e(Ia3rOg+hv9}$D5N^p5wWUS6i25_5XY)i_&59j%)a~Q0rmSI zNlsQoa{z@6Qnr#{Am9{WG=5CC8((Cd?bU7S_=t$Vc%g7XWBWx4mC-f5KLGt{Hp`K# zJgB)_lLa6g{IRh%2q3*6HBf8r?qr5WaEsh(n3E9EsvlYZR_;)+7P!W4R&(Q(uI$aF zvGeWELOn^dd-+W(_{OnbLZ7mUk6RAovR~qZM(%&W2pF;?)Ni;vckHkww2m||Y-+i( z?rdP1eL`?i-lv(k;ms+d93#possa=-JDSgUc#pGOJ+BUPGl>%Pi@Bc~N3W&Vs;U}~ z0rQnaUsuT$D|2ASPaX%#x@UY?GvPi5a#`5wHkbze=M!`_C3K)@(ezs`r8Qi)^-<#W z&ZFX?M^<4f854Mguryj5zTJ|er>MJ985>`odq}h}EgsZPJ=70Q;nDE3vO1$37$Euw z;>BX0XT|i1cp1cwVgJ5P7nEq`*P9#1WvD6{jo<4vqIshjghM?@`%_FJv`k{v7p^bIJ_?jY;~&*0GpB~O^JUFqF-iV#>$6-E{xWd-{^H?au>^{9KzhbCxhCYDy4i;H4CHp4_aB?@v1|#b? zI}^87ZW)5554d9w8RbUA@zyQwdttCqnK}nq60jHkP{LG zXCRr}ioamPctn4u9r0#ZUAUkjk0Am~4lS6NgbP;Z^bj!(D(ONZ&alN3IAujL!gBqZ zZ+pM>J;4mh8^V@^`6q!_yODYwxa2*aKL4j~+))m*J!Vtx7z(S5c65advPA{JD;aJ8 z14lN~A&HE_gee+YwsQluu%leruBt8Lcq9+E&i_cHtgIpzq=-$&r&oA^T*IThu{iEEE=!g^~6$j$QapWyiw<7ocKRiE22cxUCUOy%GqsJXlKTnUt zAuo`G0;;Qrh0Plx^YR;iG3zEf>b4g&d-2jp1^9ER9=1m_QPo-g)4_Q@B4%rIT*|pD zA*CD?x#2zBhm*QXx=T_aj9?QrvVCwJD=wmDH8v9y?*h5Tv@%cGbp7av2vZ~Y%cc7& zu+cY$>ly|7IGIU?>&?veSJ$!~!9~BK8=|Fsa=}54YHPO?1QEa}cKTZ6Jxs2dCwP?m zV^bvYOtwLSK|hF>%s$piipCsT@jntJ?3SYLLr~`FN=dNih$Qzs?+4M_i-S%!w>y)! zvBd*(^}bD|zpE}YXyK12zHJ`w|ImOuVa=@k1jxTbnGq&O-V*LdECddHxi#}!jU#R? zP$f=`pXaS|=et)_Y-o|s3&xBNOmWX7=^jmhj5f6ekEAtQXq>J7vryV7*AjRL#Q>@ganYW=EoVXgS0v;W`2 zLbu0qy}Wf>^e+o%m_>&Am)@XPV75UjnllBSSK>(cU||k}SMO^6!(}#>{e>WlAooRa z=6Ay{xVUD0V@C6R%0-qt(gYz*!UTgPnPu|iaSuzk+@CC6B*!#AsjtBf!@JdI^!>b@ zP_xmbCcp8(f8r$)u6W-pc%BTyXWll8XR6ipf6>^%5cO=oWMAdahV>S0g`U1UBvBJr z^^)RiyH!Y=L!E;&#hm4?r9jp6idr09FI9!jn~hn#3+c0$xSlb$M9rt92iDt8gXlvm zq+XT1tm!9$M@`1&T}rBnKgFbDjc>OBldXjHR#dSc6>#rFo+K zpsidSZbiAP2!Df1@vJ8L0iNPnxqgg-*V8IF12XlQSqqO6(qGUhB7|yKi+iR?z9t?( zHxj4OBO-I`41*^FW+;;KnM?@0e+kOX{Jgh_vQDXHo>Wmn7aQ$dEWqV#9>@4t0pRnI>Hlt{E;R-rPQ=t@^`VR z_U&Pa`7n^En6x6ux@FF$2{MXT4Gt*D5L(`3G+N`i|l;N9!=ylk;hK7O z!kb`^1I7^kXJK*f8_b?IUQfK#4QCYK zV@7fO-Mb5UCpW~|JOK-^edm6n>$OVK=P;LCqO%R{lqIsHIS{?va~`I5ILg89k9d5f z@U{^_Eq_#Woomc6{#BuDqoU~No-b*6?iH_+pHN?}%B3W*Zv|)Eg7yL zV0A5FD(4ccpduG9{P=e71dMq;end7JQzCA%B+;Y6%oSdI?iBtqrtVS+7BHc}BHTTY zE*ynTQP>%L&(Az%|9Z) zjKdd7tl*!r5-x}|hoKP*FD!bf@jjYL1>1Kv8y)^flDg7?es}j+Oh(Xz;M+#+zPZ+u zGGC0{7axRA52uAFFlCzTAz7dY#m{Z3(mCwWUj= zot0L`Z>h=WjQpT8`0E%wNKJI zw;^SSc(9jD9#Fu_{GQOIQWtmnwy?ixVG7=JLCI#_Wc-H+)_*z5&%)b@%(HS^g-)(e z_G)bDw;2+|x;rReXEecSG33QuNqTmg8;*1rHSGlq^ArFvipTOt{a#UDY}07}gz+8( zCI@JJ-sh7PWtSIVW(<1p)KrY)22{66fSASItQ07|AiJ%;IKNeHkz}(686CN2#a5HW z+=cHwf2*{rK>~;U%ITIyIUx*XvXl#ldV0vwt8rzRo1K-MpZ)i9OeD^qKL|@UxcDkY z-N-^<_`C{i8m3#tDo=V_yFP?Ri9YDDBVp>i!}f;qDxYuVrqagLYh@NZuV^GQIdi0W z z$qbD!(t52gIXdDeAu@b6JGVp6;iE|GbIwF1Qu~2x#44tQU=prbz@ulb@zM};k({x!g-O;r4+r@Yb_o`*(pc)mbh#A%aVeM%CY{P$a^ zp*8*uE{>T>P*BEaHsS!3%hf)8R7CZgu8N3orFqY{5pKuo;yg0!sPaYRm5L4cl`j(Y zT%tZd`LlF9Utp2W2+^Xo_Q?hIWHE~u8u^-Mv*Mr9)GRftuAp$+p}b4bE}EI0WP73L>WOq|ibZ`F>?e{9XvdLlH2wDjU+ z3B{XvtUMeQ@stEs@yuJDA_{!j7=LX4uxb@+xoDc16DNDQ!Sokn4x?K)X)PV`_NsLh z^gA$Pif3aaPUlg?^1ey8^2Z9{<;cS=f?DtEyTyKy4yI@}*Etd1@hCy zod^8NFX9KcH=nn+;q&O;k}UWMnY{kYb1+w)p#6!%XmwDSONnv-e{kuskM61vy-aXz!@2Thfd|pE@(@yU8{BF7%%-+8I!pg@d*{ofX=C;h@?#;8o+u?7N6zlL zxHEKb%pKKNJNgy-QrTf)nD-0Myj+sf4h z%;`1r=+BW43I2jo*{#xI2FUDbM~Re?fXi=Bab;k;^ZsRB-kjep@XWf^M}xF^oRKgb z#5)Q$UlQ+1pyIo^VI6UiV#QSXA#Z6>r{+^J?ndxz1eF@<(jNtzg5pS+{ji0S=r zVR|NI-wO1-O~f^3c{6O)hn8sb7P^9Y=3o~r*WfW4tU#i!(ZT)*(rOIVyvumBuvPXz zZYi~`>SDYX47xdEe&_KfDnf1JQDGobygR1m&()QOH4rMX*G3nK;ToikqS$CIuUh#UqrbN6seL{tx8!pch!$#oPtl14r z)a76^kGX@-nOF9d>C{*N#Ax#t`AeT z#TF2IgTPFOmTslY?$D@e{{V81AxO(`Yr``1fmDYOz-ot1rXyg5WnVUKH&VIe!N*F0 z1Er65H69dES!!kqyYNX@ZD++gm%vfO_msR|CvuoL#W<)A_75mn-J_T~##>oo;W3^B z9V}7*03qgJL_4d&6sd7&;Bn;2c)S@w$I@goEX8*o+H?)i1mU=JrCimAf0-Uog7~7d zFs2Txm-$X@{B=5&f0EL?7sD9T7HNRLgv@wuEcGzmbr<~0Y$qiEKbV=83Llf=UckDz z1l8*cczcI#ev`6fAVSwsp0d=_vJ-yaA>^DWUo)QxeOf5+^tznK2ER*}hKB-&Au%j` zmYbQNt6ux5d&)GXyCq1R7g+6?IxB66YLcpUoy{FwCPmwD`->FG;QNmzNSql$iTekb z!@SE|)yg{)0{;N1Y7a;7mH;ZAx|WB%FAoz_T5yj`2x2Cz2lAID>%6X}6xO(Ca(4jp zB=cMMFWNd7RON|?O>nRG8!gu2^}wrv$(=SX?!> zQHOBw8qWy*#KRjlI)eFcVWYW?;!|VR0gFcM`j{-&MymBtHUiHo3|z) zdX3fGTHz>7wYlP$yIO#A6<4U$7nBebL2GA{76}a*K~1Y{t1-2Rfleg~zOxFH#?V@##dl_=E8Cc;J=8kSF^3mQ$J*D$!q!5=2)aOwysCV1)G?|NWeNP z_6aP6VrdGK)hW=?TWx3wh8@L_^{Jk;|i`f0Q_xZ&98(Ax+1c<>u!evb;Sf zOv*!o?W0>>0fBKB#~&Bx4aypW>*iN!cI6)Bl6^|?4eMjO z@UEtxO#;914zBX8FCLPmO^|67XLD=2d>uk6N5#cu#v#UWn?W?-(DGa69c0$&Td1{4 zbl@;=Bvi>!-Xt+acFIdJY{-AOUzWBKM}>wSOB_wT!0By(JM3kbdh%DVsFsfEV)Xb( zGT2nf54lt}*?p;iX&%cih5rChLSQb}=2K4TS<7whS$ed zOIlmYzM=?PQ^+AGiRket(n(s&*W5FeLinJIjP$j6ddv=p`~fUP7yPV80=#LMuK)U2-7?;>D#%MbU|wYvj)}rm6gRn2K});uZXI^ zd4k}zr!w<tXL z;B_rkrTsdj04G-vMW}ioW;h#YGp5rD=aI|)O;$X@P$C5Yjv(z zjRfUOV!X<{SPY=wq8w0VjH+?#sb1g>b|8MkE{)B| z*Pe0aT0@s%;o>1XhwtKMigTf6U~k1c2U4{eSL=Zc5RvTNvikc4whXu8I|gOipuC@1MWMKnj`+@CY`@5omadDv z@!{+)ztp=4TC`UL%_OwV8kxAAuz#W~c#Ee#e`pRWP^hea@~Ddn8+n--X6|X?yfAKo zD6Sw-8_Msq#63`PZWD2m34ZME;G1`qf9Wh;(`Q`{;qou=QsNzTRbIFBVvAR2C5KQ~ zwiErqaX>n{uIDOMSSPY3*Bv~tyE!$s@d1=dxRH5M1-jt(HJ4S;a?D7jK7Y7{h0W}p z!l1OyPDy}J!r5anribVg3L_fkUv38$H|-8FqVvV!S}rbklVL(-jWzs6)6-pu058B^OaT zmyxD|r5+AQXFNCp*XWCvPm9=UU-czzX!Te?alUJ)J2sRS!uPrjzv5S%g*cDns~(M- zjx%uX-M@)^0<)yV`^1{)Uq-6sP^+{jw@~WLE$>cYi!O`Um?xzaQs9?cZe=e}^l$DO zJD?db;tAZlRdt~duiN%+k|B!##lp_YFL?|xkvJ5~S5r-bQB;hOuJJmRShpg1x4DQ3 z1oQslWsinm@Qhu%kyu}-9P2B9=@waP`iuU3%K%o3nxoWgjPKYL#HrNzV!Ay>WeURa zE0WZ_TIvW?uIeno=rA~iRSF9d+F}?N$-%nw2cD*H%psJ{X8xUW?7B@)geUBZIjP=0uPkg12Vrwy{XSkMzi;9&D6t(_1jV}{H z+lVoK(5}O%!qwo!tyd5)mYz2SuOZ@5QIut#W`j%jJZci$Pue0K}0QG;$T;61_=?jsS*wNP^tOvD1=O{tV|6!Qng zLgzT#MP|r?^_W6tyv7zIbxq`zt}1gRG)h-?J$x`%U=ZfqF{&3%q7f^A$ihm@kV4<_M)Cj}RbCOKFddwaa-_vS5{7}))!F5SWA2Rfhfo4D27}kATo+?^Fe1}Yt2Le?Fqoc; zdg^7tuvdzA1zxAPzxja6O2iD_sc1e9=C=X~UFDyByRgS896h%h!t|4L6nidNdS0m$aYI1p?u02>ax&Jta0LLt1*GSn(V|WNz_?TaD)=MTpZ|x+O{}<};8DsW`4L!L4y>*eb)y5s@`^rCbZi%I z^pw}n0x)e+N72#hR8`H63(XLbd+1bINb@Z7OLU@3XP601dxly8gMA>Q3@RqI8=*{~ z6*Ad;CX)~ivCLCTmNwJz6Pg~0NGf^rA2hTBF%(1x9ZXcT(Q6yQg9LtKv!UW%R^e$I zS(oZO3zkvb6WRkDJ{?JeUC-KOWCc+uz=3X?HxSCr)H_uRY-()-Z-Wt=9fIrbQk=zK zbB8pigDKAGK*nO=IZWp%u`Z8sXzl~{xZ73K!3ukpO&w(o+=C4&^31R+Y@QY-<^6c^ z)EPO}P#oMtHvK#yS@K`$#JpP-at!GH9KvQjfaA6@Ny}%wdtijv9FC={IAS+{jUM2g+MYX$Vbvt3pN?P)Fy^cI0%hVdvW97c?r(DV z^(b|6)BNEtEl0eLV+xQ*zAT}$#2D)2gDxndj|0rbWgXAS)pr^Mu1EbbU|dn=jAt_) z-U+@=2a^)o|Q*_W0HuEi&TRrhnth!6stHDPceDimim8*mq23+P28;RJ%{*CmXvSC zIF3A|QO)nK60Bd|m%Mc|S~axSX*aHcV2){)D>-XC%FquWh;0$C&RD{ZCY0jkj|lKF z8r_w+bKCfXb{HG#M>HsQ-h9rY3;W&o11j*1W;C3^a>lW`(f)gYQTM_B0C?;wv+dwO z{Din?(iLj>md6Gf8p~wfxEMVm^~_D z#$p}Z_pkPW)G58h&_cN(6m9|#O+^(8ae9QlM(se3>{FZZ5_A(WUF4UVA6&AyJehtF zsPDO3cBweb?+LAF19M#qFuQ5Igye1z(dn15A`F1#OAq>&Yi#~{VLT8sCQX6m;^OG` zJE-#!j_^Gf51OxyF@;H1#p*heO*=cQ%rRB+YPghSWf_U z32B2$9$AJ1;!!ROCJG!2eGcAZ3hTv@!HAVKZs&l3(JfmLy3 z=VUFMapGRreQ-Ec^;-NaSNACO85T<72^<4)yY-gU#5g0q;)|$c7t}L02CpwuG^3jE zx(FW4>iZc^#5ZIID;cy#K8`Q}cP*5_Ux>w=9>tEKBiMS~ZEv`!?PL$Jm|=5P^<4eO z{^jFmHT8YV{&Y*L#d(hyN+zt^?gYD&9Z<`LWhu9$ZN>!2S$?LiksK#I*AX4M5A8Dq zVHFs32rC|(tL)+Zg$a6BrN=l`fZO>?&uq;v;VyU(nr!VI$PEUcL9$arT4QwCQv@SY z!P*R63bR}lJcd=+ClF$(tz#T-xm+Zr(q8cD7dUGp$6?zq%ix`MN7aRb!uc}2Ztmr- zrYr=3xH%jhCx#)^GFwMdnUm0h8!zu1F&w+N^1+UK46;Wu!Fy&k*A}pqrS>diG$jLF zgX7J0HBE)fi}80CBS-+=VBqFu{9A$S_bDKArpj-`0;2#o z_LgxwYzbZ*32vh{6_V^GaypY>S05~(l5Ud8C7v0R%HouJw|lQ@OzaY zfbJ!w&C%)s%L&YwiMi3QHx0Z&GSq4?)ON{gYkfyd1l6t?YB>}}9QiMaS&2OeVz(Df z`;^15O9~VU^0BWnvO%4-k1)$&q1{C0QS9##Rp8R~)P4|~+{+e|(5uVw1GSXf3-6e! zPYv$ZUS%cQ4n3jf5P`n=5XQKGn*iFgq7Q*v!@m-o#)U5y;`x|ekTR=}qFt0jE%;dV z_Dj0@I)pb%7XgjqiH#?9@OK`pHsts&WuT!d-q^a;Q1Zp)^=b=d{K2yCo+-&6s@df@ zYhf%^YPc=LI%-ZEXda>$4VKa6n1yj$4-a!?Wd_CAcPM4br&)p+)1iNviL$NoHFpGMN%f)idu1g(v>Rlt>9lA?GZ?^Qs-}sP{s+8)R2W%9JJmr6TCI0S6 zdPTT^hu8KZZ96E{T%E*+8*9A>`}xf$Y6NX0wKe8&=MQnHXGjua(b>dw4ChIJ5 zEbf^XF5Zc1uz~*ojI(1rsuKOel05%<;rc;A~ml78Zg|1n#>QFk4x4r#B zn9k3MLjo0gHK&3SmfGlaVE`5lak-OLVVn~KOj3vUU)`Fu9vt_YcINN1N)Dw*aMU5AsfY{!T$gsN=_Xfs5>As z+d{J7r*Qf+Tn9gK(S+yc%&b7MZL-cE8iwujPy>;rvl_%ko|v}#AX}t?o>c zc!TgCa@)v_lTX!~mGv&ht-~`RI6sPSDm9R>KVWv6*)RxiDEpSK%(|XqD{-@N9l9#u zycBb$r_8qP0K@m6co0Lg(+)q`#Bv^gKpt3&D82NJsoUWpGK;U5KK3%~Gc?s{1G9x% zFQR9+hyvw~aWbZwzUS`jtv^yH&??akZoZLhR=;>|46s&@DI2d&tC*WzUZTl5mKFM* zSNnupQQ}3>8XchL4O|4K4Aac9U$H*^m zf+W&9CcO^;sa$2&`GLZKgKKv8Ei)pmE1aR14;x-rsKQPmj>8Zau8f_Y0%Z)6+xh&) zlVG*{@r4a^85OUh2&yw`(l8qoF?cQ-8#LG-z|5`J4-L|8Fv`Q{??lz)#$@FT#bM5u z{koX7AfLJ7Uf$*9VA3X2VPey{kYJW`U7JyOR(lqZl_Hi<7cW2V;4E*OmZ1~%o0T2Lq{(sFd?8S9F+IW z#)(b%a?Gf*Qr)|n{j0rDyRPRu1#%Ye)CQ|Ia(MT|$=XBmHxz4_&^q>phZ}Y^_JzrD zrcWNK4k&AsH)p9_Nsw;ql+2*$X~cIA0s|tKX!wur!t!0O`GS?33h{3Hmk*`BwwM?} zwrlYRdvdE$x9VfJdY~DFp(($&%7L^$*_RaH^3naLM{f@{46-4Ykh=szSX*+8{?V34 z->$JZ?n>3`$pW2Prn$c1nB$i1V5l~;vfNyA<^KST;E>$coIT6{qPdp{JQoQ{@Rl_` zyTLKi3UkoCMD6YN@97DLW~RVl`br2a4Pio(*%<|E-qc$%WCb?78B`c2KWdr0^(S3S zQ!K|0PjL$bpOE`N`BHfDW>80iMrh(Mvq;{}~ty!WTF1GiX zuY?ri!5P`Bzi5MP;FXFPH{{p{pHk|q1^a|hB`q#++{~~G4dfDs6x4Z6O4mpCIcQ;9 z36N;un;gKx6mHgG{KEuvi?b%<&AU5sN5rpZR*3KRfZBwZZRWcn1`x_h34Wnq% z><@`~npY4)-*a1?3Ii9ZWm3hczev0cTmxQZoRIo_SWs~q30Z+danXM?j=vq4B?}tt zZ4UuK#8U_UU+lmG7K|{$QoZs1 z5S_$3XIi|#_VBk42IJfi&<)pdSC%5%8!L$V>$pqt#3!X-N!4=~Fac}_2Sm1gwb;yr zBs9&9cS@ehL-@Elh%dlAMur=GK8WMA$Yj&93;<`_Rjaj?(kiXx?H=`KlA9igfK7D6 zPqG8n7|eE*k9l+71aI?^$6J-FVFtcLMQkg#BdYtSwt{D zkmkJ+p0(G=<{T+!yWv!(%?<-Oz zXALsySY<}mt`snU*b8d?!dD{ILCC^sbgf&W3b;vF67pKrdS?}wcA3KGO`e)*4s zPLS~Om~BI|=p3uKv=Ys;OqXb8tf{QLczsfq z@00#oVd?iMm@xsthgAjDDrO4`7D6XxgeP^7DtTkp&@kqr6x?O6q^M%V>&tl{Eh?wR z6tUbWT@%0RVg|ZbmB(m69z{jDf@5w&)fr6!$mg56LagmCXgMy1Eb~)UlIz(&)S=XB z#?Q0hLdXoukB##x+=OUcCz2_Mb#ip5D2=k|#rjJs^yvpR71d0*wyOJ#*uj{i7BeAX zmYyYAF^-S&ko-RnVvtJHz7G(`4(BImrq5BTZ(i;*Fa%a9WW|6pcPlbqGREc+#1-U* zGn32{l9}G1L6eeER{GRdYdt%I9yKjQsphc-U8v?;Aw`U%o++EfMAO$dfxqe?4Ef=F zl87h^bt{z6A{pUs@{&Q+_qJhh?e9d?V1g$GR?REQh=}I<>MN;vP*GEtsbbc01Nak1 z*%M`O9YaE`fwU&&U|cY&S^+8ebt?ckmWjnh+qm0C@EfUj97}Kx$_k)UZl}%f#0gRc!DcdyF{a zLXHSzc>e(7(yStYx0puv1dBYojl9NKt{$3&I@WGVbcm%)STbIXzF=8>!@rn1t%Bva zaolGh+lIUzPUkQOjq(Nx`2@n+B{k-nto|tayKQd2_b-ED7*~V1^ld`x7d%cd%EfHK ztn!s^@WjUK%%$a_ipbv%JKu3u<2nU#p60D;wS?Q~Oq(ed(oTZGgtS+8974cFLPpI~ITg;`X9szYuLrPyNuu{{YG&-5s!ax-mWq zUmk2V{{V$S@c>KQ_J+mb9q=o}v*0~(M^P0s;Kx}BruS-ERwl{sY`iBdDxVP>y_7bxOcZ4{elBaxc%4h+nz%(3vfyRY?3 zX|xOgXD)h%XmnhA3^nMB$1WseJ2|o(o!rAtgGyE6G%GT%)7(W)7>hdYH99l9P89fkpU*ei1{+O80D-Ae&O)&b&a%bAZguBIfq6c%wy-hE3skD72|;yb7Gdzr}^ z7T&zhN1=w-DR+arLWdFXsp4Ls77yIMJz=h*E#E+u{=;o6)3ld%60eER;EoJ+8?6#o z0pEgpl!zA-{%UlsjlAEoZQ!NXK>z@=PE$O*9g?DTyBGUSG<52<_?ao_yR7+_q@c%Z ztLh&qRg+dsd&fCpr%Q{?yO8mIZ-|=1YX>`gM-l;!PF66UC!g}%9AeLQ=Z{38LbG=F z>T@_?<>iAK6Sil5KH$S84GMP>vyb3&iH6vzL3o&?Yn0yaxIjyPvpl3U#c_GtkBCg& zE|T-pEQPFq&~f>f+G|~U-ecMezfN!t*zI0v_Qk(YNULCN%qf(>z9p7niU&D;N6w8Z z>-m@7>MaW_w6%4%e8mq$#t?hj_W`JJ9ZE5!O@rK!c2R08l}9H^1Mm{vOn0OQI355# zWnD_SX|Eol{9IHIb7^Mz{3YGo6~1M5Rmi-g@+tE%bYdAb=b;Ux$Xz>k8bh+Nv!eXRsoh#G zSDDGu64a*IylIWBU0bNF;$&xg$_09@EAK(Ly6auSfcMUK9u*a~ws`jRO6jmCyYD~3 z8im)?IkU{HYig~~_2wZ@gjCbC$X#kS7@7$~dBc9-OEOxoBRMw^;ARtDx(GfPO>(eg z;+Umn{RO^ZPU`9YWTy3cHv+d1jB^F%+2URZm$&WmiER20x#cP?b?3Al^DiytZ-o%n zITjlK01!8wb`}f#%MMJP7afcsO8{!PCi0d1wq~G0o@x6sw%RLRNJCT#y^H?IFZ&SlCpyo8<^uu2;t0|fK(l8+F}9M$e}lLS0Jzrb{{Wf& zuf?c|ndu8k-F?a%2`h0_%SE?wCxzvNSJxwl;#yj$Y=%dU8H*pKZsBpahaX3 zn3{gIT_0pMo`Cmo53(6orQ!t}rBS$fVb5@Qcx5al8;3Gu8dm`A<`5a~yxwKNw|8GC z;ITk0O<#<~Y?M_1nJ~}@Ig!wM2&%)fX6uCfzNSBxEdKxw3@7m~^2QddwM zy-V(24$vU3-A6_WW6a+YqIUyHv5xh6R}WFSg|+O0+eQQb0A<_O4{QD+Sn0YSMk68y z_d37sGCmdCn6b`*gfi&H`Iw0uWQ5_y-?z9vRDcj6;RKhd{ zU!$n?a+IlPxe0|cpej>e5|2`L>G?-~LAE-y#LXZRL+QF9gi?rozC?$lm9vz7)z{oQY?}mEbwQsHnq=t1Uq0fI5mQ`n*TF z5B}fU5V%iA$>oK31`1uKYR*HInc$FTy^=$RwGx3bPNEsUIqXQj8;(S2I$|xKGdAfB z%2+*9# zJX}$g;am>9%_k=%-FuD%hP}65Nvr{~#;~<7cjXIBn5;bY6IFs=67|%(iom$`-SaFU zRxPk9qn5vu+)pYMw(*Duhw%DEgwE>oa&@4>%-4Qq`9_6bkEe2vsm4Fx%+w&Phl-7( zPjkdQLTN!uxg?|WySQJ7Qq0i?J>gAOWt#lzRI!5Mo>;UhEj8S&0Bz~)xgmdPtye$b zmq=L;;+;(2BXFlLq}kze6=SQ4u++TyBkvZmz1E??Had-a<~=|RRg+M&6!t!#ftzd( z*-=jHhoY&;4>BB?hW@2n@QIph^9c}aE7vEu0;mvqIiZHC!7wkiI)F_JN)OR3gRYf0 z=ef8=TL{X!V_muF;uP~6L$mgU7U2b!Mtw>Zi=|%y{w2^0D~H!G)W0d_VxI&`@?R{= zT?9DW5#liv$5rtvwGOX-eJ0J^g}1q%{2k)1{J}SMuPW2-R|eOIUZtI^50`n1r|Ngy zOaP+TJ_&GzxX8-j3SA~&Q-tA2;d+_AIhpS_8e*XZ;>QaQFl^2ryL~Ak}pz1vmOZSg62S4s-Idlt_Qj(iu1ov#0pbP2I z8erMfFxL55Cw)tOk!Q{VQCdyE)TP?Qb>!_(2`t&l?hqe1;+%VCH*TL#Gut00m5YRp zVWMgjc3u1GH^VJAmmQ@O#N+F6Y?S#@3X+{0xeLjP^EOA|K(B8&^#$$_F9o@-;Zrl! zcC!>Ix%-(?+7+3eWB5b1O+{PlMBwo^y1}5pJ7Uq4W)!12UgI&R`ww!Jj>wQ{*8NvU z5{=cq*i;+n-2&p=HDS@6+CT^L)2E7$y;6!3D!Y~89C5=He9CWAu1)!4dz5Z(KIq=f zVJvNZ%Z9r-E26Q8EL*MgH+|G;#8}y7`gav$YYV;miR|a1{e&qB%kQ=u%z&}|q#Fd{ z*}@~$$R^LkN>&S5j&+P+yBuir=|N5Q{JncvQVg`evD%l#d=^ z;iMJ-f6n4VqIXp0x*&ByTQ!RH5w&9JXK}LGT+Sa(PG-9kci#;dz8<#W`8Pn*T z5^3!4?x4?df}r?LMp2iV?|}S3P$zY~rwq6|gVUD`TxzByqu{yWmzp%Mz+W-uPL3X< z4GqyvoDp_aT~o`#QZZcGnZ%?W=}E}1;u2U*dby}IH-kI8gt0S!y(GGDv8v#BscXFV zCm-%rmG+Kd*`$uHol6AW4qx9g`DTj!I)#<@gJT$Bz7!15_1q$;pgAEf*AlHY`IrN( zYi-jFG@`88m^&IQ4i1B;@1Wg}L%DkeuDY{Zmw8sYbwy5PHO4o78F*(>^m~r>rL{OX zmTQ%rW-wFM>~KmFvx@<|`GImvgV#=Kq!kVOZ2R>HQ+SLk$C<;S9EVXpg1>Pjv1|Y= zdO+lsAQ!6_WTVLr+7`kYQC)}1_>|zWr3X)@AzlPc5xIGTMVt0`F~;*|73n!HO&F)=5IVWRFke@G&fTdf`mYL@P& zxKx{~cwoY#+eh&Q!cBi!1?@8yUsCb{$YtU*v#j?20Hkg&nc)8bq^_(tqQ(dWM;$|z z?jq=MsO+!cg0)heZ*=ECwW&>aR(~mkrKQgYX_f21y+}dp?l3y&f{BY)5zc4Le?(t! zZpS92q3vha-nts>j$nCo2xU05Q{Ui^WcKYGcm$)Mdb?}SY^8i~Z97;sCC{IB;!%!2 z$TUmd(y-MxuI86k8^~!UM9yw@3(VIma{VK^u9S!SmLOdTxBhN2uyH43>SO`eYnv=? z7#0NWxURm2<>uZhQ-Y0PIJOg+F|52p*sZn0!1#>EY=*qoiKS4V!a*cvCVO4@j&y8y zIXjpTg?qSbq$0TSEPpvf`xZF`)H|Rgp{ zqi0gca*8xKE>I3_EU0-Q?;Z@oT$*xIrEWCCNCmRZrUYY<9kY$=EGXnaRMT!J*SIDf zUjt;NbWM`GVuF;(e(oyD7I9mL+`5$mX%9V1t3)E~YuJ=NMGXyb^~@~zlXUI!qY7Y| znCfLyu-U;Fot=d{{BZ=HDs*I{ODQQ9 zO$C_Oa-!D2$(6puDup#+hOsTusVn9w>VfBQ(3-W2=_YyjYl(z z-j&FCfgl5OuKI!^TkBiCWlL}_o7M;skczE_Pr(N2W=-zuGjeIe&}U3q%x<1zq)$11 zqZEm!XZlP$r)7AiC0tAmouo`H2E3osFrwBC+VFfquASMo?kGa@3+H4uv@PQ=e^HY! zC~CdLY4>>cidH>$eu=!x3sYL=pFj|bKQ4P7<&;>ScJjZ}3$p(JUA$ai{{Yy@cpz!UnFmvdP(g4Af^lhlsoz9Z$Iy6AQQzL0 zz@OiU_Eaq&+3IiRigkPlVm{ujZrkn;93s@uFFqjm>Y1PE5Z@`BOmlMQZnIc;m}{*X zMx2e--*7I%QYYKAy`0Ski^28O8CI6D@6@&`cT}sW6%;A1o}fp(@w7e|g$pu`PVSo^A=k7f%(~Ybd@0jv9vK)fl#kFS&yN=mg_#uC9VS{0)bd^0C z7{$wqpyD!?6@a{VG=7aoiy{UVh1z#I_PI3iv#7y}ME(oF!v&Y3{=LLiU@v-LIIVMA z7m0^qq2Bj0K{RrLsj`NaDu=%D3gqN_AQvS@JFcE85zKGmuQHjPPVS(qI^-k%<~wOu z+oDT`C`Fd6@5Ij{TNU|^)`oR0#LP?scIz6ILMm?Y{g5o628U<9V$bJAM?<*!5*sLW z1XqJf&lgFS?z+S0G9ZZB8;XN?3I4@z{SiSQBjmE-l;ix^D2cq1K=^(fLzjx z_MOg%pz-2XNP84Vw7yAYJM{z37l>$1=Va?5-en|hc5Ylj!A{T*M`j{=Yu+9w`=y~F zVaR}T<~qH3nj{5qSlv9qK%9nJdpWM+=Hbh3l$)ZKJ*8TT#)Nf)uQ5WmGBjiPgQ#{3 z6__{`lx1;7?pb<-88kqH!X5OZxVnRQ4lsAz6>KJrHC~aOR>}=4qE@JS@8+Jp&qgxW z>ywGLSZ>bcK$_Npry^y4QhrbuIiB7~&3j;1(kQ@LVblI*E4I14e=`@?v2L5QaRp`a z&4iFPK76nwBYAMI=tM1)zinneJ-ViU;$%k<&79oE?WbfpJ;bC}gg4a0GXPstI_Pf6 zOfw$W9ypCEcMiPfWrdi%JMsX+>BAkeP+b22IgaczYyHk|<(t3634kt*Q;%rz;Oj3( ziB;4J-7T=_KGItAF}&b6zuf67rCZ)@R|+dw?r9-+|UunF@vB20ne6o}ArXK`y8 zPoj30MThp9kumXn2$*%$oRA9Wa5?iV7-et%2pL!iyE&`s4TTE%?DYX_KFiD=qGhJu zNI)XD`NGZ-OtZS`;L!eA2|>hzZDj@-1zBgS@hm~vHgCsXVO68pE|S+v(b($mhzk0) z7@CuF<>22}ISaxJAG^6nB%jz_mK7ht7XJXj3u;m{(2u`J5j+ zgZVL{W;^+Y7Rw6U3VzD z*c&cZQFC+*F7WHztb9qb((&cu7VB(^oIK17a>=n?;tg9tR^um`k}y^8a7v4c5FlosOj|I5msjAA5kas0Bs? z7GtZTYsR;x$3<}}vJauJs6@s#GU0iFRuHnpFhe{K%x=R}QuLP;?HC%(c$;j{a_xM0 zL~pbJ>#2o0iek-62?0Zlcy0J`AIMCAOGD46(+6B}uGPW8VL-v{Y6fivy zGh7wzZpV>}{$_v7DGfNPo_xl|$Q?Ap3#VP3prPgV&%qr?q1t>9#>nV+9_k&DT^=jk z5t0{uxW40uR&NIx=wSCTMLB_|EN`027LK}NWC6Ct9=yh6ty>y-AxW&*@@fF3&tWnm zw{Ln@dWf)5R~DjHk0d>evyQo;K%rj+?c=Dj(5h<$+=0OtXK@1|&}Mi%)XZ|zc5#p9 zR}Qt z%;c2zS+Kcyc3H5!Bf5?TAoA3zl#5U{5Prq*wXVldNVgfcQrWe*n6htv%q0qPOt}{l z7`6s7rLGZKO4{2Hi~;`R74#m;i4RE0^-|WXwyQYKH#-o6{{X2$XZzGCC|LH$*o@m{ zl)g4{pU zSAEr8Al9WoU}vhE2*}xOUPeofU0h(`ql;$UTmg>BQQ&Qba8*NufptmsP0m`P&QOZkz*jj?bfbzo$J@W?h8$Ual zxFYUgxM8&|ii11J1H$*%6ubzmrO09__jxDTZV`o}vA{BvvcjO;<+1&ZLWx!^R+fu6 zsJmDjtVQ|CE69L>q!-ngzCrmqMhg?jgpQF=)-)V(a_YuLF;f;;uR)Y)Dk}>g$v`PlL59U8FtRzBhy#CPnkuYF%@G*6NNKE)1s6rL7QOt3ZPS13u`@%Eanjq)QH_Mmk+S^b)n8? z8^bd$QKM0o<;O$f;X583#K8e_bg88sAg~%n9I^q@I>Do+G^kRUh;~tc@Qh8p3|q!j zBMzh5i~_Lq3bJsIRwN%1482sJI?L)H-#@b5O?PZ~8Y>#KsCE}b2`Vc;)M*uJJ~2_` z(CqaknxQ=+)TeH+K5ZyEXCIJM6m-GVZ(KlAeL-PCuMgnNMisB+6RIBPq9&2qrjq{1V1Vvd;V~n$&I>0SZ?XeY#;2$gb_X7a0JuDd3>C*+tM9k$%RE>*d=CyTH6)5L{D!3e2WV007gX_*H&z5n6zvzJn1RJ z6x(zMveE3Mc`sVTGZ9F)P#f1}78OxW)T7{Fm`#0v2fL{0Gfd_v*!CSNwY8+V0J*+Q z0OjKyCsZZ*1zcEv%x(eM{vo<)5E+7{-RfS+m^RUTeIv&9!otXWl%b|&bOf?-QEmi; z2j^gvoZlg4e&$&}S(}I3lv%xhCHs$Ock&pw*_>roCUiz`-;%MPV!yTO=DCCLkv6tz zjS%&9U3SJQ>yg=TfFL7d!cmNYbsV^-{F70Bo<$avIH&>!T0m~bMk-cT37dv!GA3~~ zc9AA>*PDg}9ClfL5P&hy*kg=ekPX0_95neAs4E|=Q!huwgu(*z13#kUzpOlgWEYF& z#x4gx^hRbCP-W}bIy1reS3u075HZAd8GsUQCllP)-3C7=U%kgfA-LoLEtk zK6eq8qEKUvDx0{6Y6hwug|&icVF3&U6#oFRtgPuGB9>;@>Vkv5MvD{(Sz!pEsId)^t6R*rGxf3>LSlVVp-?r6pR@~ z5A_wY+N06q0R|`jF&Dq2ZLke&g2nA%40J{djA4A2j@2!3WCoU_AAhaZ*n(&0$ zs?9}GYWoy3CxF5WPD)ldbR#%DpCgU1Ra+2^+7R`L%r~|5l(nE%TA%_qwE$k}B~#e= zKuQY`-wx-FNR*MF;;KEEJdD~T>k(FI+#?_AyohoU?6a1h`nbrp4{#T>3IZD z6AP7WTBv9`VjWxcW(zwnf*`ZpR6>RsKw0Vh168#b zDwNvbmzbf*0sUl%7w>n#>awi zvQz3cbci^v-m^85s#nC9NIj#)k55GdgenLyQ~faQZI;*M-Nk=wsVhVBR@*;I3PwJF z4v_3d_{? zw$9YVH`xpz1rl5oDIgmH^%WpnwlMfeez%gBGuZ_Xvl_X@o9U=^=%|sB(KRnJ!Ioo7 zi|iDN&map5yG28At#8nm08xq*Wo!_OiJ6kaSV>?8?&8g)qZE*_Eqs;+%jx+NsMWy4 zn=@vjfV^HknaXjP3!?EG+7J!ih6qFv%0sxv`Kd)h+JOU2;g#Sf?{Tpxn5gCerUo_6 zs?1e;I|xTcA!2lm%C=ed7V9*C+`W%Jk;?6oAkvr*bZ-|M4QLr@%X}EcBWWR6vLz9k z+b{tPR!C}a;e`kKgMUC0xcxp#a={%4vL;X~N0AN%CD=Azm~2#OOd}Il_4WyO(f%Te z7$woCAar(u7Y6}>oTsJG!W3}1C80KHm40ouJSOs?xZ$hZ%tYg2gVXLz5O$Li)>J8W zMO>g(!V3foN#YXGYNlbCK&NIWpICa5%E%}hmoygKrr4GWSIxp_8nJ?td93KeFd$mk zf#7Lx89{7<&n7|1RjEU4tf%QL7BPfoEHI~u7fr_e5dzt0_NM+I{XyP%#wiGmj?6A# zD9v{R0B~yl<^`EU=d{gLO+BMTLG9-M0O-ZUn{!DJHH}B34RCCLRnfrWY$nTs(_@&d z9hCHpuLnJZkOaICZpVNw(6V|n)j}S~E zIAX~|8_?N`idZ1xqrIrBHv{@veuQ&x(4NOY#c)y6*xP+CRY{VA>QT8FlT1>7B0YZEr95f315LCf291991V#e~! zMX+vS8!wEa>B_i~*$3#7+#!SsP5LfgMy#$Y2iZ-sZVd}`e3=XJJ%+Tu+YN1&Y|C*& zPl9=Sphu8Th8`BNP$;+C4N#LS$XzMm;v6lGR#Br^?&6?O1)noDMR^^LAI%H5f(Y%x zr*=cEky*H^K}#3Bp-CaAC_r&A;Th zm{L^y%gUCX?lDr7O#=#lyfqHIrnlB?Wh=cFe-?+)L{UsFtQG#Il<_IwBRe zEaotn_F;C}E>UYI8A!=>gFryp<|X{AklLwGB`X47WU21l_Ao11hiW#0gt=u<2>`r) zkxb410Bf+SRsR49bnsqdxL6C9ig%9E8+sm;l*(Anr!qPFQ#sPnXujEKRLlB!!lb{T z5FhB`=P(<0-?|A$B&)mRl$Ce=;LEVrUund=j5ceV0{b|lYE!r|EYtr0qyiOk z&ttkREV6_q6I#v)2b(NqDV z4WaO1v`&Uld^;^&Ul)llhZP8^V9)H!?sEL(qgp(IVAFYxYow}x*B_XT^Tt@rq&L`b;&$!`1j)8C zcHxE#SFudtMUeK1a>firAb?_EZCqhYqHCv-5B^?D%4y>og+}PBA0jRtQ7s0Cc*LDc zDNx3Coss-lJ7cq?EN_fdB_A9_iDY&`TDNIRLOVeE9A2Y9KhqIaX}A{#+M26zh!79! zF_a{pJDS%$1PWOQfay?2AUALK08#8nY5GM$_Ce`hj1T3A-0%sKJa4%QFNF10J*=AlBz{8BojJ7;_89@Gc)4IS>ADYHWD7pe?cn% zUgSDp>&;KOs8FxRjGB%M{nRa*^s%Mn*YVU#p2AG5?VN(7((04ZiC25{-5Jg=#+ zI3>0y>9p9tcGP?k+UX}uwMWi4f{IN7J>oTl`o!-|K@W@3C2{84IvWO?G1VgBc>5`#;C{(dX zsvrOy!7y4Lvj&o!5Okrk=#=0wx1>!JKea$05ITTGMGm4Cc9Jz}aTyOC0hO7Bz!mln zqQsTZ(_VQT)?6kDpus7mC}nW$e~8#OWw%m;Q6;bc0F-$Zf9xdHJ~=98xwG;KWxP#3 zp{NQ%U@p$j$VgzG#u)zqUt<$oFs~@ui3ly>sOUgD;SgOEunyKuRd`~WfG`Pf#6)Lw z9hM~MtxsW6nxOs(1;kPu23qGFh4pXgDlh@z5yu2$61F8BE;I60oN|II4Yv z)C!mOCwJ!6pp2gPU!k1xm>@Ew4ba+?il07R@(7E48b%!D&c{2PYeRovQM3x&mE zS%F!u237|9{h<=-5%v6+8xQc2bf`sSjw&cjOVGj~y$KYX07a{nT~uU>Xn96GlpKk9 z{6hPps%(X4ttX7=E#0_as;I#irSbxpf|oy|kQFJ>?Gc}?mmeXC+e_@H6FB2G*h&Lu zq%0x+$^CYG66##usKC49#g$_S4~!HdH%Bw!-8)DNr$5wENa2PR6elJV^t7U(@G6KI z9s_c7UsAY)Jk$)T2u}JyDJ5lM#uKbTBGw6{8!4A;L0WK_GJ_Etz{FG$Fcm~VF_P(J zNyI7ysX`^x)W$Y4{bLEmlqDb>Mk84}aTAQQ^5860Q*lRebh5%KX5|J} zU-*p2SBEzdi@o6y7O7v80bL*NH7`H-%0M==T=_QRarBow4 zU$H|B52#qFTkMLbv1kWK$KNZ0GgJ-Mii*)y1f(x2@WgJeIXVmrGzvQ%yL^WY*<=3Y znPE6hGc$l)bb_eCN#a1z-OF;N+^0oPkTyYpw<;rVVNEFwDwh0&O2wRx!>%P!bUOJN zWs9*DZIg7wN+=!}ZDsh&1K}`Gbki|ZE<={ugN=qAoItshV>vLk*9UYNNpPatkx%x~ zttK1VC;@m|AX_#Ssn}WqzdRUupS?1aY&V10x*}Irr(+=A`{YD3g!eH*V%n||uk#o5pNWE9s8SCi01^J!PpV){KVY>BcGNrR-lm61 zG0;(lZth?%uU*4_OKU0E?gjH#O3@3l>%12g)s`w+9M-c_*k}}Wdq^bYF?p8C0lj`A zp$qpz3F^_e4xO-B}dkLA6h(BHu(HN%mKDY!q$-a7kPyjc2r3B) zDwYNl-O|%8(*+ZR4grZAG|Ds(C{r;kSbx|tYP*VNtuE!T0<~Phc9p@lJ&iYTNF@#! z#HntVAx41WjYhaxh!kE$1}%!Hk9;muY^HB+@3^Pa>2$N0mdG0LN%43?s4YN2g1UYKr72%|&&R-y4LjtCAdd}dWNX(%0F7(R}$9_q+N zXyrnPKYw`(4F@M65lR)3!{K(8Sp&ekG#`-wsy@sVF1K+=7#mZu-Ep(V4#Pt7iF&#Z zAs1K^v5$D$QDVS_4#4CkU?TUbscB#Vn&8Ej>6hQJi=1j}GvRLT3z=b6FQxWs=!jtc z;6ANt?MEa~m%#;1CRcEHL$X;V6x`5%X@tpujcUUtGODo_^x07*qg)hdZ#FsRfF zg=S(wHm{5o00Uk`Z0`Fp%Ucr>coARIq67t!sk7uWtT^fSJnF>;7@4wWoK7W$)HLySRMf6xQ+16pN&;uQiYm6y|z@JAHr zKluSsEEs3{Flo>w=4m55q4PY0gesXT3XX~K5_Zbcw0~wI>yzdnU+om(idk8k$6ui? zU?bkn{Fv3eW{oupd^9G@tfK<$QX3Z_lx^7rOyiYfU(`$$?2*`rP~koi7^n>*VTWA3 z+sI5(P(W4_G+P{G)VL1zxi+tokGcD$I#U!S%&ad}tkT5Pmq);ThOM-!F$5DHELlpe zxh0$ zF&8iFN|{Xq7^+-(=U8dV(BMJfb_h-m8K+GT)lwsFFMCAVfF+my_qxzOY92MGHARxM#7#1j3 z$_9#6Q^m@2bT9@Y>c<27r>F@lQx%RaveOjmon#1}AH!A?k9$%oyT*%)kYoc0gdAr|0A#!n8$h z6zxGA+(E6|G^@8PvgNA_99t5Avc(A!wp$;JNT%$3foVesE>wgM$!xuUMmk04%a$6w zt(b)xrKk{(CK(O9tgI5G2wX_X% z`2m>|QoBF7RijEMHt*R{RNb`KqCY4LcK7U9XmO098w^&=DIHKLVd)DUR(<+JQIf8; z`xkhPr-Ttf63JbHWSc*~G2~-ot-7wmQ=C-H6@aJ{GGWZDgLM^$-o*(aFPj%0O+ZS^ zVtinAn6=q;hY}PC+v_sj1+)JEl8<2Y#!;?=X)CB| zul^8R6kW0hK`ob1I-=oKu;PO`vb~tNElETiZ|3FB05;P%o)Z>jswK=of+|<+VHj9g zRc$P3Mp3%yp{Fdhj=X|~L73ZOfMwKk`bwSp6Z8r~0vXS9QkB0L3gokpe4QlQmk z@o`ds*Rg!4%Y_b$94M6(0KBNRsf>mmn3U#o)xzq$)lbP}HjvL#z+?1_DVL-vl+f0X zk-$~^6fBL#f@@6`#yG`rUCPzs-9zY&!%<;^AxHf78PbA^aV1tOm{uwcx{H0}@=fqY z(|;Id!(zLAf-A@!2@WD7*ArVY5(@vqwzA^u#(jM*{g!=oRI)Wn$-sDI8eT zfFdbRvALyN`Ul1h0A|7(02F;4ew>9n4#~<&^jxErD3a2#2LAwMK62T`mp3fMY8D`L z5A>H9eNLE98-`~q!C6SblTqqA{-wuOKekiVRubS2##Ba+^qAdnvu7*Q$(Nbtuu01t zyEccgWov5*44MTPkuF{n3*P2$ zR^3PB>^gK9W562&s! zimG0w@4!3zjm+$2Jbm?2)o2x5n7*zn(kfJes_b=+68KV%UDO`|lUI0JXSQEMuqCx! zLdG_sD;W#BPvse$VKjvhZ&ZVx()R4gdm~$ z`8zqNYr4bnN*tg$>}x^py~>QcPq#ZU`S5VjT$A-n*s6M>PK3R2lw z!*Y!`GtERGn#@ErB;+$VDlTE7j?n;FhgM-_0vH*f-uE35+$9gvBw@Q)Fq_bvqa1eT z6sb``#A>`n$i?s_;t3_|s3iwX?gVIAP-5Q4ncH9YJs{UMY2Wrnt`1zKb{!pz8nDT! zVNw=Hi`d>!c*}#Kdn88Q%ofH433y^3Y$&)BPU0wpce5BMgtxTdHvEP<3IlmHFT%_Z`z3xLC_a6OmA2Uom7Vaz z3sY&RTgE(Zr8SN;qe z;@K7422cCh~Xkp`%Zrp0h7D44fB#$!c3tFMjPTGL?hJ0f6K|t~F?20Yjiga?8pg)w%-q z5nv7!1L^q!NPr7PEPw_U!VS_5>Y7+)uM?g{su-h_3e>Uf-F25Clo%bpn}VZx)Q-=^ zm)~lj12pTf-5GCMN(SwRp+?;}-=~mH99$~sn;_fR#29*hk;o14jnT31G)03SJc1Rz7@*vd4Gz zvoLFWKKtyb0?tm~k-2rg=HWQ90MjtU{xzAMuNF;$xEh!4$JB~4>#hb0<91-T;sTmK z>55<|+%>YX)Y(gR$GN)0vR@+h4MkI~U?TY3gHW@DyYdSHg(_fT%7Ks?CK3(dF$Hcf zW)MLAoXzBj9TM><)?J>poQ1p>U(#B0FOW%ZEigxb*Rd&B424tWxWJonokLu`Wr$EI z=fUxna0(jN^uu67Z$Hr#fm*U>D9fRKKyo_3DMaJ#L|AmT1Z|uZ@%AOp%Tm$tdr%Du zk;vN<^`T>;6#L|Ao%cP808$wFa{@cnmOeN3DnoHsL5sG@=oApNVUJ7Ft1e`GMYfa~ z9mA{M3fL~92zcHfVY7{D-gnDm2Q-tIST&~%!-1@YI**uxu*M(Uh!96$>zIGd6eN?kw7 zj&O&keQ;0;0Rg!HXfQ8k~5>hD$0o7Pr9~>*rXuwBuP>Kp(g}DVU_9t2E84 z!vy5Zs%;=YMT;R6&>i8^$%QyIRmPcrAXNz28strLvRgT^G#0p792|mLYl3+PWjTEL z_7@_Up!J=_L?IYIp*8Yli$0*F{&kCiT}u$lT0*^5mX0$+hj83v)6=5{msl8Ith;_>~xR!)FE=h5{`Dm`G}thFH+z6)wrL1%mk) zA7g2WdRU|aIKuD?(H&oWH4CvuEA}AP!xaZ0BXbu?c$VR1?iCefZYzmL4aaF!b(ZQc zqB|HW6^1rN)oK83T90>s`6<$LhthqFgg$53n5%ls(7bJhh*ioX6#oDTa!Bja7J$VP zk@*!+xr(`T{{YBfgL;)zTXg|#8ELQMkt6)%{{Z_)gb>x6iiWR}oVs-{E40f615H92 z5nFdIbsW)JqXZjl*$I(5*v6p2k&5%yBx5%nExM}gw>&&t7(tv?OiUn+?T8`@b_f9i z>9njT-u%8nYRP$3Q1T>Rv<{c> z&J!?z&}I1U6k)~GdI zoJ~YmimkUu1%)-0VLTkm7UEW8=CZRU%oAejRf)L9mqRGZ8g7gno5_`kQ*7^|L>r}A zC&+6#g*gRe>02Ti;DbTppvsoEQJ&zYL?`Qh+*p(+!pdUWa51zk6|G)D`!Hn$$&hB} z{FG2=6RAgu&_iri+T%GayOv30$c(kwODsf@f{bAmin{?HPKU`}Bih&7O?vWF#1Ocn zDDaCa9BJ@2zoHtrjmQQ%XROxLQ8?Y6_=;tUcJXD0Dq9uN6WbAdndWz(ZT{6QTNMFI zPoiDyzxb+nuV9&QQtq1|(O>R4z@v&1%MC7){{XMn+?93F#Db3w)(Rm@bwCB&+MTH| zs3ue;WRqX75y%CnON!A-vIDhxPo}@59roXQz&~+SKKK}rEQ?%KIQ@L7{3rm9vc=9a^$Z~Ig z1E}m@RvjIm*wnGW?|0!I{D%un2g9C36TIF6Qj)E#Bz)HB)@SHdkOhHem|0IxB`OSw zug8;dToW&l2A>gE6PTkdjx28Auz@*KfJQZ;TBya)jvs?o6hv*-I~>U#X|BwpR+IK2 zb$`-rky6GtS17c~Qxe=0lV)h9pkZnk@*#|8O-w{>ZSL7n-@r}KECSb1wIXLx7g;@n z1k09S38o&wMRL4}q*%JTx|t0J!w^E>0pYlkZp&^UBE!!mio@G=7UKqsjn#h3oztv2Hul8kP6cMgfVh}KTbqiv; z0}CiF&{D^|h{KM)%C#D-ZuN*GskH^DjoBV5@}OR2Qw6zxk&22pVueL0(Fh-~rndkF zWT5xR0GWY+!;!iUWEwmRKq0*D;OrZaMbP^I51}9SA*Qv+1Xip?h_6TfGa@OIDTrw_ z-lCy)D=8B!KYboHG}!Z3?R9^x>nO&6hSoq@r++^(`W0DS17Tv_ULE$Ft0!6SeQ zu*hD=j12JwnpN%bEvU{4yUJ304^j4GXulMFqm@;U6cDdvq=0-onNvO1$#!$E5dsC^ zD0No}gvAhh3>3;Dxs+~5okdq&*BTw(*(i!_vJa=#6LMNeZjE6-%-u1((z{J@QRk+t z=3_34gd_P)rhW#~&q5gWim;95aFr|4v!8>Cw4VMTu64c5m><2 zwiVHe5V3#~Pmr87^#iii#>^+!CN`-x6D_U?NcxeRdNNEmDw2){*;foi!WN!DTrvpaOd^#S*BT!0XIC%F=x(iZL(bYHQ1)d`~6Yvn;6 zCKVc*SB3uYNTG8L9K%83D~Se?ExdJLu1ErmKQd`zgDUb+te^OXz$&JV1$6omE*?*1 zkne7Y0@9~QRz%1Qx&${t9TrgMSJi7t)x=Rkq($P_^1Q4nMqHZp6Zj+F|;b zkO2Px{VaaU3ouB?z_{twbmgY$@CkGJ{&ZMv7JsEPR2Ed#&6` zqoIgRz>9;#Xq*>kvlQ6yT-*zxhjpQX#cBQ!WB@qTlV!<^WSEwzv^Nk(C7GzLeUnu# z$nokLRB>J0x<>%GR}^H904?mS#e`{mh;y`Ef2bAe>>yVtZdgNvf|?yTtBpmh4n+q0 z3W~I52ymnZa;q^){;Vzmk0L>Uh19k(G3$BqFJI8I->Znkw8%}d#xJehJwj4U*DH>g z8*`My(#3cW*z78nU6RxKg0cpvx~Q^6Zw8o(&w7;8fJXTrjID2{TfhE8un|&Zja2UB z1tpSXPHL*xLVFEmrFWPb`vWqh~tqvJMKj87zbS@6xo+Pwnse%9r#3I$yd z9i)9yDRA_M`$KO&Smj8WrifLWMmQZ~4{Ei#L=QpSaLoGhm=5^j%YZECsB!9Q2>JOh zOv0RD9&IHKGnPL{)I+8DKw`8^zeKROO(De9L!{YnJ~ahbT#CBO;tB|nYO7%!W+lR! zay|M=)HEdn;>m$0Qr%32%}BeXNm7_oI5!j^tobY-nS|XffP59DEpfy^X z$_S=xWT51Gc8dRbD zN($#SE)Di&ifne1En$I}Jc`{XB>W z7}#iiJn@Fra9Uk@ZAW;HiepxNeIW95d`#ED4CJP$B9D0kSJM@SCc z;RQ8Bsw3%^NyezHGQdj#=lW)CH1w;lj7F0NH+wN`!tw* zOxEEA5#$pIpX`?i6`bZ(XiBKb%Y#-Tmf)VJ_>zzMG=HCNI__;(?aqE~yJ&?SwfpWthQpg0(n*2$8r)Y`oSYM&gg6{FZbm zT%i8|$!C#A`X4SJq?pMX zS#_+ur2hcS5|m)6HJ}ze8VJ3U(OtxKpJmTe7A+Y?Koh1)Q1B>)QB}K@`h##_<9Qh1 zF^tBpj!}U%(jM`{zSLR$py`og7TgsS0~|Jh+p_+HqxNb??bK+*M`Tnp${$CSPI@(| zQPz^CIJX&=<;$oakhX&a2&``)-~Egq(1+9xIH3V8V3`A0#Dnrt{Zi(r*l~B*+s8G5 zE$mAtWeU?@*3TusIljiA<}1?^W`tJh@=NKNjW}X2Y$^M^5QA1tu@qP~>w5YnEQ&Z+ zlK`5kScRta-F<>teX1fQiipXcB(uwBd@*m^+`865Z`r2xsMSDc50e~P2CA@2AZ$Yl zr(vBjs8xf6OCNKW1PskYZN-%jQn+!35-7C`-`TbdQ4H8?`wGvlU$IM;vz(JG024CJ zuNs`T1<6($GfOHev{xe2dK{;)@=PG>DxwCK0D4@?4vXY4UE4MC0$^nrs;n$bU@qUW z*cBjaD(cHazAxCQUvPOWt>77`#LX8e$yDHNY1xvuQzT8chN7ATdPYh#kV`{u@;Vo$ zT`ZM)Hs38BzrVotb^Ry0Rwp8-q`bhQocg#0P!KPU#}{i6ljl+o;W0DVNB;m|a}`eM zsOFc`T%o!`-KXpijnDj|1sh$OrX3mG*sY3c3Ikmo>e27nS9kt!vH5u)M__6}c$Mgi zi$Etd-{0Y^12nWMgeD%qHCz3M8IgH?5sPpTZ*#zcRX+WTvyoi-%FFUC16v<|j4dD1 zaFIm^3(jxsRWOaGhsvnugHS8jJz&L?cVhs_mKwRp;Z?8gU_FEl+nTFCV?`*{J7WS3 zyjf8~rpOj&5;L|6Tfydzu|-Ba2r!;>#VRR%WkbgRFZe@;Nm#XnU9f#Oafx72cNu|^ zt3`7tEFR;@bjm5EPJ_}KI{@Ye`~kc}q*^w#+!1$7+RB-Qp{aQdiqYk2TX>jg%MCba zf;JJWU*R6lB4?f)y~iLAWlL0e40P|b4&>FSs0%YJsv4@-pzj8VJ>J{X33F9#?whW%=>?U;= znN8$kU&yt`q##$v^*-)aJFZ~{fCD^p2PfgLw3UfVvBEq-QH`Z;Zvi}&hcTfM{^hJc z{{Rr+FtzmpzzozQGpuIjN}~h{S=J@g&9LOpDnoGMJo<3c=lkqThi5R8-%v$c7_dNEe`-r z1VuxLXm6NQ1XQj)%t*X0%9u*NCtd8wRGU`HJe3nSU$*}M43xYF$R!5^gRBGOGlP`; zhMG170}#0I=Y_W)@38=gE(6>x`r@jQ%2p6 zK>q-_M4s)YuOppeTnJR{d=JJllnM}m!CdURyh5oO6!Yu0R{#K-X6at6K&Cza0PvSU zNi{|{IYM=i9%DI2;L2Xb?Ru{mjDu0B&ZBC2dgI;ROYwc54lM@WFzrF+;z{)?8Ge zbZ)p;!zm!Ftv5>hxo`xH7Def`o1!&h%dqBb5n8+?cG+cg_`;+DXUMz-Y5pmWS5Fb(FOVU-aT3U;|~b4OMCszJq~OQ!916^oVJ7L2ns*qh_vl8vY;y_6c4n z7&FU;(-q)-J-C(H7A>Rz*}^Vs(10ue##N^NK+eFZ`SKHnJ-tJc;x%t3=by>y8D(9D z04nQJqRSO{+@gwa9>J=w;`6F`SeYdbfQJkJ0P?^803ee@Bj=Je zlF$KLXGB_`r6ZkaCKMXt*I@0X5|NRz z&i841QHB(+vsCr~)pZ4mrnX8hvgaL1)TjRd-P#NqTj8f6);Y^xallaf$N;S!AUA~R z{^m$ZI-}W;mMGHTs2qXI0juVEK$S zsI^lT?RFVxR)M27Kmo>$8yT&})HH^wSenxBX#?Vvfi}itnXvvg0bLJ^j@_FABKE^1 z+e-fcEE&3(bP$5*R&zW7a&)xh0A;!fND|hAoi#_Ys85z}D6~S*0yr<&CIeRy9n}k> zE1|UUbNW}30i7QFnSy{H!qAUo=B3VFF1r?xIB>oCe1fmyz+GWNLD~vRWgGo_2|*R> zQI+P-)oT$x1>Y5}KE;3)Tj-w~mb(^-Wd#vH**j%uV1j<#3Q^OZ?*9OSwk&#MQYB zAUHwi?8@Y|#e<%5aGhN*XtrZD5tf0JF0J@V zqtLqF_c4r?Jqx_rwJ}mN`b0wAR^3MpZW;@-q%Be=MTp=WF22fowe%2<-{0d;M7q1o zQKc99m0Siyp@yLW5(=$oxv<#R2oi?@g{@Z|mYGq+5AZYzMEJPfdfE&F>>n5AI9v^& zpm2B}Wh&Cl)3T@r1TRbrq!$dLt@(VHR_wsYE-&HI7{f~d*gCxOGG8}l-2VUq=XstY zqpML9#?_h8_L_QUqRfn-E2b+^@^pa)(QEijvDPwA2oZKB3dDR(;>?n?3?SZJ)+(Ah z>6ISi-(ql!8+b7R#t9$!p*bGzv^EY?*NBSTW(79}d(W}5)fi-Ceic%SUjuG|`h+kT zl{igYQPg${I}hc{=G=uCo@2U&%UY_iD!9P@7Sg zdl&;FT^dlmiZln__*2MU4IT;Swwi>jvNFY~o(`ovlWTykFDk#J(q^r5J!wP9FO7OZ;>!d}&_ zSfmymE|d?*%nl{NpG}O{wxlSBWm_D!q1qz4`GqV{`Rf!+5U>hKSS`M1@Ey0oiFb7_ zq-pVP4WbDE3LKVMmj*r!;131ABkMv|TB|kp@0vG5w-a$P@&rf{z|25Jl@#!*H zXWmJkN~4;+e}ZF}za?`10?LKZQ!;)c(Q>0`vMc1jB30t1C2_;MmV^#cYy^LvpGU}I zpfFy+ca#sgxXQzadKdfP1d8ha0QxSb{{Z`yt>0!Nk;;Uamo5<%D_$XSgfKX21N@Z@C<$4O+rR)+ zz3?DGpGD+-;zDX};z|Idf7?ppdPpDUWd;b6mQXpFsBQyHFb%Gl!2ec(BI6^G4hVlxz01FDVHTz<=JY(b<|fHp=%HrgFw>-fG5wYno2a`v(4&o%kN zxL|p;SzHt!;b2|*O&3Gb1saY5Y`6V{3VnnypW(hrSSl zl|#1w05I@D)HGC}x^&LfK>;NSlV?smMJSYE;aK#5n3PKsyE(+Q1!18LQ_zd`r&?3f z?8%X6L1A8Y&n4aRu(&HpjKD`i$&&&D5Fwgd!>mDqy{s5r=q=DZ5K3ki?fOr?aA`Lw zbGUuqf;9@z9#BV8&EWltR7Hi_8Ff=dy+khbEPhJ33&QVs+~3vc{E`d;TLa3_>*@@+57FpC~v_*o!SfbI2UI^^8lO3{hB5Z{jk)m6K-XQeV0mN=xt~1t=j>F z1s#upGb1xg{+fW=Qy00oNLj+=CzB-xU={oQMARvAX;)Se6{>%?Ka4udAKfNk2B}qY zQ0gZ&?irCWm$wsvRS`UOJvyXuPR9Th^2730)Aa8?)Xr3?YeLF#0=r|t75oZkf6pZV zQsSV8#kT_wV(y*~?J|mNwS!0dhzu|rY50CZhX5wQ`4Lb7<5$uEt+`Q`>~JVT%Q-J! z;s^f#PzQ{{61j5^DpBK+UkRpVwixgDb3Xq7^+=;SBN{ zOQafc(I4VCi+{S=Eb&0r6p%a*I#Rb59Gcc{IdWun)nz~;zu5iaM8Q`70Q3r#8dq~p zmKD6EKYxQ=#iRz@X3+kk4cZUyF_(*#6td^_iRjj3WLOQ{akkM?w!I_diB;K9lCCRr z8Y@EL$ejHyM8N(CuJhoEqwJQ2vcrZ~IeQyBVasM4B%>VL$Zwq40%PpF#-&+WG!0jE z2AyMI@TRhb$r~$F>N=LFGg>?osAXU}T_j{Ye<4Bd{;&rHfcP;Uh;;(2+y2hX09}@V z!aGrygMNdkrqJ8z7?`4}s$B%Ws}jlz?ZYf$*$}ZE3^Z#^Zg1gQwlOZnHF_ap`UWdN z-p35E?Jz<9Qf=T3lrPom6_;c#4y=h1AGzQ~x)i?>r}(M>PxTQB7bW_XB-Nnbj=!jY zgxaqP{{ZAWSF<|#gp~_k8Es)edj1OFhFECj9RLQnim9y#Z#!6xs=E)^qT0Pw8m?Wh z^h?x$K~5j~BNXbtSx!x2mX-u7ywy1>A;P1)1;I&+Mbr?L42p<=RMoq6enE(0m0?Fu z*n?NVtB%Mnv=&KZI0ka=6M4hr>{Uq!97%;SA72dnlE(L_x7Q z%PZFrR;S4DsuI~VyC7ey(tsADxA*uwBxO69h;4|U8A=rZco4%ka9SrNI*bh(On4d! zj%H`ki~z?#IKLmMO?ASTEgr|6ZH}*J?19^E{k?w+eiApC8+P$foBfJ7xvCvsNM49W zP1&=6W6I+CVt|~aKp9Hl`R=NpvytY76U?8*q04$B*@+hkdZVEu-{>a8;%|MC{Mth_G09jEC zT5X=d>Eb+=!P<{k{609q6)X(#3mEDvZwY&9Do|AjqtCBdL@ZdW!x;Yn$!08D7_OlO zsf8UOV@kz-5>W!yuq?}VFpwCD3ZMFzrqT&sCV2WqLQ%Hfj=-*=Q}ZZ>{g_gPdr&|I zhTC+*G7$rKxUGm#0|!`P2Ps9gln-W<;=5iaA~>tThE9_RKBY??u6GeG(TQPaLjM5d z8_ED-Uv6I%z&JnK_A85eHixpS8K@4BakiZi>Utq5FMz5-%8Eh0EJjm zT^VuE`xLc_Xkw3LZX$?aD^lq(XTuejOBT0o)?O$v2E-Z4I7VR-5~q(y$E+!Q#aHHT zJ4;9?`ea~G5AXi~o`&Gcx9|$r5A2*jk;JvyAMpi`%BgfFA{(&&;=eQ{wQvZnU~Y>r zsYm(jSg#dvOqenwt|Nw2qOO@`Vie747yYvVt38EeM+nEGumxvxMMrz}ndXcuxUxA1 z5D+LfU*E{;R1zMqc$*N1*oSHmx^mRp^#1@K(uMZ!Jauttb^9sd-N{xTBD#vqa0I#z zVt28DpxWW~39_uFUourOsfMTfj;PI$h*BpQ?A$y7-e9;rW@Zm{>=%0!=jA{)PypGZ zR?K~tt8JzL^!_b^Qnq-(WF;+r8C|RkeKv?a{Y z#_5EHB(_1#56Md^aJb0J+Nx(q%BXkUw^375ck5!`u`s^ldmJGjHb%*)Z z0l-Bq&Ho2l0)@t6Mql?X^yi}*i>a@^k!{{WBbEo|b$aNRLh$8e0TMwP|6Np*`A z++eEAt17LQ0;Z5@+RJGm#9R`J4k4@qlTbkgDY1!52ECbRUp`OrMzGKX&;I~lVpUMa zwVXi^4E@Bk8&YBE4Oa_ly^6Z5_5)#SMOC$F-^+&t^OBY9ZD037Ll5>CpX7OCjO?dp zmSW(kbhQxN4lBt=y?>_L3CSe-$QuEt{{Ud$4YRv=%pxGz#p-k;L0aD@24r1VBHpQj znVPOGh0&6VV4lPEA`X^6rz&2w)voiH6->Gqrj80DXO_UjV$!UC{_GHFxU*yr9WIF5 zE}qN<*DRXE1zFdZ>cj#FOC!X7&4N^^0}vGY+C+bA7IUu^3&H zusQs$F)dZd)Z1iHrn))<{{Rp>s)yVH5UkFY;MAq}#|^U@g`{N-*K-5;EUvkY$2tE1 zkR@6$0%HkP(P_Rx+WS3ygp7pc)`R8nmkt12uctaj0cB?D`vB168(AOdwe}u!LgWpa z+NKl(y69OZ z?dA3@wghR)E|^4AJ(2n)YS*yesgV-6l&WIZ#n0nX**5n`FrgZ)(uJcf;Dx$1m>DF9 zU4smE&)*odVq0ij`2Ci|OEd!lK+v|2>oIQMS09xvYS`n?io*r7I>*`Phh#@zS#Sl9 z*c&;kMn#Lsa#cvRm)0V`hH)!SoJG+ZBs<6vhIa@LF;F+;E}`>g=@JPi2RqV1D(1#v zNqa~GpTIu8#R9N9Cka%NodHsw)Me5Rc3KT5+~zA_ROL4MVUtI-9*9+ift!@8nGn`I zApmd)t3OEOxuxbH;nlH>ywt1i!H@p{*^8g_#Xo$B?F_ZJTjOzXX!AMtYDND5s5)kv z`^GQnFszf?{Id6i^Z*Sq=A0!ug7RYhet$`aH{04bLO0eOI%unrb}_XvV)nu=9*>2B>L3p#KVV7q-HQ&P_-y(i|)o^t$-Bi)4jnzO%XtzWlg>#q)BCMBFI0UylJSJera+On+F&SZl4Xv>M08D8j z4aS7~EW-NPEpto)<*QAw6eaRUF9as7IQ?co5z*K8GIxJ96otbm(wCj$57t_-Ww)f2 zRRnT3985qj4IzC1DP5=7bD&V$Q1S#d4=i-b258J6Q9ELe){Sbx?5M!+2JC>T&mv1` zH7il+YnK1`z7Y3YKI4m0*;o1l%;dk#r)^fxNMT46rlsQ)7gxbZ$_MTt zw8C3?$a-QMI!IPncdf%X99M_BuL!lCi+HVy433aOt5TkWNYT~AQgBy@V-}i)EwbdR zzo`9sG>4aB>N7uqERL8#(5@(lA4V23ntU$CJt{jL!0l0COHiSJ&(@ZD^Z{&A%s+47nR0vj?3X8D1W#&_A z_AEF{Bx)?#qMrW%(q;941JEEufrg)XDSdfr?xaVRqxJ4JPPBb`R-B zjgb{}EW@luBWY%duZPi?K_gdfdHQ5H^fwFqeMK(86%Oam`hpoqUqM!$jKnVq-3|lx zC^7&skg(B_F@Y;qfv6O%bd@j#h;AGQv<On z$w&6T!X{3@!s+TT0s@W?nScqX1Pl7H3k8jc1*k%*N-9#^t$c>s`dL^j%D??bg1eI_ z%VBJ;HqHB%?xde3?NL2sUjV`a#9zTVsN1_Z$U2v9pRfQq&dogd&HLn5mJr z&%{NE3&8mcis+VxH#Xx{aX_UqIE0i3%*r_xSelzGELl&r5!>7mVu1`KXw_a%!IZWY z*eM?%R{(CUf$Q*&AZW0qU59O%u9b@f%^8f*=5e|P>58H@L;*i`yn&ezD_Cy+m@*F2I92}M z`w@{qx42)4YNFI@O#sV2C7S&_K0;^llm<*P*bg>cnzr#x>X-%hY|U!r^4)_M$Sm0` zq` za=#*%pCVa6@}(uTaWwUa^-{08(&1_}N^p!F9!kmTBrBU#u|@5}51i=&w(Ah3s7Cvf z8p#0q5UMFd(HXCog_l1F=PturZNF3ndb0Kv{{VzNWk?E-4HepEC_)5e?V|qx17a3f zreIm3*Q{@_E^|8rG&Ukj(b`M!5Ar~woW0Duz^Dp))PNNAyd&o&m)M+qiN%Qa4jZ&~ zZ=Qtcz?Dk@Ep(%UWzQ- z5CpRzAL%VBMKWijVm<5(X!xx8A!RqA89 z4uAP`0W<)r;Qappam8RjrP`GS7UNOK`UkG1oM|7CmKzkdjwlT{?n^~#RoK~ew($7_ zd4-&n0Xc|Lt@067{{VN8-x%d;F;o2?C&K8q+_8cHrMz%pBPV{Ai>@O0r7#mGbSkm? zFZ*uYI}Q9hflnJFBidX+0Np~@6npKv0C-(n)Lf9y$wSoHJk); zatC@B_}sP40?zGQdaPs}GkI%<#oE_t{ZbP9=&7idIG}?a-(8 z`hG&5S1+VES1c{=1Ze*N(g{(Z%R<_SYj=#q848D-N06sH5RhUH5}MXHE?UH1#f-GJ zt8o&rXDHQCOEx117IQn#Wj~e_kFkO1UE<~S!|cMsfNT)OwA~9(@RYSBX$vuA1!l<+ zS_Au((p;kBQzn(N45gnohZhQfev1p8tI5-s2&qGP`qUG;R1{Xj`hy)V^1EP(d@lb0 zU^Z8UA{Yq0KzVYS7(T!qYSs#Ltyy|DtAR-J*id|TT2;n z7lJH(^W@_-QYRSTr#C6+Fia}{0FsEDQy>ovth8UccHGK(P|_tN#Fm%m7i5 z`EM+Um{^zNaqJbj$8_Djmc|oWM)6Xr;~iD6VD<^AcWP}eJ7Oi5PYF-nYXwtB@P;7* z6&S*$ZA-K4s}NXa_(s%)15NCfzd0L9X(^~*aSkcOnh;sSup7++!2|k@;HU$F)MgWG zZXX1{z@@>U{7gU*!aew+3sQsN*6xj~R5uN?kIQG`PiIRGg);vDl2TVjR+@^G zi4N+7EQig_&st2`V-3LpM%H1!JeP5Tz*F@P3%T|j4Ng5z*UPK30bI_WeUP)Qi*ZJMCpwh zFZ{fzk5*FqDCE_{>jceQZmZaMH@iIh^?=9|U~LGzXk0C)*thD4Rmy+k8Gg$$q+D8R z;@atUj>nVjiX~<{GL79DPsojBAL*#_sb;JB@30s6un-wcvkoXD2rl4qR6(Kg4~K33bup&o-uaRig$ z<{MfEAF(S%hL!G!EHbL9O|ewI=mSSf^Ndq{!s&0);RM>-ZZTf2h^$nQ6*u$+-auF^ zDnvmOYuPQ8MH68uwUUn~nA+$ZLJUP76}m5nAgHMUg?=xIaa*DO0M=kP4+|g!e0gI~ zBwE(0+A));sIBEC-vP&q%T0%60Lko$U)+0>_AOI_msasknt38ZeW#~ClkLf9v zj;>k(d@|~&jC_FFR4!r+>!nW4qS1y^!B`+(Yh)EYc_#bwobS4DJWzVGwA; zs1nc{jMob87!`xA#s-^CqR<5^UPA;CF>p`_%H$RQ0E7;Lf~Alw6cZIP=~SwSCJU*F z5NAKJFvoj{vQNx43M#X62Q8sfJ$}z278wS7 zV`$4*)HLaMXR+Z>yGkGsw77JD*oCNe0b%9ECg?;00T>b}(ywr9S|BN3 z?3Pdnn_-CNEyY!ROevE@5y+!4-6|@LuAk~}WC5by#HvNbF9>Nw&63_4y8VylLcIKv z$!o30fdys?(EiKhJ8MCgCW(^DEg&i@yM2}=h7&G7>lm+wf*1Ob5hgWjcez0-dE^EN zT5w5Dp-++fE6vIwRl1`PE-9-QQPm+g?p|2HuE?SEziL^)1FMDlL%E{yrI|T1Of^X; zA=ZL58Ut{9_(cnIvC4)Lw=im;1ZE?oUZA%@vc=>->^g;3m;V454gwhTb;#&evTp1V zRc3)~Q$iXMLwUc6gdkr>U&v@nTLG_J!)8Ev0LaD0;`S-#zfQ{Ms2CgMgC-2uACZ$0 zBTp4IZz5MZ>Jnnd3nC!`4*3TiJN8r&Hwm?@+vGA43XngKen5q#8vxE%Q0WaC2$&JN zV8;}59Vm7;q~{AC4D$Y#a60*2gsM$E{_k7A)!o{{V2B=-7@&nu(AF6D{XA z709aU*;ya4(KXCK6FJk=HZfbq)nN#CevMF#2~y(LFOg;BLIApd(oMQ!m})A}FsPkM z*FR!?P1ORD<+~P$7lOKz4*2I`89tz^fN~gWzC{GdX2z}A_@bS}m*g{}hWzhYveQ6AM%EF07Xss)F`gjLIL zr-zYvGLI+B^O-;qDCsN5*bP;njvwewO469zYd@l9kC431O8)?$iKuF~Jy%$`_P6Qk z5a|@gGi_NJRU3tvZ-Ia}AdNcj`l)Ml9Pu~9e1W!Vy(eXIR7AnqGudxVKzv)tbXMDgzY#@E4H4ZBDWLz!XQ}x08#Ctm;FoQNIxT(&t+hrLS0S_uBAt8 zG`U3!>5qwOG-OB*O;l=W8Vp!$E}XtVxm4J_e{#YEV;G)_0Mbx|B7;`%^(mj{3luRx z=;zq@L4@RBfyQPOANdl2N~07-YHjvBzS~4BTiqr#GTk#hMvUAUVUrWjV`NM)T)pu7 zE%pKd%J$~7fiJi0pyow_I0PwT3lWgos98{@NqH_?Y-?3j2UoNU#xjQZNw`A&Hw^nR zMxXpbX;3A)BvhfAUH<@<5)G&s!MiFxpn}_`Bq0lQv+`+VJ38u8)Tq`8e)$i~?SXgj ziW(M&?!%m^YM>}|Vt@@Sx@b@ZO=pDBi)YW@*+elW1L^iK3)WWe1Tna?xkAoin6w8p z50i?N2-BbHqToOmbN*$RLN5ZnWh8Mu)!0h{pr6qUp^g$FLV)lYj6}r*c@Jm>sm{#k zVsOr?<|ymWAc-XfEoJ4frR>ZK*U*&M#&)stYLAT=0+5uStJEAh$~B#KrC+Jx!A2!sVvI#(BVw zG?O!R)))dOLjo$t{{RT#T2KYr>3UR;i#AE20bEQk*`=213`%Su-++Oue;G zdG4;5sx?q+L%VotHEbQq8mpEd46&JUH#pG_m| zv@;X`0Af+yn<1W#KieIWw(EU_cecJ?q`tlVW3 zI2lS-5x*k2pdZ2-<5&ml1XYosc?oh3Q-30MxSMvR2stSZH4y=^F@G6iMkP>Yuk=8O zJh`AGsFn`y4G<4%Q04o4me=~5gFOqUV^cA3oP*n#dl9Inp#^MnbAT`h5oRb>48?%O z%iY!@FbejwEIF!b1T1@SH6}rJl@~TQx3Z{#pQKns`5T6(_W-{(HxNaqUd*jl@qrn0 z2*4n3+vKc9LrhKKY@(#1URXR2@l82S(bfRk;#eVkxRI!JZlW&Qep4AO%F?KL6;$nI zxiwsZda0Tbf$Rje@Si9^I)i1m1Q9wntlTTp*c!7@&MekFjITEaiGdiP;z21tW(z@y zgYcO9%9%g-iE4&*UWiRqHQE0F^p6l=7e-rjV_sow7^aHkN|2R^1>8b_G7W-P+e25v z#jIdixo9|0gK749gJFNRC88luS92ATV1ikE9Ropcq)9?hyuejgrZ#}=PkfXYB{UkE zMM4s)gU_`HAfZ-)ci`aoMS(y{zEB2Rx2y^7MdTGJZ#A3%mNmCB(Cs#l#a(jq5)fnx zSq%n`QN z3HvTQ>ax`>HiO-qflvWuzF4=0b^)e0&gRy1{i$LglKW>ke#DJ1xFG54Gc_tYCC+1F zhRyDKP3;dYcAUSACvb}*gas)BBtE{8@Bjc6`vns0zsNfIGJ+!5DcwWh>90OP9wxLZ zGHjjEL1Mj(1XA1DN=C58-~j@fJe05lQsH=eF4z+-62xz5YZHZif)usryn~TFuo?=b z@-IJ{*M?Ws#+y~bP_Bx`Tc)5mGRhjfzMrr^tW#+YZ8~lj7-JJxP&}<3rd)|Tr~t*#mZ4)HG!LyCsQX?xk`RNWj%`miGzLD6-VwmmJvqB z0gZ?dvhk8s2lpz^6blMKCoW*D+X}St3RzPkG6JYh0FZUBq`EA4VqXQ*?-)cy5~aDQ z`#?CLf)`+AHFFO_1hHJGrW%^e8-|E+#YX0sd6t%~mq#BWGbY$w!6>0tEohdnhM}`y zX>Owndlo7w6B~Pe#ek*v$W)ZF)(HeCIR+qvR+Y(ZR|Gm`6~I!miZ0N_`6-&i3OFz> zESH_jQ$Eb{^((D;On-Uu{un7zKrX2Zf*ONuhmO*WD*PL}ysY|Y743@t`g z&6~u;hyv^$MG~hwV+f^Mh9J-&a-dvGu9^VpH1J?lNUGaU$!s%4Q+tk`rs=57uI$Rw z)1)fSlKZUM^_F-Q?07S{r7*P(4c$!q26QTR4l$aKskU1q$dzwKm}mM++Y7Umx=otu z83s>uiD@A(hLc$u8ZsNUH^4}T{Y)SURVZ08l&Pv$;D}ET`;|Hgpxj+~lGxf5Ot|7RIxP03@LHhff1*$c zk)YJD8>;i65Wpy^^5P4klQoK9rl1#KngCP}u!+-4jFT^>W)@lrf~h4{5z{C~y47MA zMWxk~pym59%9;&ES94P7-M~?Fx;1i$MB=i+Obp@(9G9@DDl1Xb53ddxlbgur?4lGD zYtF=o<99{)!zj`B4nHDbr4k88u@gvXWo8!vZHPcNq4+{|W4ie%V5TNA+$(Ko^%#vU zy1qk}LkQCarcgrv0G>uu+4~QOHnu3Q^{SUEw?Y*Jyqdzk!~kE>8gIa2oZCv}fwW8> z;J6(9iAu16U~k<=rr2Twczu-27Rp3QpsGwt)kk3Q!`MRlB|~d*tIM1*dXZg|u_cnc zjd1?}anhyQsDMgl%c2zqg*s{2ECI6ZgH8HGh6uXG z++g3}7R3~z2QGDNB9kCYFzgzjmnWnaahx$Kz?eN@fg0Epo|C_;PO~@@70kqY725`& zjOj~Xu^t~_(l9}k&;?stVp@P|vL%f^sSKB69jG+8D1wkDzq4YZ2v^pi4>6& z^nf@zLgATC#iC-NR5q8`WA#i_BvnLJc0)CtM8}1U%+{gJLA--iy6_#FUeJ0ns7loT z0O+FL2HR{b50P*hRHFQ%w$f;+WtH+KK?Ha(J+wz_$OJ-ZR!kM-#Rc(!GVQ2#0Q{P* z)N&del9zk18!%VM)xp`svg_#ZoIq(J)@1!A5=6aJIHMX0UeWRiF?VmR`wZEUlW-|A zD6cZYaHVafJ;3cUQ z1u+ENb>Lzkj}1y16&uPf1YDwph)&lqPju2{m<_5`yNy(IF3{`4FmI#iOq_O`11~BQ1Uywl9&*A_K!;$l4 zTpCtk!WcH~1=FN*5WJO*^$gj94q`3!#mqNQ{oW6+X6&OJmtmjqj*|{xm5wwWk&FO4 zY8DP4GFNaRSEj-$`f6c}Dji{NL1_)49mU0LF&`C7L)g9ijC|@1z;DgQz&j1YgC2;y z+hFoy6?qt23gXMDRv|32j!jWkm2*l?7oW~B2nr3G1Loy4YDAj*)2eUmV<^CHfPYNYC57cg|G4M=o5K4}ik>VpI%2#n{1%j`Q zLlTBbEKqcoAXRJ0XJx(-fUp7x3%Y|P@Fk0ode7LiqV+Nm`3&Mbp*T8#+X5Z+OCr(z zOriQPHMrKaLqM4cDB=L*YzWZ^uyDXcj^!;-h^a6s`!uOxQy?Ius2Mnmi=AO@!2O6cjEMd;b7|$nJoa_WJ$;2x=F_IButvmtLEuTMCkz ztxSP=V>ZS$ld`yotquTy%K;1dGbW9_m}?OjMp^+2Ql;fYZ7cD}<{@MWK{QtF_B*_g zZHQ?z$T!0(0@bO;Fp}gV44@nE?8R#;TM8n)W-1NTq5l9eI_ESAI|uZGK{}`xoK}co zvyfh>U5_;|n&um%oUfLqyhjksox7X5RdO$+Z);c(k#Z}km!zvoSPKH`{EF~Wiok>i zK=Q;vXaq%+HJD=7dOU{77A+UZD0L+t_{C9hH<-2s&`KhpG3l3eH(%7dfXV|hgcI&b zQFOPgUo0^867_NWI4B-MsI0<8!N@nO)C5d!u22Gr>^Kdnao7=vZVgsPOt8B^8B>oK z3_Xq?e1Nbl&W0_4DM2|h_=38-nrk9-1k)}erR&lLS+Y~4R)qbO7eMru(iJtFC|NC$O?aohChNZpuk z=pX1oYh%=^jX-+D4WRBY1q8LWuSsbE{{RR;76!8llz1d9SawK&Y=nf}a#rD7NKXx@ z!Kwhc5>--~Qp)hon7xiO`i|1Tc>*^MSEXTthFEqq;=&M*A0VO(gks2Ii&9JR(9yC!P8}Nb=P#?03t!k*t84NHclRv3ZdblMou^gB}fr=Aj zil0y*@FMbvH$RL8vR@cB)VULJkeOoWaW9k`!hLlexH94r$v_xoPLMKbmefM+xHi_x z+_urlw|`(ita=v>i7klNuw12QFfg{FhJ7K}5~|ARpXS39!JvmMOsVjC{gy4Mm~4Uo z4MmIM#l=9&$_!RXbGD&TqV!A!n)Yg01!d$6vVVDVC>LifKiCrBox?3 z>}WYNiiHxv!v6rtiAG6U(Q-#`7l~Y1twK9q4L9rzn1Y_M21!c>$O^*Rs7J#SGY0<0 zChs!F&2CoOGzqzFmsG%0aRQjF8{f$1Fyxm(0xEPR4Z>b9V6WwoE?wxJ!MN603oI?A zi7LwpsCujJQmQb8``SqGq`)JHfTr~k=*j~Q7K<%UcmjQlMWXk#uyYR`|?nM zWObw1RzJsMg(cu(BH5sZrR|!^BN-<$u?0GYvLyfx&ak`CGpRzu1!@tB_(yX>HK3Mh zrpwN*5BwlDkAf zqTVt4M0!n{C=s}}>eOwjQVD1>2H8LhX{eY(^@6u*@LnUg3g@s45TPwQ)CtrHlqI*} zh-Uu)VPq;=(h-zGs*S2w(_={=nig3Jc`_uUOyRVSL1Y9iL$oS+l-1TEZYZU<$zu|t*ZkyeZR zIDiJatj(0mU@_}oRqHUvumtG@u-MC?- zyqTy#3`I-BlH#s_wQ-;Xr7~qBMM=SU`vrxo1^0~sWg6H93JVL)v?`>yB@3n)R(DOX ztis$R#|0g;%27f@Xe>gsaVF@ss0>}3VP@hhGB%WZ3B>$jwBU9bK?pt}z^v6r!;_3k zk5!Z|HVpbfrSVj2pfU(87L726wPHGo7ZE9HsZzx>x+29w%SHeu%t>2BPCEs}v?%~L zuM6cw>8Zn5mfv%5w1;GLbu#3aUc~108aRR|68LCWk;qcuBChZPkV{LbX{)wq)F!Im z=>Da6A7j93se@*%*JDD*Pmo3{4NX7UkK5o%2(+Yd#VOf=F)oTx@?j3<1=b^hn4&a< z2S^7=+{{W~u5D@Ty3^2UGAVvg&7E1_>sq$bNVU#oECSBY*S)Kq=MlG_0cJmq| zY=>MhaEK|HrKZRi&=Dnogi-tuY7bycyp6GjGJYP!b6o6&R9(9wAgh%;gDZj21;&(1 znCWU%VrIXws8uD%$uA;{-L9onuazz7YBW%~VnmHJ#8h>uu0ODpOzaytne`P0gO|u9 z=Gi+LT@7cD7)jt!%=f*+;mURl0d~MXP9KodC?np#tPmC-D^oE^08yu4iz#$NYbnh% zxp5Lym{;-7D=rGc>m*b;b%9mh{O`21qu$3BMIuhX{5NBD0 zAw}{XwOSikj$kE1EGV&7_BCRzkD7``b6$jG*BB@3H0NA-OtGXsraBc-$5klqI zRR--nm9;L^Oi2pVK({tLy1kXnIv9;nVlrH;LAuZyCKE4`iaw!W4OVO9CkF*3TD^u% zdx$S{CZPDN5aJ>zeU7#*(8dKF^%=Grs|+S3LnGuyG-XnfrV&|S%5k`KK%mnKa#AL4 zIKv7Mmu0}*<}n*FVv&7k__sz}+Z7ZUerxaXL{y{;oF$vTB{g(zxI{@Qe^Vo5fC_I2 z*7r$N`~cNP1$5j{1G4`B$X|WS&0tz^gG&PH6&SOy0x?KY;t&OF@H zW)4RbH)Z<~&fKw(p+qRXRLxDoH0r7*?HZ`Yq!9aFj3}bTOh%m4r zv1cG&hb3Jzb`h@JCBP0U!5L#LCuySGWQU+u%{K)?$TG;q0aO$%xGNpiZHVBM`4*xD(G*S82#CX`SiZ|#g6%EX zgB^@Z0hK}IS7ApF$SHuH3bw%uBv2QH!Ev_$AF&RJP}CB1MOSIrSYqO} zahPD1D%m)rACOB;jN7lUpx*nF2EYeUnh#Xmq0n5QEo2l(BY;e*hRQTv5U80GH8;4$|A5q$R+cRSB60y<78;k(tJAs;8ISeYCLcf*M~8-qpwml5o&L)gM&;g+Ac-!jiGUX_V*;H2|^ z+)}Hd*NnSAsak4zb^ib%TK@o~W4`FqyizhSA1-|VYIjmzh?AN}QpP~UNi7Zc45 zrzzeem51a7DF9MazCfn`0H{|nr1=4Fv8d_n0W|JxTbKR|3L1g1mPJBVI~Qm$*36QtJ7^j;#p0?Q^A*fc&c2#Qxh7rBXsTX5Pd z1R1c7ITi^j8U!3%W>SDcTBf?l#}4NU!IA+M>V5o{KrJ>)w1Rw#vu#sw0&L{Bbfyt5 zc43QD-aQKYa0Iq)=K72mnuGAHo$$bJDvaXkZHhJ<%z8njSU{FtLeN|C7Xfa?N+e;( zSyr}fhN^b*E9{lV0?D>up@(vebNNIe0mM}WW+wed6c|Cl3_>>o2;&>EsPV_iUS{Cv ztQUHTwvk4&5q7T|s)m7ji$X5IhM`)}qKL%ItRY|6ic?IH`1S%~pRvxJkQqCQH4UNA zIhoO9!2ygb!d<7y2QTw7+Xc_}0hEDXWhe)MhFAbprzM|I;E7qx3ogiGvZA~VX$TrL zLI?3+VhNDBiY1Ipy9ok~NiWcV03#58f5CC;E4Tr>j9vc#Qy#^kZ!k=|)@IFiQLF5+ zF1My09^zd$OlE8GaJB|2BHqmzw0(f2<>6<-0g8X@GJ0QL#h=qMq3+2=4G|tj){Z7h zq?LhdPzY_N8&1^k)*U9`EmZ-9gMeLP8&$T9#+Y0}gB>+$R8lc;(t3p#W~vL0U;=`d zQqvlL2n~v)jw>xeMX!-yFQl|N6R`^5aRCD)GeOG4q)vzsxk#Pv5kkbVmPvt`$eG3v z?BGk3Qr>pJx!B?hd4i&GQ$vUe3y?X{EoG5+DUqD;WxscDh-E=Qv~a0{E{sNa!I;l| z&X{9m?8uOYjikADd^Zchh6qKwVaSgG*_Q=jRX`vXPd$3k60B_rx+&MKGyNZ)ms7UfcdWkUk1 zV&Wpxz{4o-YND(&RhY*aafmf@vKc^JB)995~=l6mltq37}_jCtVy_Y{{Usdg1R!x z%ZP(hQ!FJQTq(HP;6CPmxHS;c<|>PiR;yB_Tmk|sy&=YVfU6Z8SW3Wd9gFrd z?vN$1SXKVRk2KV6jY9o`a%ZYxw6aVmScOckU$bgzT(vz@5X3fRgMomJ>OoDpfK!ol zuOz_vhPH@Wg;h};*0dar-663Fmuy)^W(&j_u=FN02D})R@0cK1fRrveBOcZM$Ps`_ zhn*8>Ly$NUW_I8SRgqELr)8B8*BV?HQ=IM?)df^7rd#AdCS_HygbMM90&WfL6h&B| zrZ>`4)=&&|5LubKf-1Wg@l%XT%F<#k5s%|?DrxHHgibVWQo8uDg{f<2LND)(fz)G! zH}FOSR0JrchAIIQtZOp@p$T0|I9Un>btXWUprQ4Y7ZL?N>5lcqKp}H>kQx@b2ne;s zaHh4YB&IM^Wy3&XD@8hn3n~5!Vq~H=#YV9VNOH9oAu>t}sHYhQpYkQDKf?}HE8@6} zVg{W?s7#p9Q7srifw8~ex{=Vh;25$i3>f4 zB?=YtxCUHK`3{-zk!~28(~yKv(%AUP$w@|;zre8@MRWjkp@t~Cu<5Q}FX}B$qNZlQR0<<9&9<0Pw$HM-=JspMykZMniEs{0U6+xJHkKJQablK4* zC8her7`8yGAeU6JQo`|+<*s=G;O{X~ynBwJxp`*~A^@R}xhc&-pW%o^5*I@Qmb-Q# zR{89jlrFjS|zf{FaRQuD$^&7bJ-YyRz@J{xkF%gi64qpfEEx2NT%%(V3sJN zEU2upCRGUk0GdC)eVF!Sh7?9%bRv+!2;$ikg+KwqVL34{P_O}r4DW@}&yn;p{@9zt zG9W2@y<(~MTA(qkcQ?G5fC9qeREO-UXAoerHJ@f!Kqxl=nHrdYaVzr)RA7!9 zi+WUM8krHeE1{xi^@K2lbiwONF$`B&7@DduDKFR+9D;-`wj*uOu?1pNP{RWQL|TG- zQ2_vB)Rt&syzJC+t7Up2vMRh7B|4{p9wNjso1ClaO{ z*mx#dActRDroW=iaqszMrlcm*kAysAa0OWQT6DlTM`J855ad6dAyn_HC%tXLk1Yen zTv}^xwDCI)gHCOQ1P_jqA~{KK{*g6C)0)rz5YW^O=h(%Vr&YKnpBX_VwgwNqQWhg+ z%v-4RN(JE&gwjjv!($748H!ZN6rxzTx)#G8k&#eTEBIw9nTO;ZDWwSJ&$lacP7MrG zsCrUrIyKa7cCZs-x{glD5lUt8m_f*tAmtg6K}m`u7%;w(3mP4jgqy^r8zPKlu!_)) zkcuki(%P>nX!i`TKXJxb5o{7!Gpti8qMOU2TB7R!6_rT|Maw5O>jwzOQF9w^;+ukj z2*SeE3ykgwnNExjQHRz>DrKTF>P4lCsHaxeEEcw3AZus~mxyFJ)*&Raj~PJP5YJ9( zd;1xKD7(u!sK$LvvVeR@l8P`~Yrh6c?7M@PL+qwP8wpcwc`utn(IdV>-Hu&AW)lJ> zTZ3SsQ&J)k?Z@|6n3KYsHv*Jq08o||jzB1TU_h{|l-Vu-C<5P!rP*2@0?U=gY%1=Wq^zsS`>k%)%P z$}|B3u_`sabYV|%F;2yd7vUFi&8o*K_RM8x=>~GE(NiK+9sQN-8r!rWgOH%w^d&Q) z!eM%>{-TNo(aF!)Q)ai4>wXN?w=7Yevq&~|8AaS<^@!sqlI6re7tVj%2~Z4HK`2dJ z2l=%wC^cFy<`q(gNFCO_B~t)!%w(tGF*&u%P|N#2NHw`*(^Bgq`2v9Q5xQKoH93fG z_Zuy;t)OG<6NpUiK*K0a!*d$UHZaO8t}Xzh3ciU_(hcZ{(^@b~G*?kt0yrc5Y|XG) z6SBh*U;w2+TEAX@h%K$h1^pAs2B1SiGkVPkNTy}1t|MHW`4;V;NNtFtD)P2gC(Rq3 zi7~LI1vQ0;Y;xjKUf>oVD%`Ou<@)~UTmsg`_AHJr(H~ zDWG!}UC|;Pv9m;AWT{&{8C?uaMZv_4x-uo@PaC87Df9TcD3UBNh#2JRKF73Qkd&to zQAk(VBQxnSxsunhdIB*6ebjDHP(QM5wRM4DU>L0$pGARdh0@jm$+I$)#@d7^27UPw z1!&w(!!F&${{V)u?dVE)0%I8E+3<)mE(fV;K(-y?@gjR<5SVO80S!@x9#AA*$}xQ- zfUNs6KDjf9dMw{r^`QhCxU-`d@hNp*7?bf~ZQ;^AuYH6A`+!iYe~dWU#jYv$$jT7{ zK{SvvHDxy_)?WrA>ZHjJa*c4E%I)l_eX)SJ+3pEf3`)ns3T5kHw&2Zuj*$>Kws~TG zC{M!-uf+@h0AO%?q!wR+yU`q49j7U`{}EUI@DA6bw3HY07itq9LRk!YGklN~owdxY{7GxO~Dftgs;l z6=pcJK??eT6wY!;xPZ8iXylD<^cjkVG{pY^JuZ=KP_JPw0?=fHL!AoNk3=9LcJ5NBgwkV{)MJC!;^Lh1;tRv~4+qOmazQVCL*QzMKg%a5pmTFf*7vme0% zMvR5FP9`0~wU(zeWj%}zXkZXW_`2qBF?S5VY`s_Uf5Vyb9z*s~U?6#M1z~nAp!+tB zz;v?KR#d6J#$2^zyKDph0Q?F_^Csa|NLl$6BCNJ9hvX=Y5q4@8H3IM0D_fDOZXuSs zY7vqVnNmgwSAtl=O222PlEB&sj=hofw_d8QV5wGFP?x5-5qpIXDHU1Ote(Z>Mu5t` zPDj}y8$yvDPxwkgT5W}7H5#k^6%Q=-s=E7d3K5*p+m(3Cdf#&2Mi~53R@5=wQR-Ab$Nn?z^!?JPzg{Fgsz8D$`Gs!ncBp$enMl~ zl#nJ+!c#8Lq!X~wSW|Oza{8ATF_t@s4wr0t;{f{+1;GyMQpE<{Hz<>7hFKOdmIFnD z7!@325gVDfiCZWdaxz=`a*14l6f)i0DOGi;RlI|kQJPRO&LoV(eV)owu6#=Z&5%}0 z<;MZS2loa7P>X2Fou~n9vaUb|CQ%~p?if_TfoT;s7}RMlAgX1O>RB#a+_`^a3tZxD zQUbec`1>i!fB6_Qlwbb<#R%a30ufOzg$@%gNrt>KiHd=A77 z?J|Xct)Rc64STLJZy;dQ4$J8WTbL9oMwN_Cw@ z*I@=L)wzUqlqkcJ2nXzjmKtJABQ!H349R}(Y?A)~LM2H_Dk02Ssh#>nBC(lb5;hRF zwb+*|6A>bcBLFn-*r>pO5mrlY$-kpeq|ySDai(-LEBKlQ25DNN;LI~CfXq6@$L3r# z>|Mb$uy#1*J&&$TY=3`3UYFfLfd4n}{D0vW2=D<X4UNk9$#4qcGUd1-^O;0q z7&5F3SFSi{$qb0FRtr##H@8`o!7ZZUjPAnXS4I6;1M*)&uZ9Ks zkEb*6F!zkaNH?ev8FjH*;-U*3P+FeKM!w5pQS~ykfd*l))E+@k3^>XZLbrUs7+e(I zyssdbw)xt51(0$YeD~oyXjbNejp2VaQAB=DVQI(9@+932Ba;iPRLr{pv=KXW@Ofm+ zt}=kq5GDD$fKJ0=AylgLbc|#|ShO*1yEgv-sq7{&G?^fw(b5qETY)O_K#J>p4dPs8 z6EL$QVu=cGXsgisEW6x20VSGYw!pcNw8cVIV~Ev6wblOsB}*$D#cgH|^91QI)V5mTd$OLw3aT-% z`37LN;&tTF%(Q>95AZz4gO|7^TAIJ&>Rhis;4p25Zh1Aw@MLZhxRih&{{Yb}AlVi& z7P4U(9vxnk&AJs_@L9gY-_!EG&DqF5z00ne2gxr^cnslDnn4JA0g zSf~n$vQf2eQCy10hV%1mtWtyEZSJGZ|OT{kAQe4HLbNP72$bcUVx|$kyp{&5+K!JIWe!=HN|*|=5QM~_ zX)g*&7ntFsrLjiq#gdWgC1^=03rau!NU2$%MC}OOBQ)2LmZl`gmoCDb){)PKV5yrL zSuB8?Zi)$b`3VQeVRu-7NYn-wBxY3$Dq4lGpM+X?zy^dwM&+?qnAvkd3n-Y?Lz}^D zZl1N=AYzN(Q@i&3jBr|ZL*()d{mcw7ZfV2LXWHe04T1|S2!EQ zBiw5yN|vGYzukP5(HK!wqzOcj8@pz8kzA3hFWs=rl|w!iA-Nrsx>~n^OVy61ExoJ-FzTyoOtntmjP1XkA@^g5#7AzC~k&$~PBTV$pz6 zD#pWbQN*H+;q-+B0b6GS`bWGX?Oas-CT-D#$d}$x@MfokRXj}nS*c}LMuRH=-14B_SO+ZbN5F&Qwk`z{Sb{(cqF%H`25EriEY~6r(1O<{5?d2rCT@X7Q33GecMyjm z?qGb3kx*>`1;sA0MXg1Rsp(M@SZOJh3QFV}0S$zVDndw^AwXaBAQ3Qvu}nsa%`L4M zfnOvmhy5ZuQG?`-Q7ApaAsa=OU&uR)&7Z6i(I5j@m|VuNGkb+m$ikLgOXcJEI}(&8 zskwvr5TYedwGo@zcoqB??XP24)A-5SG{CeM3<}+lW&QqaY1~{E)HPls{xad3ugw1d z2!sPJv#90_5&RX20z*j@TjcXVZg=}`E zInXQ?Y?g|SNrNC%xC^L@XqTE;a#0l9X2uK<7O9e(`o|==2SfH4@gxGWKl)7I1xcJL zF5VOh$7O>3Q#gyO_J2-PJ4cBOF`}0rP-#M#FDWs0##Uceo7U6VN|r$yO7H9$4WxFv z`b@XhE`y8cM_6!rJQKz!a^6|9C`JDON?nxx`QAB(--&l4Y+qqX}Yf~m;(hO8NY-US&|0f z8j2PvV{FLGBXZ$}p(c^oKlIqT80O9D891^MVwgv$8m5vsDm6o-u2iGFCP}vAAC6p* zgNLw`lBXPuRW-;Et`vNfr4~JA1Q`I#BPK|D@fL=7QZQ<5z%dKi(r)40bQ)A(QLeyP zVGhR#*8P`2F*AUHRRJocogtZJW%6KvfL){H0G>ixrc;@S3$xAnGOwX_XkZ5APC`{-B9w3X`Zm z#mQEq`z%+F@LFHgS`f+nxPK!^xNQFb9GJrwM7ab*DTWf|FD-ut<1SpkkYK_Mthew$ zk4p7bVfsOGD97F=Q&moaq5zj*8(QonN?|fE00IUOJ1lTTiG*?T9ZL(VY#(B+c^<5R zUcqI4N^IC;$M!jA6;wMBfLJ&TT|k-$xp+duoQ~>j=96%~EnEh@rtjP)UEN&T+)+&` z@)bwI6@x{Wpo}8W{uTBq3S)g91g~35oHbLflHMD5sMTMOC5^HtdSan)5MTKct7aIK z+6)15gwU1&4n?fR#*;Hz0h!vDN0Nfb@bv*EqepTi6|*f77|Se^dR;$=qQL7VHCfsk z6w>6BHV{QbaEA12Nl%3r>Mc_DtLRI#`m)1eB~xr|?_@rmD2!AD5Id#C?lV>r;^v^C ze3LAk+$0w1D=Un{bcT~EtWRlhQIB`vOtuo0C2`4vE#iZU;gtI-In?BW{{Vz`O60UE z9LqC8gyv$0Rzp+c_>PymO@Ki_8o8;M_H3ZY+4Wnk|UMzs73i)l`0<+#lef zR=I+_nf5fB%(`4ac3Jiatl|C>8o6w`mlnT+4S$Irscc`ySml+M1&8pn1~J$bq|@;w z49Tx)fWxK4-CwU`PM|IGdXqHQJa*ROR8SJ4nc83{I z4Tg*q7R!^SeD6!=yeAW zM>!c9W$38XOt5hwRVE;!=?E^GMmIRe0>GS<>bZtu+Ny+FaD3ze4IRtsP$ps99yeEs zPK(Z?XxU3yiy8#NAxbD^A1)uyu*aojM7x1a#4+Tt4dxYni)1k=Ffbyamf4DCV@k$@ zFu^O(EF03zMr6E2IVMPS8Bz$$DAuc`g5D@09Tyg*B6i9#yCi5<7{j<%fRSlJf{-vo zX_qQ98zq*nZk3Eujq(Vikq%29Na?5|ox$kMJ8( zqi?lw{6)hthwD<5V%1Jdmo9;o{ueCDrXd0B$)orfGRT(=MeRN_DmeoW1QpoGf`cdtkL$^=f;_;*5B2^#9^rE;Wv?HcfNW7t#wwsFXI{pCZ}?0KpuFDhUJcxi z9BN!{pY{9lFp5O3hA7Wh7~FgVKCy6MRJlI>{FG!wRqGiKM=LS`F<-J< z4{1}m@v2Ie;aaIORZl?cUI48fFH8JvNS5o9*2@&E*wZWa>t1hYL%*H#ct zr}1sfFVPgk70|$e7jLGZc+x_}ibE06T#7U?1-D60j84X()}au{VW{hIvITPGL1;Xg zkW~^ZjzyMBO)Q}bkvDLRuxy-4)T{}F+6kf@aR?iLED($}2V~D+aA8z23Oi)HtPPQ` z6(N+CkT#~op!R4s!eZs1mJ+eI6g8IODhan?l)sSamy!W01%$ws{-tZO2MaFY4|=W? zi?j!F{elo=#YBS8BN0q>6)kOn)Tk+l5RBAB7a%o!Ed_yT4pPNKpoxXQ zi_BTU`2$$Ax&Yo%ky7V`ZK6;j05`d6a1Fl7Q&TLOSwJo=u|+pni<}e|2R2M!B7s1> zKsi!ihBU=4i?M@?ifJNZmzTIlFbDvQ=`=&ZTd|9FK}M;>tI@qctRw)A>8DX9C81Xq zS^OL>6Xig4m6=kdKs3-fbA;w#Vra}Yw?aa0fWS45Q61ju?Eld7vjwM&{P%aWT z*ev!LQ>@1PY?i&f5s6(eJ@+9_IYK?TU8(k3Q39dT7*d7(f+#|OdSL|Bh%;XjRlreY z9`XWqpee}KgvKAQgcnKyf2>DlBVIcFjk&GbS7YjAPJkQF5s#vv+sf5^g1HidkqXJI zk>d#kQ-%{S;0w258O{cXY1ndHrWXfiNsHzSP|i#3bWQk^F!&*B>}yP^h6B{XFl z;Br=V@-VOvv5ZAK)}V?vMtziv*)RQwTHwKE)tP&I&&Uy}r(zeSxs4MwhXNQ;;VW-R zN0A8FZc_m(HdQmnFGT|-Ye2GdVPe#|Afl48?5JzysbBj77uXAI!!pGaB($?B{8QQ+ zv4M3!?Wi}YeCZ5G*J1k%iMd!XQkXI0I7F! zflFclTM!B+=HjYqSh;Z&u^_sGD(2(7O1r7{8CwZ~f>muPl;l5vtxQxrWlW`w63XLA zWGqXBbYLw8&PFrjyPHIHVPeBk)lmJ5R7&BPFo~LiZI~@N)E1^?v@}A@2$JhlD>hKk z&M_!izu^L)ND@ha;(|Xj&F&c%$~xv45COp4xH9BiZTwtVX2B~Gpj02>m65gLZ*D?# z0;}nQn+i0bwYEy(gRL-XzMwi6bJ79OGiwk7SFk=KlC7{7I1c(5-HT;a7EtU^gs=_w zZCKRk{{Y~fei1Lo=hRVzhjGQU-^yN?eNkZl2AZXpcTC<)jnNGP&ffpPFU3WEoz zA-4xJzZ4sIg)U>}79ujxYcxR9-t17ijJqVYXg3Q3o-r!P18;HrG^yPrAP7XHgj^v< zFgJOw0$e( zO7(~j@GuZI5qLB7W63DQggD^>k^-%h2<05aOWWHr1YpB65dj*GAtL*@D{KXzh$@gU zi#ORyFu;lxGj9I?W*~6}=ph%Bx_<-w8zmaK@XEj7sh2kk#F-;NR-o0)BGpy=HHT;s zrX})=mQ@^PItlEk8qZFpK&q7}psbyVYa^=`Zi!+5<{~Ljuv(cBsHh&l#$#-|whUQn zhkchV75)Yf@o{4{-V)0H0MMI^^vU9IxB9wQPXM z{t2|wn|TCF%SvGUhJ_K53IT$IKrc}!Q}Sjc2b0N8wE$TIBD2T$8Fz8bVAaVMr@GD3U%wrbs(+b9%q6GC$q5z`7k?Tp>Hvob}9!` zfgA=yYXS0&8J`&x;HBfpZFDwVZy_6=nI<3z|`bjCYiV2mBAijZ=D z7gGUe(lOk^4J5(7%gU}vR6l~hjwKe@j_Lu_x0MnI0tnLOqff8^nXr*JvEGrze3^_~ zsKjfM?i90(st2w?evvEOwke3E+n83$xIu7+5uvBCkOKH%pCZeAmO!vo&j|<7fN8X@ zCW!_s45e-SJAi80^8FY)5YZbB*BO=At%M`D>HBFp{+0+tc2tX7xmBBsW)~*7pO8eT zD$T)zCE>%Rnbj1wo+0NWi_aB;pFNAq4kSlf-N6E>LTHG*$u?EwvrJqd6!KF5IVCRm zas{flE#Bb(Gn=c84yp;rG-#-x-W0YAHkI4<9+LP^3wVDUW=KH_#e^Ti9nS_iL8dK( zF+{;SWf;E5E69w8Dgx;GB?INu!BSf8YAU81`Vdi}l|G~6Zy{QwVqtOW%V%LLf}qT$ zoiR4qna^b^`b6T{EugR%%#~0EJ8hmdlF-Vv@gwDk$d=hy+^msIvIGjDqTamuX_P z0>Wk~k4tQ*-4DsR0$Y$qqY8f)P^iGQjwVdNS`fbmY(79=;)zuh3mIa*#gp3%(^!O{ zO*(L<+4-)=CGoh8IlkET*G4^5g#|w;sJDPXuFk8-rI>4YkBAjibE0}a$3U838j-6S zfD(~#kOxp~jv5wNF87{BrFu%oO>~B*Mib{CrOQ$|{+vzkK;%3l(o|Szw#F87w{)b% zM%ckXv3cK1XW07#ruZCKNm-1!_BmEpdYk0nS*UA36O$Rt$ofEXMp0#oFbI}vpl9sMZAC!DHcDkd#BD)Sth^I>=?9`_#9MN;1D2u4 z(JoNM*Vq6n4JsLKlhvA7R*6a(LS1STLn~$Evld_JRzel=2F~NvnW#W0O5xdk<@UfjnpiE1z5CUzOajV75oA68z#g* zfQetgEJ%aT;$(=vPlxg$3V*yFUJznl2H)B+q+6zlD{t^= zV8&p`7Zqr&V7fer$T{_7bO^9Qxfrq+l+cI+qRs1YZs6KsdRatwM=N%cz*wV^ z83@L#)yhUqz+b`-+oF%Y&4w=)EB%26GSkTLlO~n^026BueQBw`2@x$#(%PmyxMr z+u;#t#$Z9~EpL378)e6baH7g(s8<9s?IB`9a4bD?AH&eaQ$#RoD60Mo{x6U}MgaC7 z?iVH3u%>wr^SAMBRLnn+77-CfR8bYk%i$@5R^RZ4gu(_$F@f9=&FVr!dYE43K8vqdW?|4#rYg@Kt97lh5eo<$Q5U@ugKKvi(7vtX(|VQ zu$h36FLzN5E!&n>wW{XIlf@#a^lQ(?0wL&RmW+Q1{CJ$)SlAU+3qOcpA_y9l=&`Qv zxN|Y=6{NpGF@a*KhqhSG+)cG0N?(vdW;AIsS`T4V+e2l-S(qg`8H!brx|EAB!MlpR zrT!xh#Mt67GK#`ultKb3iD5AdYlNY8aIjh$QIv=}2x-~D2!nv?09B(X?oywG83z?M zWOD*RVfHmam^Blzs-+A7L4zWJ2#Q%OmKFH`l5Srt1gk3-*x0({rFvkZ$abPKA{sLs3%!|jVDeQ|`l3u^jL+$^EP%M?B=i!_L~`9^mW z2@CrvQij^)?^~N^i~NQ$-`OuKotbEnLWVW?7op8c$dqB0gM1 zR8|>C-3jib^^s&?N}yBb7qm154>J%3>@@U%P-aM{5+tJ#B9(+|q;q!<4)#m&AqO_@ zT+P~=+|mN8C$l(Uqet27N0}KVTq+u3pCG0iHz}S%3^sok1>_bLyPhxds(eA74a-B2 z!xthlF$|Mzh!H~^C82o=uAwXfTQ^Wj0}d=bwFm$h5Ny9AP(g{=h?%Q@#TF%AaRT!! zm+4WgV6eL|mZn;|o`L35!Cyn$>Yth$IbKOewb9ZU20OvCsC`Ahy47^w(Y zKgM!@BFg^&4N@p~E*g#wqJk_I3xzpJe;|SJC~Zy?$!AFzhLuycO8!IK719{&wL3BE z1f)O}nea_p3EBLhR(k2QPH3$@`aFMd$qvR>f-7+xI5{_f3NF8Zb765UdkN}DU zce3>s>{r}tG7{6MHR55N=s0QkH9ALgb102LB4&7Z&`)+4H1{hVm(fds@I(4uV+ zDzxt1;$r25jV(Qc0a|tVjVNJ-XKV%n|zW~!82 zfLT^>xY?Fkd`DtB+3FT)-qagDeS#|_(y+41DJu&7eG;%QQz=h zXP?6`QXrJX0<<#AWIKi9#!%9XqD@@Rkz0UR6>wJwcOF_pOmri;h8Z9NMzmp>xfYym zC_@pP8koI|sBlb6)G?75WpVrhVaVGwLkF-RHJO$mOQ>%iparGVxciJYRYs_DD+i&0 z(qwKJROSLiPVq~|*`tpGET5AIPfHwRwCSX!uoOa!pf;F9StJzTNMmhzB*u*2+q zS_+|7MAfb(;-`OxtYzvp-5G)bL27{y;>(;LWhy2o7&+uWOR@nF z<^5$~BK`j1S#D89-|W6xr(Uw|*Dl#g<8^p2?65ZJOf9-&QSZ_^PMLG*Nkcg*+ptP%1Xr~|tT9-_M3!b{`AsG`r1EHv0yrb%TW!tOC93Tq8 zRR#~pV8~PwP*XU!jAbSTR{0P%FbvMdVJ#?Q2`WEzEBHT$CPp8?I!i`!+S93+totmjxJd<+I~ue6VDyG4bv3Eho1Y9C#UUjz@&-+vn1Zo{sin7Fj6y6r!N?WSrdj`rQ%aXkt;?^siY<$e}sPY7QhS2V4IW{ETVH?B7fx& zG~eU+Au-qWQ3lO6MEzlgOXS6BG%m}9*{E?%%MIotP7%Bn`7R78q6V0nzO+O!ud>Gy zugI(pOANe5 z3OY@&fLJK<0YZUB?rSQb7Te?cj{fqlIdH5H#HR2-(j*WnHeP!c0GV1YEXY0o0O=OS z_EwRXN^IS3iM0O!n@^;oJ$38<0EDP1pxPny4n<(WO)NjExbj>C8fpIk+-N8j`1wSo zJjn+*c8VDpkUyT1#V3p3H>skc@BCNTNZY4&+qsBZ#%pLT9_f|-p`oI?<#{OXQZ7ek z=WLbg zp(KN9HM$YbRC6eEGL1~MOHX4My}V>0)j;Qmxnx++!M7&h79`wtRUdH(=d@0aZ~1ma8c&P0M~pO)Q8oTt+RU$zpmC3IHKh-CiN>mzS)hLl=fC zcLTOtXg3I@2@T9ZJYWnz!a?OxH=M>-$cA@XB}^j1*+Btq64p%L>K_5o6aN52c9Mda z!*Phv>I|!t%ZY~%@D}0?ZURE!#WLmp0QoT+RYy9~S4IM2Z?6IROyrr4RsR6eH989Z zzhO7JV=T4NnPG0nf-0@UFG4pY(>8{G#1*yx=xB!+_%On%xhclDq{r!#w(#YuOHw|>kp zOpcr6FtBIv6+4E!5EjRUN=T|BOBAnvJ}fMd|6S-Z*3WG z-(ciI_EPLSbyi#ZUP2b$(H7x0G0-Up(iwR&xYNVgM}xSmc$uP+0+PwbMkNJdS=Rna z2Q;N{fS*%|iwugtsuclSdK5axkmO4Eltg@bOoT{>1VaHsuu|D6i8RYgf|EMnrLy3a zP)T?E8J#gyFicgE3}D7RfP`X!FZsED#nxrZluLsR&KR&N5FhlHq}dmD8z7}geTEH` z$TSV7BET&6p;)Mt3=AxEvqQ!Y?O-Fnq(KK5F6E7G<_u0Oi`e=>ew5?nYVO$RVM$O4 zHBR7mYm%75aesgUHc$oBuG$#XM%7`cVY!NjRMo!9K&CciN*=GM4_>Y)9HdVyjZ`u2 zJ0C(`XI;1)>UJ2*l2)UADJFGrX}AK%GYIrZHB#1AdXgt;7QnnxG2vF#>I5(cAXySK zom{pFENmeu@i+Vyfbt;%h4)hYF@l_z*mEkJkQUJemoND5^I37iWd*3g>GUsBfgnLc zR7Yw*22p6)B~?9Rk61yEVti$NX|7C1^yXuN&0xar8y0xZ1Q+S4Ys;Kry_|5sERbF7 zB~1zy%zp$RiM&7yGC|2MziLhVU~nMSvWilHVJ^|#6LEZ?A+>}&Fx787!#YeHf4drM z0Mz*!3?oS5q6XU6=`awFIlP`|PAn9Vkts_9)YR*^~FAeL6CP!>7zj_6=yz z`pU}&%+#5<6WPZ8lTWg685mI#F*vfu;kWQg$j2k7r_^-ES7Vt` zb5OjtW<2_+ez1DMSto>lQx33TMt`}L1tzg&uCS_(2=ZjY!(cs52$!r~!eX77#Jr7j ze7Fn(Phh@US6F(O5qe2SGcvJH<@N!?V8`p^S)hc+O8g>I0Py$y zGMK1BpQU*h3yumS2$LXI%?9K{chl0YQTWbLUVLJWH8(9a^!qB=kZ7H+jG!kAHF0)D zFo4K_zR@!>!x(>LGF-Bv3Ofj~msPy>7D{R*ee*y(G0^~5I`!e*yV6@oI_}qJwahfaj4k) z9rCt@YLhhwor;djaP~xt6Qp9amb6Cec#5v8#jBWt1Cf^*!?M}PN?{>zIqV-r#I)-G zZY|<4ivvv|dGZt}X(=4X5|K2L;)1f#QtVh(<2e>eJ$@sA1rn1PL$P2z#R}!!2k90Y zi&-}@TNKl3F-)Z8i@0yec#Bi}h(N*iWekc~T?=4~VHkZE$4RG|8#y=D|x zEJQGQAIfw42#7~i_2T;p-TOC_PvS&UA}B=49|?NHAkqH-(hcU7{=!Q5_k0i9f__rT z&<@-Q0b2omvjGOk3Oz>NP>fAj@rh?lzZp>0lOwdST58tFDXc&%Ko9cN&nyJv^m!FE zbsj6yRIQz1gz=f~-_%G^_F?@X(k#Vo=itFA0F{5$M3MwT*Wpn>r55lcJyx*NJu`8J=jMO z#8V1UH@QP%6$eZo{{R6$g{LuZ{{X@D6Zo)Kzu*j#+cN(EiOMH51sfG*IrJB7zVbc3RJ4ityq9+mVGhst!Vi8*?mMTO30)n81SjX2b@< z3bI0+QM1T-;Fbc<6={akC3@xbzA=3ps_j#OwDunk0zJ&oMjAUT^% zK~2UiDqt2+zCy)qFOCnU$O$QV&$j8N6+PdBc2A?sww&R$KUj;_(X;d(Lz!EJWFo7% zc~?q`z%O3SC3P2i)#C2LY?p~ov${Pp*E4oMi%G#`zVFVhpmeoqdSt-E- z&%th5ou)L_UgL{~){S{@DsC?>mSz#_r3`FL70Hi)b*dQ@&r!=d&k_|S7|5OQ_>dq0 z1OEUE5Km1{9lrdHm;#heBw<=v$J8t;a95}fFBqxJ>Gm}NDnZ3`BCTCZ--Hl1ZUgtr z;{z9p)%Mq@!Vws3Np$QgoL|`3$isn>`xzC3=ZwZ1E|;wmlry-sD$zq7*JERuV>=dO z`L4@e62$xbQYRs1Qp_ch1qjK%vBH75F|pzqf;iHF3SpVAyo4(t-^iwwm@xxoZUP4S zxzVmeGg92Wlr%#0{F+E^*R0MHH5=qRz`(W!FAPSYDFvgD=NF7jt*}j-VNfq3+4eCs zTU#1AUZXnviHZ7cq)TY!E`qxm8Uqae%all}&`h0lO>s2?nGb7{gJU?&VcU4hQs3z6iPV(U)C2TXh*^CRNi*qfd2qw9Rp@II{i?W zx3J-?o=d{O-k{Y(aTIP_5v7!MAWaOVmG&46Z7AC-MKoc5)N-6$HGzxYl7$@?Yz2)` zMzS$3h+`46Kv+buNp2vU#lQ*6AMG&{U8a$Ilqx{A{{RodSkRFvM&*2e)N&M3zAHpv z2M2{X`ikpz@p?aFqblR;{{WD9mqa(Qpi}3v+_pOa&F3S*gJe6s+b??=@8&AKU|edq)+oQ4tAOTw=Ci*tTz3L zpeDyJjDPG(7$AgAb;zje4jVkovIT5v%76ZB`TqbV z4|i5D`u#f+XeEP-_4ZJ85aXZpvhQ*bOIovWi^`_p`5WS_T~FSVK`kp8_{7#h&nMWI zl)M4PZ+H4u`BL=QMX!XVEQa(f4DE9ehd|CdV2DW;e?lYQ0_Oh!!Ln5pc6MN8NBfq3 zuI4}w(qdPPt1z>HJYckl=je0o$a$`6(dzO3tjGef+HR(X2BHT=hAO~aVl6pl85 z$3$ZcFz#kDg+QLANUTci$pmSuhf)o&7e*h}0$mw#5puT>ZZW2)gXA!i5X%!?735WP zU=GWwfkCqH!6S-tB891@X0eMV-{uaF^Dv1=TDTf1$z(%(_`x1l5~UDhlL0M?8C8E5 zvat*W{{SE|4d#x1%{W7ymya)QSuPVLrB*;vXFN6;mRnN$e-MTR`4;F|3BX}6DQ@_+v+NQ$R;35D=`ErA^Js~m%*fAQ#91r08{i^mL?Vs~cNk*Y&@NsriE%P| z7xp1bVmkbf1=)3ai)QR&2s^1oZrBXu>}`>wz}UiKnl?efs)q3sBttl_%ZAw%pZJmy>jW1605*V$ zAVmY=F>Jt7+`^&ST|yBooGiHITS)np@^AgUev~ulP~Ml>5lLp2)qvv*&5%N>f)}gX z`*3m@fA{1 zDG`0BFn@|*FrP`JwiyJ4HMrs|1&+akEZh|>)MDU?=@JbrKNw03W0i0h1V%0C{3^ie zM4*d?IWz2Dpv-PoRKv0k@{R^!KFL%3Mov?75}6C~3S7wr+Aw<&7c8;EmGALoL6=Zi z33S{`?8Q>d8u=3}KM|v|46`lS;}{0c*;Sm4H2h#}7%1dR+T`j`0_E6&jF=$$kwA1$f5UK43y4pU6wWsSV#Eg!JZIq^4 zR?*Xn7@Q-iV$%}fZL}X{MhgolMp2Px3W=JjrQ0oUPmfakCK&$!9z@-29)jKSUtFDI zN&%-(848M&D*pgu3=n?4Mqp?@WKPa zhhRtm`J^=&Wi-&Qr-b$B%FD2*P^f0{D1_H#rq|;N17G;W)pL)(++u*I_RE|~zj8iH zC?d2he_(Z4YIO853Ekwc%{w%^cyB4lfIlU`evpx9Ie%43B5NcWoGj5K6fQL+HbDy%cjUT((%vc{#VWO5@7Z{O4n1SAF__aZ%b8ZC zrc5yD`XgWAxZ4+U)S>I4M0CXTA4j1r0ixp#3;zIwKY>V>6ELcdlNSqCjDHJeArtu2 zZtK6rSMhj1i^2R{q(6eY24ac1TZv(a4VmNo)D%D3Wr(4vWygQYRY8rI15k)Y3Y6E!X2D3?WL+`52QkK(gN0jIEqPj4X& z%{G@qm@=`+S&o!RZwO3eG+3+lDn@c3jWaY2++zO#WJ^l4xS*;xh9*MWsKZ)<(A~l= z%8ex-;w(WrjLVW8q>}r(U+O_{_)B}UO#Y?&e!#6rkG=l@m?t8u zf7K{QLRaLVDYI$wq_Ioi6P*5-lq zd>_x)sKpBm&JvMk$R{kVk9fvh=~8N8(fb9*S($eYju@Lc)pR}zV{}~I zf4?x$sA0dcVEJvXPP-6c4wGcWi-rn{mlPxqVUH}-Wwyc3k064Og>9_+=_@wp-W)gh;jT{%6usaX+0MQt*NBlPdP$DA$qd;80P9b#R>>v%E{{TFcvak4|vMaavupw0{ z6=%7T8Vqc=n}CU`9%0w`XX2?nSJUKn1_GcvGiZ2MF+Bk_T3u|<*QCk6t0+KNJ$4j}OYzLAk^WxA*h zn1nLi8dyn1)TZ29P!TOj1QNRyOp*|W=&=MCs8%qsZhC}sYx@?8^NB@VxIYhNtE2F9 zsa9tk+43u>{+z}%1jF(pA`f` zK=GMk90(lcC~*}vZ5YJ}#BcZovCuY|@ad|*>Vyon{>X=mz010<(E;h=Ol_u-O`nXz zUUS>>Szl~<{lX9^kHZ<+bcBn3C@8A}=_t_IrMrARkGcg#U+dNKR26lC*xe8&iaI#{ z=5^9vxPaAk69(J?eI?p81~2sx7eJ{>*@(9QlnspL;2FI8EDGCmP~l_2revAGKfIAQ zyeJ58u?QY{R53W2Sy8A^2~MKx@D_}hF06z77{31CLkcCFwO8#Z{{YBdH13^2CfGJK z5$DERL}hWvj2PAxioPu}kf0i?`pQ1)j)`D_K+dF{2roK@Yw|@-)CD#E)&dC*9Y27( zYRQ(Mbt|$Tkb;VfS(YxAIfk453dsWNF(#eHMDya zDq(;#$Oe|!+XBiD(j`d&V>Qn4m#`V3W%wVoC0BLRQsw5Qk=O{|h&v><(e~r)T1$Eo z5QWj0GHIcLhNe+NHt+C}Vo7b&4pTW2>O*4{nt&LBky!~WRzH;~j^K;QtXhHWLIkq$ zA2^C=hFQUTlytG|FlYxAh($Dc5Kz{xHDrDjD$oL`srV}g1feCAw#C|#j@{HjlO2A? z25#qq3|>M40@7k*7WXTfq2xA>RpWB%B{3reJTnBdNg8iBm1D|a!(kke&|n=eISb^~ zUE|2?NVAf)&RjCnL~4oxdYzSv$m7-j08FQ1f%aMk{5+as6t@Z$Kp}f)M5$;aGu}-7 z<_v?ZS$}_%=%5XqfrX6>9Uq&6NV!Fszm}C_t+=oJBFC2a5mz~{pZ0CGivIxGiWDMW z`L08?6L$!(KGng#!Gg^+-8y12indisz*sVK^n?mwa-pKlM@VVl>Q|5i-t&O;;|SWQ zP`C~eGa#~sY%y?9+W=!}GDN%}K}`!( z`SunEVamQ4KrE)1mj3{<3jT$`8OEq{6eejSOqMM%!p3lljW^N&3bg{ zN;wV9AQTe9K{^p(f(8Yfw2GJj>rE#Z0LsefgHGTClhAbxQY!HtZtrzOz^d3!O# zxwS=HcKLDjywJWpb&FiFUL{dB&+!leQn1T*SDb{9;}`dF1;kCF!*Eq8$x;1&4jL{h zF|b0htTj_%K??BUE<<1F!t`4uw?MuLNRn4O6aZzYdRN9fQTEk;PmxlKn0trx;~Q{7G-)8xxJBSl ztfrfNOys8-OUq0TiM3&YyMCTjIe-gp%bGOr_$Sz1RzQhu<{wwtvi|_YQEx*o@g9nx zb0m5Nr7egc(A8xy;bxbLv;#M z6f0ozo-+hMR8xlK_a*GMQF@yx?EZ$Ii);e2BuU7%fT>b0JE~_W+36js;!l-V`x_HH^Cf{ z3i&Fd02Vd1OHef)Zscwjq4p9|hF{p>l@MB<6bHy=%s)}JST2!(N3mkgelXyvRe&Z} zC7r8KqC4cOocR~5D zB>LPTzXS!*^b!6xfkW~HFmghNfievi&`c$&jKyw@Gk}1rMu#X2>@Pp^AYhbiTs)PR zLu-&qJ3HnI08mm<`gSY2d~NWQH!%Re+VqE}4Gu;yg0aD#Fm9Vst5#nH6> z;Zp%SYp2hIVh+V=&wfT>l9HAtMd32hX?e$>Oz6HbCxm1JKo@)}c_}Xymz%Lj31#`l z9e44M-P@QfTwq{=)v=Kl7DyDZx`lLtpb2L(R;A34Y7vUB5dDC~#!6EHsUpiohItf#be8OF5c8DL7+SeaoG1s6Vye4v5kFREApx?_FJ6kQ85CSD<-mgPkp6tu1o z4(?e?ivn0)V%^2s7niph>gT#u@sv6OJrr6D*{f}kcrV92=z*WujFQF+nNSV;U) zJwpK(EX*Tc6BI5KQ}o*)o09E$9wJ>)!Vc(l-$hkmP5Bh*<9m19{5kZjZTL=+isEEJ*Dj~7~JAIBC{x31K zvJ}ZPWn420ALkV3FqlgXj!4kmDC|vzB9Qq3+ROq-=~?&qZZGi8Q8sji1<%7Qh<-z! zEN?}`;9v$}6%N~|B1OuyKsf0`61*I4VbSdCo}(7oN{pteij=H>QxzcF*joT<ZuBJ!yk){Q z#V_|!Q&lhj0Em)j42-hH?8DfKRP5}1BP1)JuD=KZ+M>yWxHleKhxK@5fFru|IqVTBY-f@iDN|rTQ12~Fr5hdxjf5JoC622De z`i?ksr72V4W1S#QU&KgleB3~rszx|cq+|eFY?Z>ehIA$NylQ<>F1K4mu z2HHozSZi6|`c-NKMd}6+sV3F{`1=n30F0UdyhbUjHdVNoz!=qsp2FreI>?4L{9*<1?&<$^c!z{s@?m)gtR8uVhlvMmv|dd68j`mO15cl8TRl zR#K@=Mr4CbY>Kkq##wIT>Rka;)?ze;r{qAU53n~9mjkN1xsVfrkAyfh>Ln3)Orn{% zOQe`z)}^T~vj*EJg~Zv|TOC6KkUDdaG6iC?nt!8a-+o~4~oW6KFkW+K=j zcl^!?M&op3(D@1RZJ#NFF90SHi^e9G7F;ODBW=UFlq`kVms@Lc_^xjp5XPiu7vVCu zHBlG^=Lwd6l^pK(SM>_D7$k$lArCzIMY_C4Cf_1aVobstLn6g-vLfMO`xg{u_X%KZ zU>2P)T4*-77TU53&4Yah*h>oJraC_*hQ@jt$E>Bnjq`{mS>U@4MZ>K&VZg3P*`M~q zMY=d&{*s~(5p=(z2pc=pxHXXGI=}*@gYCmz8N*zIw8G98Fe|1JsGxMoM_}7gEpFLl zK|ignLfwJ|{{RQsVxoAz@O)w_#a!N(lGf%bg}pq474I5)VgR!S$ja3|affhoG=wdB zO6MPIjLrHpOi9$LA0%YFD781Nb%8xo`u_l^IG45A_9=!|BWKbHYKgd6g+xw6>lKQD zrXg^9XJb8RF}Z|AR3~bKQAl3d#$CJBpy$Zx?s|BA-9QI&0`h27rU5`$PKycY8%qV0 z%bz|n^B`ux-IE`uMQnIea-0!Gv+0ZtWE5E80^fj)LG+Cq2RF*}ik@LVW1EZiAdRmF zVTSW7>kxu%0oR|wV;3$Fa^@x_L}H)>4j>AMNASyylko)b#73ntrbq<_9}z?v5|g1n zSkHhEGA8=EjTB2U%HvTHZ~}-J4I3MXgCI5JYPbDBs_3YTu_JF{Z#%rqh5HE|+vH8| z5ifIxREt{2Ao4kS#9P=VC=A?Jr%Gi!7F4tQC72<+p-$rW6cfz7KENqr12#VLc^D!9 zlyk9fP)v$A`46boU?~3p0bzWWn~LE2QCkqgVM%QT{ht=azokg9Yk96k=eVE$EDP|06L zT&?9`9BTf=t`TLgx0gQ%W#U?nmgsQe0mB*Y{ebx@BC3hd(|T#-8qsK0w-8_iY^NBE zKqA|l`COF_BAfT4u)_mRBrp>rw3=X?gD?L8qwyVGG^ED_OBGr$d_1191rPp_6apxx z7R&n>KY@P68YfN#P_e-##9t%q*6_;@v0;I!ww{~UtmRp+*&9vcgl#nY%uOW8%mK9Je-ZWq zWJ*4&RTGyf-_zu{a2ICQy9WA+MiV@iDCYC^S>C2@)0z1Ee462~dm8%3;0;AurHdr} zAjJs*tNxNMwXT2aqQ^K&(k;Bj3AjK-nG}c-nJKPs>c!9`gDg6-7uWcZq4oYI2V)B$ z!RMo^l;0hHoZJJtC0C6Dx&bXhTTj1}Upc4yhsbiSFwY_EVA`ks z(K8`Ur5)A9l*Efmf6*#4YLr7ugdqi>pwR~vG0j2t8}h=mzuG-1hzhB%?I@@$EvD`J z5CcZBBTm{AFUfpFw2I`eEMa0$RsJx}!mvWyLdc|0?7oo|M4yU`K}c1>;h1!TV3F>q zQiVnqEV#|f6ZTe1%(&hU*>GlsZa>3@X;m@jW@-4Ze4HO_r3QnAt9w0tNUMUbLjyDi2YmD9$%TlchC@p1(8l{<}dP3gSf+Gtj zvnLR4X?8Hd-Irw69;MRi2kA^pwoGNgahZ9gh8Sa`GmZI)U_48Gi}J^2MDsKoUeOuCFiWC8USzma%UF?An=cB1*G2yJg*q8);6;g80|1RgGS|eou|3K z)Kdc6YV?4&P<_)KogsUxM0*fZ1;xg0LW}Atv1xxFuyD4#u)Tg0%^I99qsf+ELe+Tq zn5~{++4%zxuwMmuS)XKrI9GRq<$~2N8JDiC7Gey^^kWoY&@_ycR)q+IJ(SkF8L|#V zD8>i&6$-N4CBruI7B;W{0Ai5Z8|B;$w-{wq)>v-eY+zrVfyAdKKS-;XAf`c3u0dHs z`UW7{-Tq$w9s=<6Ani|JL*NFXAsY-iX^HzhHClG_%H)_eIY zNfpgUr zLH_{sMbcsBK{3GYD6A5|OTiZKS591e6x8HR{#QsfokVRefl5X`Aub4MJdYm>1ZZ`X zAK2^xwRT}Kt{(bDK$Qx{Pa{Q??ho3Dh#M7O5z>@adx38SqM!7^WlVr?Gb2S5g^X-K zpk?EUvWx=5ScGJ@#q-F;Kp|a)RzKOGA>Voze|}?9&7hmiiE7>>9W|n1f68f-H;tSQTM0 zl?d%MsC$m)X%mU?n>#Q!z-DF8&P778>+>9t&;T=^t)H zT=@d{RRW*GA6hHjztfP0$>YV@8)_RizA&#?fOql$YQf4SB}Ey7t)Z7J2hLNKch@^#H3Sid( zoKTUvqwcTv4XX6@XZ%m|p?%~{4By(O5V6Mt3kWTjOQ<<#_7$ffyE?Jb9@R-}I%R%! zV5Yh-{i#T*;SpO<4F3Rda8y4`2H?X~tv!efyD`xmEgF811d(1d$dwls+OI@y^jEjU zSluOt&;3DbA&kMBKE%zaIJ>BXp?uLx%`unkS8F>_WFx!_@%s~42o|S<#!?4oA^si` zqO0QDPRX0^VNp+0q#W!E=V2%*p)LBjUcdNYz}Eg$0B>+4EX2@;^AH=`QoLt!*d(~I zm;&Z3yD&~j4BU5wRbq>}g9nj_7b^#_BdJy?G+k(|Ko-mY0COkN1yIvx*rKY8vc<^+={h`x z!AGeBIM%NW7zD0^D>#QO$dDtVUhy`TN+Ej&8y3VZ8-NtCni&pDF-b58#i%D@;Km9T z+LtN1MM6q4F0V1kTN%*)y@Y1`MU|sh1QCMD$TfDyXt77f_%0ZjzdIE_W)z!?jny4sus1c$VP&M`aG3eR6&#I%uRlXM7Mt#`vP-COoTwG0EI8ww97zIm$W02 zT9T+sqb(I5f&S52DvhhL>=um!cKV8t4XIZBh7ooyvjj3%;W|rBjY5CL%S%#0jrhjE zBaT2AwPKI`5rol1q#GckMa_+#`8bMLJbduM4GSQ{_5P8OyxHA*L`g$rb5G?(iA9ZV zE74q#J6I(-2Y!yb=U$oap>2HGXJa-o!7f z3$#BD$C-zq9)6P!W7Piu_F`|0nFNcfmNM4UOej=}JS}22*3<_NGxN!QhQr6e>G6lU zx&s5_7=eob`PLS81F?YF_)31XOGuvh&Q0MOks^)VyhnDlh$A@l{_blppCj-H;*6!) zDn{)p1vpenH3~6IXFtOho)7^WVPPWFDn?oq7xVbr0i{$#{w~uIl@PG10GXEZy(0yCT+9E1$rEV zK%Afi6r{1pfEXoAh;=q(c^lQRO5|X6A89t+w2BOgij=EoFW5V2ZOSdsnqWn_GUH@K z%mYNF1i6B>yOyLfoseq`6WBA5U=tBKBFT(rk(wKoBBe%ZScDLzX7?^2*|H*9<_VG6 z05dFISR@Kzj4;L8mDxyi6N~Pi!*d!ox_ycc${n4f76hh^Kwbqo8J^dOz=Pn#Az%Lh zsH4EiVO#!$a0~-U{h65&AKbtOOIRxmX4rcdnC`L|(O$C?Z5Qpwb_}?=9+=EqbG5<^ z1)yqQW?I0a^=cQ`Rt%`LfQ%P_ejv@zDNwPigY7^0FAyxODP+4c?*S~D4KE9SAv~K~ zMsNeN$$+p1+J{1ofr<{G+nCI(oEcnik!)v3$_%TAuVsNLpZA%tscZ5oN2l%af|*fQ z@fHAs`%8tgJu^pfrYNUbnURDnV~n81whCj)gw zXFN%JSY_Dn{{Ui4bsP;;U4Pq{Ks^g<$K){6!;|AvW!(m2ZOTh2W*XC}oCa~@WT$Knu}g%qulhbRe) z*%!2in-P=g(q`sK!1?gl&C~X z{^vCkqx&D>%7n5ph?6X@B{gFNEI=N`&_apf{39`2V7pK7tW+4_wwFw#KmrW*upVKS zGH}gHvP!|KBkOot6Y{UE(wvk7iXY3Z;tCl*GpQZd@@p z0FUjD*}E*3%NLTw~tk+f*#XAuC?qZ{(RylxoF?|xQ<4Vm;f8AEztf5B3nh&)Z=%r0>kkSc&;)ON$ z*`Pu%OJ`=9Pz)vUl~+8Vv>Qa;>^!sVv~As#zIz+rX75{^dNjl3|_E@Ec_Y6NRbxLF^8*sFYG+Ugnn zglQC!7$Cy}VTf#@d@o3hi1rnE{-rQgS@KY#*rp(<9It2JZ{snDal$~Ebogp$#J~2G zS#zRkP+15kpI9V|wJ5F;!j~40Y#o*mSW^CByVOdQQ51Y7@=I$qwS6O`4e&qOFeUc6 z%ejpAsu-uoj5XgN?k?AR7Cc;}nOF8jQEM#XQz2Sf%xnQgcjGTsVMlOeS`Hs2Xe~S@ zB_9EDzw7n^$g(6<9)Lq(x`n_kgB{SSZ;VxifI1EGJ^MCy+lSGj6i~cT3}a#?(U zFV${c&tanT4T8KlV*u6RHy=(^zmb(3fx$$2Gr82zCrD+kePJo+C0t3VvMmenJ2TW> zTSdh8!@VSMWo#rQ=vd*me+Y95YQC6%Ar)9WTDY;~K^-UCVAj>WR1mW|J$U|dVYfr* zJ{*Pc`!Zcz7jvj99zRGkka>!7XJJ%qbSI3?O-|z*j_#csplaeH$^~D!VG=^BRlbqg zva(u_^~OYW&LUEVe#R8R27r1_(1U}yS$xauB3&>`K_14cH&YfBjiDVEpRsxh@&Hz2 zq!e(|5w^G2a0)XC>`?v!8*;;_2PhD{%Z$asiAga{nU1v>oep*}g6=S7%%$o(Ll4kR z>n*uRUX6MqC=tM_64gPCY;FkRR_l?vKO!_+N)ncsyMSCz!Tm+bytaPDn;{ny{fGfp zlI~^+WlMRZ4pjLq0Btht41?^ltOQ*Pq%u3Q4J_5_VCAUy+gBL?>;hshE>J2SkTRmo zol1FwNP+<*fUq0IKqxkQDrJK8m&mCKe}K~%mAq;TCnP^*ogj7(pj)#6sC2?Nl7>sW zbx<+7w`EF+Mvzismoym|maVB#qz%D|Pfa5mg3)XGLY~})*!9|7S zFzc~fAh5i-OtS%YO@9IuNC2V`KngIolZhyMQ)mFR=GXla+Q#5oYq=%LfS(8clC85T zVq|g}L2);1GhRg?LNE*s30NPVOA7lH7hn4{u;I;>N6;Y+P$i2?oE^IK@o3ggi>}-HOogFNH;TEgNQN?mH0+y{(`olva_RS@0!Jc@gJ3O}|OkS4I;Ka8p&`<=f=4JNJQ6oibjTSrKxHZ(2`Wn{>CEa&m^ zFl?xn;EdHqk}#KZAW)7Qi}$b!4w;z?c_jqk{sFk;&+$w`h@^Tx@3<+cug>`DD z%ZP6i&2#s7KgOKxSuRpX3Yf_z~)5{Adp2rAy&sP@I~?mL{AgdMAX`wjLkrGVGgW3 zeV2^D3aUDdfKrXPG<)RCtD}JS;()MNJIj2IhMn1W`wrO@CA8`6)*NnYafL04T8MLj{T`d2zgw?IV&@X8DkU8^7O0_D zh!THu&Lp_q)DB_m5o#^8aewwW9kAnC{3Sq61uGZF_F1g9uz#{y6M+c1QEX#OY_m%Q zoOLZ$R3iZzrbQazD?`uqeWVD^UUpSZqaOkOrCd z8;V?NRs;4_vbQX17C?b;mO$&-`)6S zGbt29>W3;9Lvq1Frl;ToPuYiY3Q-=*lm?wtf7E$jS+oBDC9#r^Q_=940dz|;O!6Ym zHv?cBwX5*N3wK$i{{Ws#o7++0x`%WTXFuPQ0gGXJ%%B~kcEM(_wB5mN=q(w)udthT zVW9n)f&uK=_(5wzF@h7@R;qxmjFjEVwKZ!_=0*cHFlrz}3=}^i4Jy2b7aW0vqfU=t z8B4;8^YUsM6H9f-RUj)*ZD{lNJegRzz%AM?a;ZBpww z=@wxD$hI)j@nYZ5#{B#EkI8}%95yh87?Q{S7?L29s?xEcS})ZA5aSm|wEqC)Ks=sB zZYa%H=KQu$hy&+2KRuOVk`rPc;gJfBz!hK3{FKecOR_&-rSzNt1m5Hq~-qnl#E+`acW(h!}Eg>}iK3uqHWx;_gu*Sts z`HhQ|M&{sIr6UDNw7=l5dNpU(V8Y8&^n%!qV`dN8C{oREEuaa9NAQ+G(gmf|090wNA@P(1r;+F={xmd{kQU8K!zwShhGe(` zswG)0mE6uXaXxnu0%wf=qiV5>#6$(f3|^2lgxfj_g+K*tHk}|~UpJ-$I;$+cN>#eo=~sD@no7!4xpazBy$0EGDD7Pg0UHf}Y0g}^XO4dsmU-{c?# zAh8JMH8q+e?VLV-Mat#lCVYttWJO>Y!v?INFXPxRj3J@ee!#AQpfF-ococ}Mb*)rh zzC+sPB_w{5P35JNIK2-h#O0b71bH>;G*xo+vHgnK7R-R;VW6x^m0E?QRfPaNDJtL= zE%qD6mPD@$#pJkrHD?PM^qD)Wjz6f%2&6Ms@rVV^0JjFBiBxX>!i_*}lqqsQ)?k{N zXg~QJjRX=H!Zd1Ql}vixkpv8(kK-I*!os#?Vu%RDm%}#)GNl^*RWfE9cC1gWW6#ZPrsLccd2M(72IVpCMip@tUll=lH zGjT1fLo(=y=!;7;9Sl(1!b#Es;MvqRVQA@y8esaKqJ*emAc$m9+lbg&!K?4dY6t@> z5FmexSp;<|ey${K!U1!X%Z7^83^SbEPS#YqIalx$Nk z1FoQ00SeQ1F9Ou9Y^dJ9@`&pdB7t?s2{O`6l^BBvD%1Jj?rHf3mE#|kDeu9E6NolaY!u1cjNkqa6!F| z>Qa-+z^9R<6G{rNhvssSiLU!HEha8Th+oCG^;8u z#)6Og8hJEIaVkcy0e3OsZ5y}CiZH!1c9;$XBHk*ae$W6^m>@txd|WDC1ua!q3PcEi z2HeIjhBV9Bk2QiQQ*xM<&O_}oTp2B;CUWEB03TPFSbSGWNpv;ZJc}g@fv3mPQ^k-b zPcPYtkYl2pr&c>$rrhHQ${;vmI)>XngiV$Fe{=CG_z}dnBR1#yh42#GL119e+5BHq z9FOs%WE~MQXSo;!ltc?xkcPBG!!SdURtiD3X_&wnuhLwq+|p{;etm*$;M6N6aY2+s zEHjC*{{Y~KlsHbxB7&;0@?;dI_byRov+Q{l%gT`%c%<2iG!r0KQl-%ODS<%54lR@d za^jep%(Tr%k(CHz9k{ny$t&?B7AX@M%uJ?mOU!EVsYFm+L{}ejqFMY1DF}xwigv=V zrM-WI8q^qb&t3pyP^z@`h^TZG2Vn80;J+H&d=eb%qD%JEX8R$)aTbCnKwDb=h%w@_ zKl>ZCITng|Fp{GN^0k=a6TqR;M_dxM`ciEi82jWaP0LdHPD39&Oi` z=_$G8_`b{mro(c;HMYf=K<<4bhq!i1SXC@NmVrT<@7YwYBKhM6>AkoeVKqvlAJQd; zanBF>MAu8i-j>CeGL1G|4d3@0fY^wI5kDH#T3>WeF#RFJVu4$GB@bG?k0R<02`6r_ zd=zTyL15xTxerKvpnJcGTTxH+j^%2YVY*-qRyu&>3y878DZK*aDcDBB>WZwOaQ^_f z!aS3lqdKc##eU194+|&f*>e8?1Ow3W{qUUXaY)+~VtrU)IkgQtkFY$LQF&NpQCDi= zQzi?lX1roXF12o+a_(V1K|u!~c8q{gNs_tp8L3Xp2vx`&7cG_d?BhcEeL(_B zk&8WH1On6?vH6zZzSDvK07qd#p)7!!KY?=P!UN=1F)C$<(HM%YL-=c`(TUjd*G!NA zAK@U){{RJhOC_?D5Ea=eZWs|`6E>k;h$(YEKyY&iGcH?=wK;{qSmP4obkqgXwJ8O- zi)pL{!sH8a2}Y-}wS0Rk4d&(4qUalxF0sZUSyMW-$T+A`3*DBhshuwn4jF3x7?q^0 z2r~OF-od4277NwQ1~2x@x{cTILRvc1SVS=9VZde$shPL%-NgW0N>$3W4~P)_nuxrg zQzlf}K#D;s;xG)sNEmuTDrt!>G@!<%6~buzm&ate2m6G@X$F0<9%yvCcX0w2T2J{! zRtgp^`xHrsfPr{BARtSVl^Q=~klj_qL4BQN>MVBf+$_-7!r*CjONKb?%4%58lBt6W z)kDRotkOV{*fr3NTEG>lVMV@FtBbtw5MZJQ22aRgNUb04QY9A`ih#*<$w8(Oc^nR- zEtZN}Ou;HxvhG62GrzjrB6*b3l>{r8+A_Nr^q478-V0e^bkWgWnN=zmQu!3OfaMDx zNsH1T+tJoKR8h&ak5B{@X9Ux50AQ6j=hU*u;p-KKGWk~If@pX4Uug=n{mXET^^>m_H$^u-usohS(fMH3V~y>V`*V(Wyr9|!>B|CqsTF~EW$Tz5L``(aCc~7 ze!x~NRl!w=UO?PchWQeF8Hu(JqMWL$g~PD2z!+vLI1h3#1r4vk99)l}5*dI_oti2t zVIlzb59zDq!L%Gyvd}En9mVnwu-r9pR|5R(8!s1s%8Anjsu8HMTKNQLac=G*$XN=! z;#Ul?)sSECTBTSEf>n7Q(*FP|&TKwH(}HUjqJ`?m{jobRD#9lOj4tzRpJT3oZTPua zKGFX5GPqM8U-~83=HTT= z)N}s;2qI1Ba5}iQ3qZg6%$MR?t%;*#qo>(W;S@8Euq8_1{{R)s7YOgqurkl#+GVQE zt)cq#fLEAVwwKnLSVH^r%?GdS^1hK&?3@>l68kJa*$zF9ta}CnT#CBWMGQfVAc_gk z!7w}hYu(n|M@y!mYIz&w?Zl%znaqZ4(((B(N4hy-_F`h9#00uiNX`6#q69Kk=d&)@ z1Fk{@IOucwdvFNbiIrd~td*S~KENk#T8;$hsMKU53KUl>9>`2B?=fZU6?zc3IpFEwDUi3YJ1UK-;N1-b*iE(>j&!xL_#E zx^o9nV#0-znf6dfL1Z>AV7JsOQbo*^Ua>jPI%c9Gqi9-SoCU!X0iTg~1@TCkuoz29+fr&-8blF_A&f$-EW}XE$laYJ z7GyBj{V-j^7>jlM2*d?cdypVz*rF0y$f_uUj4xO_pt#vr#uVMDM{M4`HP8(KRrYV76K)kIHstx+(a8x zI`7?>fFO5|PBk224;nDli}%!Vc$d5pTkA%)LQhG+X5#_v@BT8Sd6|rber#c=SP)R! z&$I+v4?x>6m!z`O@4bPCe3`Z3f(k49eh36=rO3=IR_kYFZIHAGV$^c zMX2`U#Dev-rCO6q5{%#%A}j#v%R-8d7i$b@BOR>(`yoQVZU|e1OKtfag5u$> zB6|xCV?EbX#yt-PX+O7dk7ht^>wJDoM53`{=l(!-!mTv&WL$P^mqs^M7W$%qv$Zn) zxCvK4tsf$Y%r#=l#l}F=OZ{cX8-r|EAH4pOkK>t55e$@&mL5%;N4xqoscQjT6hET| z*6!Lfi0@!sR7+qs97$hDXj`xO7Ep?$%4x<%4SAf=*kDgVV9|Jdm&}{RU!q&7*aD{f zDRbZs#}oC8*$t>b=>UR@b-lnw2BoqW0SMg}5h@tjXNFWF7#9Ac zLMe2Ah^&W2aEFXwoubdlXLB{&q91EQ#%PvgNvE~!`EW{xWkjPV@U7SJk(llu${35a z1+oT*`G6Bl$zWx%NMW?Ng=nI1()S3G?mo=Gna+QeM+PN@+(3bHr!Fc|>|qUHmfhJ^ z!34zzWX2%Y>VC+A2ks${Q9{ZlSmALpRJ*H#637@LzSf13xD`155?avy30kvbJFpQ4={zFH5I?NF}QSi|F+jsR8tU zMG}N!(NZ8y)hqH9ol=6btU?S0oZpN~A~&K-D72Ym<)WzYHelvC6j}v8*%*UbRWiCq zzhGRhfVw&Iy_U~q5l_Cy7A(vOcDU-FU5Xif5)bK2E_2nx=qrmR3jYAOQT>EY)EP`5 z?!V$h>GBw#M6qgxDfblvuXwK?urhNi^Zx+q$UBh{OkUzRmba_TM5wC)TAvUWHVrtJ z5(RI!WX=88F2(9-wtEgz3dzPhQKk5XDU+Ycac0^IxXl=SYUq{7S#uws{i7lN{QjsE~rq#R$k1kD<6y%&*Gwg6$k?CH5=0|5L;eA7?COjH~fss zrlnj+JZdHs3;zJ%F$$Qc@PGJYQsrdZ$Qs6oiKYOhQMiY#hjUQv*$Ryhp20zarQ}Iw zjFR}Rl?6eIDTq;s*Y^-m4MLhEw#ud}lxMLep}j^1rCh~-1%O5gZaR_w0Mrt+O3puv zbEYqHR8Yw7lSl=0TFuF_e7uZofOFFppu#K#C%pk@0 zDWl(K>UeB4UCEH43Lh37#VM5tD?x+ z+y3HvrvnMr0aZ&IvOA~^9zi^${>X7M>Zd3iE(@TmK-7FfQo70PL`D>0_ISfES{X?? zjSEE!YV{BkD0EJ<99f&w3UjTW5TOL&8bfvh)obKLMzC_KmnucrbMyA1%KSPP4O(AH z-g3%u(gu>Ra4j_87e_=D;SjK0bYQ@%LvM&>GAI{+KPA;p1>MHg2P1Pvycg82xFUlM zcjUX;0Ts#RkOElQML))ao_=0P8+@m8URvBP-;h$}hylVn@Leu6hUTU^!N$T;cXFCcT3O z7CTvRcGTm{1QsblDY|gRkohSFK@x6pN}}K(3uy!*65ibO!*^F2qY~;`r({^lp5XAP zq?268?CDrp6s*k!Ftio<5f`h}txuAyAsyF;`5nXVUJHqV9Za<-nOBg`rZ7}!FieC| zlu(PdUtZW~Q%J&3?`wT{0*D)$a7Rdx7VQ>9IZ6t-FaABe(7Ds4N zone$QO{t6tEEVA2>|&r1!8G8n**MBIO@Znx35DO-PmHo_3xweZ4p=ex;ji~IH zlQmU}MXQyvEAx4B@Lb1%;#{Cz-RNEZrchQ}G)`P4RLzIG{?BDd2xt;FPa&@?(JH!1 zf)GjAE~VyCZ3J8LIpI;Vg!F1PUSV;C1tpVbpQIxIXks962q-v1wW!KVd^MHV=d$q1 zUOQjoRpjSq3V*nfA&fcne_{Us?Mi-;ND=U~JgKq~KzKxo=+f*5mr|GysSun=Y%mgl z+&zRP81!2inMxxtO-1VgQ)BHDK~?J`-;mw9imS_@#9OJ!JrV=S`BTw!Fj0l!%M>)5G_LnUiM-Wml7J)Nc zU*T{7L_da-0!$X%NW)M*MxU~!e*h?8jub2}68?7rg!pGUso|%|Zm|m(CA^kw5nGj^ zq^K6fUP_}j5k@fJsZ&l&;nW7N>zKIa3M72LLRnFE3^l?nMvYlZ;S=CCdpr^&YYH2H4LB0LKuZ8{c5mrhf$0lMbR$M#MKz8VOjM4mLjwv^Y~}op zTV-L8eLRaCTn8?7`6{JK6*UBnENy^PY;6W!QU?%??>pD*RiJcNH(iKBk*LC!y7m1>BrK1@ul>xv%LQA%`b-EGY5xGPA(w$5unV|mGYtg7 zZ;j%afi4W`^yl}+aeX{K%!=#K_sGJ{OIQ3;1gcQCl8Q-vOvfcNjPW+&A5mO{ZYmQ% zSa`#bE%w7hSeq8TxMT&TY&nUA=Aogs`b9?>WqO=QfrtZX=*$jvVDE|xOjCHVA&fBw z3L8Cwfl}`BFoY}vX4eAP7-piTrJ%8|CS^pA

    qM4 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�|Wu_9!d{Gj#!*~ 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

    t^yc`642 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

    `{Wlbl`_A#0nZjhbqukUCUZV;wFI7Jw=cO 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 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg deleted file mode 100644 index a55da2a5dd71f018e73172faa320db840628f43d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565515 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

    exq8} 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%0DvTXE{{T%FQ)X{a1BBVv6|U<93{JyiP}11e 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

    aq&va76`X_#_GHzN&k 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

    uTBWx7Dxd!zWtUG+2$5|@`#%aF}iM%(Ac1lfE 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

    f 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 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json deleted file mode 100644 index 338ea6a..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/titanic.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "9xjZS2rlVxm8SFx8kPC3aIGCOYQ.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json deleted file mode 100644 index 8792aa5..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "gZm002w7q9yLOkltxT76TWGfdZX.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/tomorrowneverdies.imageset/gZm002w7q9yLOkltxT76TWGfdZX.jpg deleted file mode 100644 index 7af8e51243ce0205201c86c17a8687e211229c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357910 zcmbq)RZtvE(Cy+Hf+cuxcXxMp4esu)L4vz4vK!ppgS)%CvuFq`ZnT}8Y&73DjF90 zr~eF#5EBRUzd?vc^!3YEB0PFBVq!9SR$6LWR(?)SepxA5BcmXg|Lq3<1^`&dNIwt& za4-}ASS%PgESP^o0G|J1M1c7Zfd3Cz01O;F0wNMJ3e0~~|Az|z1N(nn|26>Va4-N^ zOgPN{RzXMO-&NVBq>vHWziZ1;VIm4di~USf#ZkagD8?5z8^w}!!%D6%Mm~Zsv5q7{ z=Z(;hLeZr0Wst(NsQH42T3ldxn9jt`p;2yxq%u(!Nu;u4G`@}1^;bb9tuz}m&zMFL zjx7czT#`#ktcal5R-=4QlCge*gQv*T40nP{$OeZBwFPLOj@81YRw+exXuC~@gIb8> z>g`EJi`5xRl*Z5V3Kl&(z87LGgf_a83mL$seTtXEA&N$o#l%f*K?S0cH_@FYv;&BX z2xg6K@Jttea4gEG?~b-6N$(uLz8MQ&NvFg>g3BPkdr*loyuSHTVXZ~vIrt+1@7MEB zfga0##HHz9)nu@Ll|hWbq19`Z2kPa-MW(Py1+EFQ?B;ZpfE-I$UZu1qF-ZmsE~TXu zWaMh8K?L)5xgv34+0X>>f`S~f5+UmYdYPrABl*u1R8otmVq>=CbR!xvdpI(oh3R6E zT;oKZ`DcC8s9yFh&V=^i_-imZ?8!xlX33N` za@HzIpnc$Ev1*q@#mu5kust1@e1Vnhy?1H+dod@7B@bD(^pGJCB;8;Ob5 ze{ZGfW!xs!X-+<^8&|Xq_#<)a;00D3eI;h*qY!8_YnkAyiNhM|Ta;#SYpz|eq|4EY zv5pxvCo^kc3tx*=!-HXw52SBoz4{(Wqq8Ex=p5#T1IsOHuNfTV>noI4IN@T!QE< zel3|}qb8KW;SMJZ@X#Vs0^p_i<_lyQTx0NIZRBv(!{ttK8X|W~{b)mSm!Ki)`}1QF z)6GM-oyv~fX-N{pPn9WNoc$A?`tP0u58h=H9Ur<&jds2y#<}40*joDp=h?73827GG zzu^dKa!!x=uC~tcM+a~g>c;+yv;S(Y)#bsTi0sMa0^n3DgVJH?bysioNM}Qf2{68; zI4)K)UM(dYL`K7syayZ^%EJw#NYuNcCB}yJ5Vj-a#gjl(N*4=-3Aap!=?tTeSX7|j zg9%%*h$XTw?Me+pxa6eFq~@lS*-JO4OohXY|Ew}(KH!5a%jG)JrvaB0X|9c)I3}Y) zN0l*$SXd}msrfCz0JFvU*QhvoXazuxn8^Y$l`I3eft0KXE7J#O>P9PJE{1V1>LZ43 z8fk9odm_f5i#bXUd+K*lekZ_Y6uWQdiT_)QZoKKtwX-XKdi#Awxr6_uUGf*?fiZ6IP9$lDF9kkks8}chD zfA~o77jl%)9otS&x)pTJoGRRZ3a0ElT43Y5t-z<2!j4aH9YR`y>nz}~p_rf0#2Nt( zsqq70wKN7CQ~4lL-jqMn%1fyW$+e(jPTBQ1Of+zrWL)^DaAMgkKP&o>)i}Hbxg=>L z$v5KFIFMjyyno7xqpZpI3s3Cn#cIDVdp8-w(7={l-(%UBe*b7 zraN)>TQvY8lG|Sd?9h}sKwvAJoX1>AEJ8pxQYt+pvyfl%h?&9maF7)^ob{Ls9Ib{d zcKT7AG;;`z%ZTm5qQ7gX6B0$sZIbib=>JR`VuwGc<~FOM<(VjG)JTAzg~73^QmB-P z6nQu0&v9HD_iGo^$s4_9bvMIK9!VOskT z^F?Lq3{rzeG1^ppcdk%XDCQ8xOdo)rBnWvI4Q~SPKrRjLa=zX*)Ct4|U@z~0vsWio z%lvow?m`%w3z9u5J91jaPdxE$d5|{*PBox)gfF^7{x^GG74q9rmF}SLKIjXA9v1mbt5d)K%I8zByqxpsXJ%7tL()=qq#+RolE}e5d#3Ah>L<>v|QLQ`~=2qdg`)0Z^6(tq; zhKVpL6F+k}D#PX^l;{dmV)mn%$`uTg2rZ)s3j5gM;_oH;G)kxa^;25B^Suj)%%`dP z^5S6^%jaTH;pIaYah%U0Sge2GnI@BDr*UA;KDH7C!uLw82z+?6&Wpye`05f7nI~OT zJvrS>E!bUT23=jr*9O?gOtFLzwH*>pMD9CrUl}wqJWx@TUGeo~eenpt1Bn@H5E2+M zwqL!KEx7x2MHRSlR5%>0`&@lnzJ>JoZ3jgV^hf4sJMK#h_M9s};hKo?1>TRn zTOqLiXbRqax~}?^%LleGd_((wN16ILCX(jz#5blwxUv!E#CDm4Z=BH`&oWgeCUe^E zoVHVCB7asK`mGo357Tm1YW2_vI4if;!ZI0G1BOg3RQjQJD7}93?sM5&+v{su)ry9` zT~xwfaK2O4884)0ZIh-^(KkIEdB)nYS2nIz>wA)->p z?n2jgp;ZOj?zu6K#3v6riV58QOFg}Z+cJUyZhtonbG_8}B=Y|O%%2}Gq=R79YuFjy z*g=rHptr;MW!AWl*(d8F+UwofPr{VfvpF9@&>edkU#t1Z)^k_C@iyI~>R zp*yR%NrO}UCR>JB=zL450a4dS1PD0y{0|T^TA_@d4boGaTwCAaA;$hugaYqbZl|6_ zdsa3i>hbrXHlX17l_Z!9lr<-u*8{m~tQ9FW#@h4jfw~|+0^Qy;A67>Rr9+x}Y+uay zx~i6XXjQKu&x+?qyvYGbGvs$9b>TfHXeO-h()&(N=SPCf>{+t5z$T_Cc#RMy!0V*U9&h zz^p;2iECYG@X03;hq5}>L)GSBrdOTguFt!{YM+xt)}I;gCW}a#!AWI#Z@ur_Z{6pR z$KKj!(!8`=p~klL>4$WY$(u*;`k$R+Xw>|T!%0%f8=DFK`xj{2*2eKdAl|(y2?$hk zAyo?WO-hbhkDCxS!+aaOryb1@HT~_^^$#$ux@a=_k%#J-7xGf` z2jbX%oiO@1@w9na%saa)?rUK}^^qJ%`Pe<^Ti23k@b`UM9&WtH{Zgn?DG2RyHa9pe z0S{*PZJ`RH{MM^i-P72f?v(NuX$8#0|61i2qpdobG{+jrJ9;WwS(+wH;I}*3|H$y1 zb=F~a^AE5V!esas`f#25Ueu}$35no;c>%qLFH2NJNNhcWQ;!?Krt3ozxRUz#{X&{{A=E1!$o@!rd^Icj7&W+CW*~EJ z2;un$0E0ZtcWqcVL9ahM#}|5e{{h5A1)M{~UU__b8Q%6^c8@XQgX>(3SxMbY$eifJw1wy&(il;7uEY)|kkLPYXmHJw z;61J5-TKp;=hNuGUht07KR|Jh+WVKROL|^f*-293ySywLo~Z9bL1-S2QZcSx&n_oz zt6++IkGtK95Y+eM{5rO~e}EK^ManDEl#h11K&J=Qk%CT_9TDV?cl^do0YAuKh{fR< zNiT$U-k7n6|69gP5RTj3?n&=9DFW2x&SXWD^gZ-z7i7M}t}f!gBYtqdvd@n0Jm0GB zh6d$l1P8f;i(w(N@56kA=#qkCcus3j2GVheCF91BigW_am{Ob z7GrQ)u=KlSNpYaXBeBNhfBedLE?iwCRdywLYq`~3-p%r?xyue3X@_Pp14YeVxH!$0 zb`gSFo_p07-z9H%w`={IbA@{(KeN0fjJ8o_yp?1?OmywOHKxvd(EkN5A#)|=2A9Ca zngHJSpQ}6`{sF3&+Hl+d4ATzOo^c<50m03|I(LUr!3n*xVZ*;ujSV{AdP==61c{M; z-JBhndi_>Z2h@ii!Vs7t|2EbdUO}E60>M^Kqicalb>M4Ox8aTB zT_R}R`8EAQ@RDa^@8`FNm(AmkYJuLxkd&U^Gpo@7A%h*OI4|tCZOcq1oI#w=cdL;q zi~d3eAr+#CAE9n{wV%75JwElYW-=NlA-~W6eLVjvaHsSfXk?OaY}M<~mUU@T$p0rQ ztt8m-BO+MWFsSNoHSBds1DYgTU3Jo%@A3M6^SVzx+lJlgl9cl|t7hxo-R&R1GqCB= z*x>CE`uOWs?e%kG57n!a!R(w}Z(cy~<4Kf|%@&yVodRuASoP>`W;eoi>6PQ=>c={C zyBP9EI9RhPL3d!+)0FEU0QBtwD)J=%qWw4NG^}iL={C>nZ|3v7r^Ov(;30RN-_6#w zz2cuj#k8`?e*i&|)@R8gjLn6>)#Yz~!aA%ikl?M<$)X_~OM@+0|8_)%Kn$p0Ea`{=hQ>*bxrUG@|8Qn&2jJ=4-hsON6F zlR$87($S*@-iviaV-M-=>lHZq<+*mF!e#!Tfja;%Jx70q>^z8aBEZ<;I0t(J2%?t% zqEixUN@CI({O$gaaZ>Z@P*qw{)-6UFQ62aaTol3<6hacb>k{+TAgIjdK#J7quL*BW9q;n!|o@#UZF^G3wOejjN-rW94mk<_dg% z`y>(Q^_m_`EdD6*Wd18C{JB!Mb@I-p@yV%i@sH}{XNSMS9u@4HmnW~9r>aqSNG4k$ zaQ4qQh8aJ3eW?BcDn-*lS+l*T15bYLcR{WH09e0Xe+G(<#?61|&3DcxZGVjZ{dg4F zHS?tf`U&ux_}!?iI`)dMjz91}zKHJi%0gmh&vsdE?o9%o-4V)=wOXT-{?tVW5qiEj z1vVLbzI5)1D&J;_D!=Lu>_m`i)}^bP=t$pQhTfCrKl747kYjzoOWnH@JY^;od|5;CIwQVvRyef<iw+OYd&VqEBS-9xd%)(Q+Q4bpbB zV$AGIi$sa}IIZ#nI-m@(IgparCS4chnX~-V=0#b~;A&GaxY4d2D`8VMDE1 zRpc?g_xSwa*PJh8pv2=0ebH+h86Zz&`*zjegl2J`->|7C8{9|jqMZ=xR zc&3GVNrBflpT`O%RYM?FnenGY8wI_}m(2zQe1lFIhUy%;ndEv-86a}iIR4gQ2KoYy zn$n5Dp&*%IJQ+VRAUhI0289xz9#}ph1AokR@g-H-y-mQ2YN?m;v#P3wL-x|5KHqWg znuQ@^UA41C8Tg)v%PhtUBHx{xg*;39s~(cJaoRjTeR_>+m&**r2(A-XIGhj`%$&C| zT-jx&|MY;Kyig}&WhC%Pqry9bVYKdIi$uuBivMl5)?w0(8?160V)x4=VHzeVWELtC zaM5GYL;UXWo(P=`LO90>tn0;Hesh?->jp>czlV7}IV8S5?z=QR#~QJ+-?jOW&f$@< z&h+fquNZvAU{wyyvbz&%{ate!DR@Gf_YwQ_53q3?)V3BlxWF&q?b&$$eA~Dn-iG1* zEXAOXtTh5dT#b>JhC(Yn)I>rLW=VCI`_c}6}+!Jn|=_bAG**G;QA=~uRJt*7A-sd zM)^GZtLVmM?t|nZg!DlrX^?%tZudnLL>Ni>i>rqaR%CMgnU|L3TKn+nHTXKALpS9l zfdAbjbaY{btA*pYY>Cz& zpV?oZTjGt2yrNqL#ekX!e%4@+AP);?3{F87`IvyXsq;q~p)IPk*h%EfSz-JFLJSP2 z0v5rq_*kt0dFR52?QiKKF1p4a)<)fY&@!~3Rxe19XqnS~V3|sjNB0_^5a61hN%5e9 zR=$h47W~~tV7RTAQ`>xAvc$0zxj5yAVFbZAyzRPBo^cgTS;F|Ky-Oyo&(I4oPn;sF zFl`kxq1wr`#tgWo+yw7|u(feE`=-|7bJc5Is&4r``d#2-$jm>0War+lXkO*zj8h)`kl3(;~zlwi8SEm z9Pe?o{nQsU0v(Mic>IIWAtU_^InDJZf4**-hSt>vv%R|P+^}4{6(x+%Kf?b55Cx@W z5fkJ6@aru}`u&tq)w7zb{Aca*_?Vwm>7YeVw`y};e{*Q{XGvB~4(Kbbct+(Y6$0`7 zbQU>KYY8}oo?a~cqcP(g*J8Ht-9TKy&XgxLOnep}Ckw`|EDv6jT`&jA6%L1kUx>-> zt`w$AER&BR-&f_^x_Z4Y-efljuYdjcKY2B}PX_!^}q`Qx&Z9vE|8m;4dbNMImvn zShf!@2KcKAHZRSW$oNVm1T^a_nvk{}Uo_)rKZX46JOO1vLt6H>=gnXK0WytaAUkb` z{x|2ko6oGZ9k;tnA#_2qW3RLUImRYc#)S<>0U(0I#o-qd2)wJw)zOP$SK{gk_*X?Z zg-KrqRn-0G*{hA2mePQ37nD1suODfvhBI#$*X|2RS)HJ#jr)-K5aE><=;1$rG3``G zuRTPd;a*hfPcXvswJhcQ+x3D-?s$7^ri}VdbdF(?UsNF!$f|W3H8}ZA%ZI_-vsqwv{SebySKvJNdt}J~+|av!aFxZg~!_FVbw-7jD{2kXN04w z90JsEvk2%{Zhv`<*o=%?mS2>s5LM;pQ}fi*FX8K!H>p+H;*y6nC@hNDQ{vH+uUfrE~TX^H=s9Bzr%bySsr8hWuAC z@93WIGWzeR#_B9izkfamvlW1UWo>M#3l4e+mlzTu?Zg`k&KL;F8ku#NGrKrE4Eh!c z@>zMI&2;;ZUf~bv@3W$4wKI$7gY#279aXtiEt$uE{ZR>3bB{fJg*kPGZCVzD9p>uK z>{pudYuXehAY98|JY|L!;>6|^^rSIRB3 zzJf+PkHWXF+n=gEXXiAe(Hcq@%HYJpw22bc;4r&v(Y3@GVldQjBysqNLb=q&l*3p1 z+~zF~9GXOB-Nj<2k5?eS18Ew0o-t}NIJr4bKPy2$D?jfB+xr`?=59kv9|h;$d&fm; zSt~tUI!k~HfvW4fsUcW*!2tupIH6ZPWfKp17u=#k?_d7`#zSNRA@~0PB&tNk{V#Pn z7d_2;uOShy-{nO!&UK$8&sg(&Mh|a1JfS^V!zM0%k8Ob=OTXH4d1!tPk&6x**SYYc0XQZd-eu#y*1Dz^HjcnXegV z5{11klo9;#=DV* z9{fXC?mrV9?Ec7XsjGXQiCSV@e*!nJoZdd(j3f<_KuGUHcx_Cmx>-~U&r?3^UUc*P zbPN9e0|fmg=mxQN&$PDk2S@FFT&t8^r@kj43Dj=9g5#miX|(5g0-e6cF4MgdiQ>0C zAQJ?1X4Zue(TAO+u)8S}QJQTzj?3L2L7ye3JhL6bM;;BeA(>^uO;s&vuH1Yd;MDRd zfn*mPcM==H>OJAPd7f!ul+xHGavdV>bMr*GQ?WvnZ&ln>?BUMy5>tN0)K=thGLjU| zeFGXJrq&A#R2sA>N>Ristn&E|CM8kh&ORHM&pS~>$vJl{4l!TtPDG|i_}iqtd{Mdl)wE!Nji}O>)@X+epYltr zYdm>Oz8rC`#Q<#vcYi_RkS&N6wBY+}_UDhJug$1bo^^_hsd*j&W*A;HRgAU+(abyA z^y6f0)1YTMPn&3NCRp-D@+^e$>aFhLeV4a%?d7l0&HGFoY&{e!e$e+ST4&*J{KA)H7H{z{KZo5DkQW2Zx;=kVAWsqyjkDD(yH1np?aPXUXPK?+b>bxN zBH&N_PNYiPkY3(%LHdS8N)?+}Bqa??I`v89C>|w&*_j&ale^;!NW!97%d6k5^loC_ z0-q`+IlmezjXj4Ol8q-hty4sD7=4kM)i_#QrZ_IgAhvhWbcv$-ENjrr#m%)UfpbZxmT;PcH$cq-;1X&#@Gwnc&B~PZKJA;z9=kV`8CO!;jd`S{ejG&^bS@Wy!n$Q2Ur*vR47a1t2r9V|FLpeu`?)Mgvg=0hDC5| zlp{&}=-Dn8RJ-v-5YbVZRXn$U^->^^lyey*qr0%M*FgT7rMNFLAK9sbEfc2nLmqja z?+3)TPnEo^AYcC(LUfwPD^Co%$qUW!FY-^ ztK=E;w?vRr9Gl(ok%e*!PSemOTddZ@0^u_PiSJCY4f>H8{tw6;Ri4~6u1o%g%n*UG zwMJ#a4K{CLusV&y0Gr^9YORNhbbxd~0FevZ&OXG*q}sQx>ek64?~;w9a@2La&Jw80 zBcPu}X>@9<8skCa*pYX|G!uiYC7=`wgO;L$ds4}!&V&U=9c^Z>XA$oqLD8o^%uNxm zxs;+$_3dG4g(u5xQQ9rY)I;59m%ksvSaUcyKU0z9G3LZ|+qdxc6+v$Z)LETl%|SZ;!wdSl#wXYFym# ziw8)ofVm%4&2ANsf9&Nm(Ly6IbH28qb3(D_&6 z^rqbWMa1x~u&LHNs7H6$Cug(W3Fti$7hw~_jz^WPBy--&wW=p#B@HS{InEl?glo7Q zJ~mECI*NZm8Vwv=4@)wc@@wygN{;X%Tp)#e8%HYRZ!UMA2>&11^42;jb1ObmTET1Sn7ZB@p7QV-vZx^R z@vsdiRbaN6c?nGTL~Gur(fF$kG^c8ye^fy|o}uAjs~!19Mq}$HhmAw_i$p}T`Pkbq z(1+?Q`tjDsYU_;S(o%BhMU_@_X42m&olx8kzNY_+db-5!Sr@cq)Mzqr+p(@}czmWL z1Xu%{htv2O9G!`8+MZKCC@)iJv1;F39Q)O5fNUVzEQ^bQ+ZjDWP>{jZvmzS9BmnJ# zz=l*)FK}e56(_+tk7;v50bi1Su)Nc`j_`ISccsmBai)`GF@d9*#>>?pJ}m<-T*CEN zx>t%Qe?VS|bqMc~eUKvFP?g3*u*WDT-JN5t0NMS{<_SH{i)`*KvsBN_QIE_0x{v!U z$qcyk>2n3|W!^u4@X9bR5Sr~JeD^IwzS@qVUwzSF8i+s)r|Bk(Y>-R6*_rp{-2S=O zBdOW#zO_lfLc)7pn%l;J6%bV&u2Y-7wXAeBDKn%-_{C1G^4PPv(l3Z8+$D43lyBQ+ z&T?jV8sZ@7!oJ~KoIy`h3B=b0^6_CK@y!uMYxSpeC~8KxR0@tb|BUG?{e+CfD<&I` zJLm9~wg&%>K7uZ_+kknkJ5;`Bl9z&j=j=eIaXE0U)|fm=%C-5EUJWj8A|N!=G>k_P zAQST|A)`H3nQr{MVEkf3^gM@MTB>knQ0W9Gb)F3O6+BAq_o=AwrFVaV0wJyEWssGh z1DbZ*X);vnamYAmp)JOa0EO}mu zeOF_#bofH|H(8{BhUVv=R{{bERp6Du%(>y2OG)BJu%IDIIZwe$XqEw=~%Fr*cHZ*vC83WQVKEJT-B|5(9 zr&k}I@f41uvG(Vow`m~SUZCTi)K(x5AfNI@5~kImD`g^v7R54Lf{?Ru&ChpejnlMkcCQH-wD6hF^8ji1>GM=Vnh zr@PbPC|oV)4VP-lt*Okj7n>FoS&mB|pwQ{pc^Hb<$g_O&^#t;3*~v@MpO@fM+M6Qd zUm5DD%j#z`05<5zLet>CROnZb=qM9Y#8BXJ#7py9Td8D+@p>!wC4@zX@qgO-p&|j3 zpG_sBy7BtERU}|uw9WrEigq?>8b9z=asOi9~40@c8>Iy}i5p^GpLGf!XPW zFg|MI9T`bEO!6RmVkfcP6g#GVW_Yu>dya*$x%8T8GNJv!_)!&Et+1^98*qi*@f7N9 z__*zpWVaHc0Sy$b9Wv;h@xly^R)e5nm?d`7hU!`-h;KH)m z5t#CEGNs1f{?l-@YVqPRjC_*wvgdU#&bXvIM3gr)wG|^PE{sLh)UH#Bb6qsUfp;V` z)l#o7%~RV>MYO|&BPgVx>PwDRub3`JwF{#FZiMNpbMJU-zYv#%@s`80JdA!y5PoYtrnn=|g=TjO33E*N z5Y1@RQ7c!RjcW!!D0Zw|3tea>Rkd`bEpo<{Y5dl)7wQKKPh!~X0uS?u2obsdB{6@+;Q?J>x*+)58Z}a{{V3Fi(xC- zO)e^jD4}bo*^a4*2mYUhE1+9GkXqhz4?~=)6*^rDtCjQIi4tM;6}khZpZQ#=@KdJr z$O3LiN_#J!T-mtS<19V*V5O5k<9FTDNxZ8^4iDJVep!rH__?=li!%ZL0I5FDc@?uJ zMVUj(HWevjl`12SM~@%Rx8Po;Ao0VFoLC>pOqx*a7H^ay8iY^T;zzzfCOHGXE4eSF zbapE9veG$j-9L$MW0uk=s(q{#0nV1^EzY;g3g^(LbJ&g1*-zS)>`N`dsDlc6!)jt= z@Bk)HtQLVf?TT|N$i_mM{6>?e0;;x!cHhWX;(AP)K{gr&8Tb;!i0U-8mI~PB#Th!P zCI-6kUkjQ!{fQ{FY^62injTaKiTYtc!(QH88w-VRG>H#8+EeGA{`w|$jM#qNs+5=u z=7>H3Z%#%5?|EI(1Oz6VaR7QW7>rL0U-Y3Ay_+6B}C98Vc%N^jsW@-*3b zMx5L}5u{p{bzH4#b$hKi zHrzmT^>YPW3B>zDrSt(G!fBZJgHVl?n+w{<(K6VIW?V(w^N*mLn7{R3*CjHvz7+PF2z`% zT7{-wUaZ(GE_Q17;L+rZ|NlT6@3TQdkN(7a;?F<8W>wQgHM+{O!72M&&_^KP_B@{H#hDM^L zBM_Yi9t^Xs>TPQ*vnzHf32LKQlgg|gSOP9sm7=7k=9`O}w0~;oSaQ$slpuUjQsT00 z1B1ab8L0F1hx|D;Y+{pa+JI!3h&>t1ODhFDju$1Eq2i2kke>w6S8H)4cX>EN_Qg!Q zd6liwFDhEe{IS1iOuulQX*31j8GCIf2wi+O(Y4`?X=*8%F8vl+nghQpX~yC*r|UFRS*V-`&Yz_=lLWxh11gTVB6x+!AeJmv|6JcA{ubn`qx25julaS zQC)C`cmw|VvLl1R)ARaT~FGWgh?!*eNo{(rm?w@DT!w`Oln}+e@*d3ric*dk&sH4P8OXK}@U+5BXEg zGri730=i6uzxee^Q4nJChdE$S4EWaVnksSX`7sEAhswR=(Avl0oQ1sr3{q`ej%9ka z2J8v}kdGNbw-3>sw=f?`;-5C8x|wrZRT8}{+DP8m?`EKkYvCBiJP6aT77+9#P**-3zJVVMtw{Zum zVQ0&gCPhl}AQ!W&@ONBA98Cua3?FQ;_Uyq=`Ov9tPS8(g)aJu4IaAYgC6Z+BIFxLF z24|%+E|)J!Au{sn`b`}C72b`TQ*j!(->giL!_<%{P3k=?l|C2DOIaz1!rWG@{EeIDHO*Mou!>m!2&71#FdZm|GEwM=a zirxm$$-NDx?7g|IcWt}9*Z1No$Ec4_`!2w|YSjh`qTK6w2CEiFTtQyB`zO4ktq?5D z`PXs378Yg~%eOPv@owgZKYSK>402ytt8&RIHqr^3TOi+v5*06KX4_Kz5?IDdH~2*+ zgCX$bEngR=<9k&WBvExE(4_4L0a$5Ao#r=bagWW5@pC5;&hPB_d^tYApXJHPvhJ(| zgUPwRX+;CMTJvf(Ju~8PLBCaOfm?|=NoF*i3$@WA=Q8?S8_5h6d-ePnJMBz?0{d=D zY9ewzh3tYOH!6bJ7O->my;$s*>_EU>OISxrzKJOK%dZ#|u}%^4T92CSF0 z-k|$}XZ2=|A&)1wdzWxR9U5ZDg$6OQC3VTpo!^`Y8^WLS4;Ma8!adrDh7jrs80!IHTn z3!Qnrm`jaPcRBQXQ+r!8%#^fdcv~|52xo|yK;xOCB7}#hT5+t~bAK^&zXWc^w%R+C zjy!ptI05qt-VuMf<#b^*b!nIjdO9xiP&>mtec>Ho_~I_i^Iq-3@xBiI?OiR;ZR}T! zynRfkKbIrMhlwZZGOJae36|<+G$emdsbZUx;Mqb{+%nct@g>ESqFAPP5Q$^{Mb(Be&XA+ zod&7|v(%WPRx`?%O8ez>)Sp#n6pcsLzLH%B=VEqVH#K{-mwt-X0md~)An^F=U2QM@s$Wk7Z>L3Y znM7AZuS6|OT+tl&U}~wv&8_LuF8`uyjJhGrm%WRh%WT8+gsXj~S48P)v~D_#h>*|< z5khJ-D;~ON%22cBmStg5K(BexAt>+(|F@y%Qzz@G3*yzmd631(yCk^R18E@;+BQ*r zGkN;#MNOZBW-4~WG-9`M!ar%$D?Glk;Mt@yT|LP&5{cRpE|DFlAu|QX<^D@63>oAa z_I=a+Z{0nfm6@$WytaI;G)rakPr~FhKI9)%1n@WEi8OpaMtJezX>#IpjnPS1ChG>C z665L{B0(Wd^A?gTP1Mot6F$V6zwyf~w?a3tZD3)oQE5`L7m8Eu(#U))G2qWQksGzB z(8c=XQv=bfH*fjFtCBB9;uP}EGBy%*lYO%~{F-{c&h+p^8V5%P*jE0hKVSPx5=``3 zSK%w#=odWlN?_4rWkl$AHy8QlQ9{vTe2|>yFFvfZ3?WSIY5(Fl<;1a6(0_FHEiVvH z8>~>)3iTyUD);z)d!t;Ev<&&oUx5I*H2UJdzMF8r(_n)Evd#*!V1Dyh<@k-xyRkLh znOk-1v$};O%R2e7e=PjI8emZN9kk;*-o2acRx;t`@u2ti%{i`WaEehwnz@oZyJ@`y zG0;4xBU!>4R%HgGOdP&(P1?@O+q&cGYIDxUu#F1$vY}8AGuE3?KOsd(M-~Q$+Q4^Q zb8M~|V(_c1bR}ao&7ykj&|l>`0QBs1RWxd_LIq;M$y8q*JuRnTCRVPeLhSd!D$Z6( zCBgy7v4p1m$WJRhOC^>MT~DS;D3B2Q?`7OS?l~ZWt-$E~9i1jyk?B|`IhxWM6B_(^ zOQ?t?ktOo%+>bfP@XGQVyQ*d-#2I3wIw#5!APYVZ_>)As;_h9!YLU-jzElBPwzEHS z$TYP#^Yqwowum}A{=>h61lmn&I_Y@knK*u8#aJ~PJ%jrAXZ{R^#Lf5hUEAS6XIPu8 z?_Hnq^p{q?jmpoM9AEcJEUjHxm=N9(`7qGu$N4=(x1mI?1 z^P?nUBge(yzw9^qTBM>3bQr6akhOA4Hc*4;%0$4F(O5^BtU)jOyxy0$xCYi*o7yci zN;=2R;yTdvfQ5COh+kV2PB-Wh64g7gRet#3j-$ZIF(GT1!H{A5q_T63c%CN8SVwE% zVE!)kNf@Vb@7mF~-c3;kFf@=@XIgOW;}%;?->S+LW&Q&QIhsENeACQm$S7V2WqYZh zlS;sV&iFG4h@{-rfr2_G9|VTJ#+K=PC~XmwfO$_(79g&F1>d$&+nXN;6%r;BteniH zM55iCl&?LvdR?a1cfGr=zaPImx3sx8ZZecEJ2gy7o#Z} zi#7TwtbZY4KjC%X1|0Ui%qID-1Z~a!mz2~4OD=pD7V7Zk-nO%We?Fx|(;yOu$wUl$ z;a)miPJ6uO-ikB#2~A3@n4gaZS7}?PhNCtOj7zBFS~;eL?N2ZqH7+hx0MWe9jLta& z6CaDc0$*H7%H&xHHCmMh2jtv3)Q-lhJ;|xQUaBE*usqIM%3Hdk!E{4d;b| zc#(YM>pQrp=p)9-IqT8G#IdEw*|BJ)xR^pW_`)Oct#{KM6*;yO(}Q=P`xbIODfMe~uiZUg9e)e2Y5_e9lQ`9??DQ54owf^>4V|4$d(>|y=n-e} zoMgya4cYrQN%CQrnNdiAxZtU^yq%A?+HXKZTW71!7pEa?7yEz3fIU@5huLUKdL^#$ zwT3yT>3ueiZ>_&k|r3MA{xlq;L|@5reF2XxaO@n6^4{8^Iu!%$>5K@TKE- z)d{Qb>%EJ^p&^FH%MC&?g$+Uk57!$x1@?zACqJk_fOHBJ7YyvYd4s&Q>eaGYS%rJ+ z(|xF*amw0$UDjiFOBXAngzlt_C(0OAUs^jSHh!V0L^ADvf}KeDR7`q+CMGJG-D17Q z)DA@B6jaiX?o6K}0Y9J>%j?O9ZD}2W1^)v>Jz;K`>aQePuIqecM$R&Q%YPl9nQ0}e zh?yy;aOl}p1qRaYlNy#+blWuaROa;fwP@2H;kRyYvpkv3BP!0d0qtc!(+DgwxprQN zAgTe-Al4%9j;kr3io>36h{Bs_C7nS1L5K5#NTQ4MojNFPG4BY>9&tN#|H|TNB%^Yq>i)8vt^hQ zPnEWLxPlCq+XQWcJyu^vB_s1bJJit-4l*_yT4y__{pgI&U;Ckn4@(8e?;}|w$rDRX zUTj1(m#|DF5M&?IL*sd(B=X2SmGE@rzy`?w*K*ts>_Y*-lv`M}n}*Ww)#)*773FJ| zsD1@C)aC!oEp}Xh+&(7c#pmRV&eu`(IRBj~RpBqAlH`};vG5k;5BCrzE_#MeeWc#B z8H?)v>hCOHDL|%1p}7~%8VzC%pL-en4m^E&)ghHs@!adUR+?~`2*L|t)a$R>F&k+& z@~-DvA&5avmnNaFkg30bW)hPxb@EoXik_j#9>frn>~cZ*AL zxrO6%?Un;qrJTxOv*~k#Po;c8UxU7OrVT?AI*yVsxB2szp7R}LB#P2343yN~U?)Yrl|lAm08O7*`B@E54`rMlu-Vx%I{m@3H;;D4f# zQyCds{NqcmcHOM%P9k~-qVMCDmS9502zb(w=(2&XQ^FVW&=P-hUA zK0h5l%KTJ+&?sOEt zj1@y;ta?7j_~c&K{Pg>*UuVAre?wr_qH35$rMIHXp?9Zx?`qfL{y$+ax4$l|Cp;!Q&^9+k}dwUilsJ}$VytXPnC#d!qY37~ZMsc1#UWdT@k0;>wxISOqIoqEq(Doi%em_4qnz8l&0Cf3t z>EAch=xkN65YxF}<8(Z@8JpTYy z%z8d=Ar-2=w~p4U*R1sG7jyDQPoi;5bZb1oz zWK7r9F`Ic^D4JB%@FCf13SGFX5bZ=NYC?)hBRJz)aX4O=$$39fX1`Tq9kAp+5znDP7|4@VZBLTY|ZyZ|7s?>bCRoDqLw&p;uVBUNut;!38ov!V++8 z0h2=!n4$?yl?>Ab3}N*owBYi(Zw_;Xz=Vo9;GF|%yt3XSNzGx%Iw#-*fFfO&s*`@^&ye`zzP3?de+0xk;*x zS3{h1YV26c*}31ln6&29sZNgk^4ARe#u10ARf{iGnCou0nDS2jH#5)iDt#KykV{+c(lMIW6{V*8blzH z5Ol^2nFG5BjfH@nkO_-|XJBI#Hv&QuNCn6OK^7dME)4F0l3*uHhG!5lb^-(qND&A- zM+i+F4Cb}7IeJ<~)>bxl)1l7KfzgV;%G|ltsZlu~7^sz?iITz+gik4i58cxB-VOvZFDTrS%olK}jKo%fbthzXZJ9-_O7Q9cU z^ZsA7=dko}{in)1{WlRH1Z|SpsHQV}4>~zDmsa7I=PBz|o z>g3qU$83VHT6D2UDrtt#QN;9@&+8W5~(Kf@Flo4l+z3C^`oe zAZghQ=`n=ZLQLSqC%$4aE2<0eQ# z1p_95*h!u$Uqs0azF$&uMap&LlG8^ZO)WrGb+PIOy$tw5^lHfJ**KHwwzw|q&h}yC zy&DtC_q^xPxNehF%mpRXRB8^q4zZVeNW+mszg@XI(r=k=!z80b^z-bPSm=QXwWb2;?|G z#Sk(^oNmMk3jsW4(+RK%Bm!W7g^UF|0SgEj#Ox+$&`dD|(ZQ0|y&hi@*GG6DNt1Ln{DAX}Ya61hOcA zRIxTGf~4aiPv}zx=XJ_K5-iQ0BDx&>4z}x25$HJGL^8sMIpbCoDKkuRFBwai;ad-1^-F8n%Y zlZ&O1)60j=b-h1NADH@Ab#8YKi;=01Pj$`k9G0=t@=!syA&Afl(6GBLaM~EhY#h{LO+jxislx882B5j0O zphpuVh@x^}fwB=vd-35>;_K-%u^pNLLqsE%%c9KLK{clICzozC>C92j45eUBSz2j* z2W{pZ&mWc!6WdGhnlXr|PdH{N%lkX++nb(q|J{Or<{Y%@Ja85vtxw%(}? zs6bauV_Vlf7S57%f`rgn&u4Gb--i-yjl0L4)#>^K_`ZX$pB=C@?-o1f$zfr& ze638p^vCD-InD5^YY%U3e&4$DuD%aLlNVpm@d=1@$vRCr0%MaP1n$tgA(V0mA$AfV zA(*;Cc4mlJfKp&g(S(e~0_tlq7iBP><` zxe~1%DFU2rOAOcB&$Bp<45CPp0tAULQiKSF0JBEro;Ml^>o5s3nAtGODJ!;CsP9*|45g0DR94#NZndkEO;EipxgxYS zBDFf6AoJU{$;!;;@3qQk!G~8b+WBoj`W{@ZSRtXM4jnjkb!v06`^ql^-dUQR{li>GxA3(ng%XWFb$o~L1!Bh0Je85e8G#@lb*V0k^=~|DY z1Lj&yeNjKl*9Y|3{Q2l`cjc9#7h#xXkw(Dm30U5#~ zWCKhh!*~g&5E2w;8*Lkd83+Wih_R!RHjuCgnd4`8RASrs` zrBfDfYKJ`=jY>I`ZwqxP+S4s9yzN|f-L(u+t-gClGqZ>1X|i^GZwAK41~;Fo!RI#I z??GMZ8`Ov|$(I{11!6{@XXlZl+cf;j*b}PYAItNVKV_{ zW+=!3Ga;oIv`K&rB2_ONAO~P!ykH|xsvJ}(Fac>akTF70fxobF!C99`TMuRocsnYL9Vf_utIYf3d@mC)0>i8%M|bFdGn zug?QFYID`-+@ppy8g#kpdSk5)O=`yMHLR0+V>f>t?`%}i=j+j@W`R-X%azy1^Y-=) zzgxmtngymg$67^KrlbyTs?s$pLnB0@aFF02-M`87#Bch)gLIO`G0^xl!A@%Q}miEG;{`2B%;U~nCZJO2O#+2IQGz6+xH#AC6ED0TGteRj1f zP{dDG{ym0tn;b^Np5DhdHj&X5ZQWqN-GBuE$~4R*A}45*M1)w(@Ul&Q*KZ80%);Bj(Iy^? znA35o&h)&X`<{=_^$Bi+miJ-%SBno265P(~YANaT{Q7#G4*}=Oo7K6GD+?ShmT_{S zz8WJQK!xI*a$Bn@Iy#v5n!igwG&(M)%=%i7M6t+pd*on>(8N&;kjF?7!Vd8>B#uht zkdRVQp=skNM$V#RL~*g%2&9CVN-_`y6S8PfgCdQ;Y|@r)9*D2i)6Sk!mpYneIA=Uo zC7jTdxuvZrN(AY#$1L2cA_+<<Uzr$Y3oVq$^FTp67M&su2L7X!BBxIJzs zneI7$UhYRHspfUd9)_+?{Ni<_xSVRUo1>c5HwLYGn@~m!cv7iE#KjDf3c1*wIQ6P* z$r}qm`0?u)lW(5xHA(L-yblqPj8A(yT-qgSDoQ*WRCTHP-~VbWSuPS z*QHPqAt{}iDdnwcmS>X`ge*m#{tmN?yPU13J?#9h=SFtpD71tR6J#+HLck)Gf;Te2 zK|w+WF%*RxDB5(HsGMPLXA~m{qZtsOc+(9E2ELIg=kt2&-UE=Qg4|Kf6p~G9w31At zD5=moc8Z+JrE#$?8#c93m7$>^;+fo{WMLUQp)(*!&z*T+BOJyYu5ic0Dnt9g6py5SVG1K`mw`MgWRr;a4UdGqH6M!>03ft%caTTDX@o z=+}r8+%#mbwo!6je>J}+oa1ibcKMn%>F8^dQ@c&9^e-AY#)M`r(YQD`ng(`ZT{zj! z=01!KW%T^APp{qJ0nedwb#?P;kr(oZ^ok18IaOwq>YFKfyyYsAZIQtEea5I zGz6F+P>DMOC5_k<#UMOq2%aZqzNL+&@_SxLr$I>(%d%ioRte#kVWT;6&b8vG=xJS= zp?=hf!e)UwA%UU+PV5q91nvOtghcGglQV$bsHXC`-$CPi?{kyn`yOu&&PzX`&f5$~ zv}@^&D*EwWc@;LHtny;gRI|qPVO;c7)e92bS3>1okf&yMoipUI0(K?KxEj^!5^*I4 znZeBM^SvCLjwY^eR|VU&t!t6gxkOb0Xs1MRpn0JoJE61EozFUI{X+R0K?wHHy=@ znn($&a@037J#q`J6)IkeT+c_>$|516kYi>PXhi8m!idlz24g79Ow8$B| zoN6P8PMwfwh7B0pgjeb& zDetQp;hrqodZRkTRDlaQgzMdLG+<0D$>X`t=C--sjy_*H)qajU*E6&)BBwoCAdTKE z97tm%W(LeoNDM*Am@H3T*qY@l!sk+TXJWMOZ1&tOa)9ar5Lfzc5g99DoampwF zg~6r=j81_u2?#ifXc*!GLV%N@sAOP@NE2UEB|nYWQeM%{v$S_K^VcIwLP%pIgqs_< z>X~WPWqjxF z{&%+>O$r!y$>H!tnwgepL5L&mErnFTC4H2akO^8gZFtHM3x1z5$ z^|UeSaWFP8y0|$=WQTrh*Qi>&%DmNDjvE0s0PZy6!7!#2jtx)m`y%fIz6M){s`Zu2-t4ai&DZ7u)rdhJW&Bs0}Q{>xn`H=eHdkt10!H3WHB_r>6{Z2 z4cuHD4VX-wp-$)$6b$a{WVmK_K4IkkZLWPsF-o?QvJR-~KyXdK#uH`kUKi4n_0OE_ z^kjUk&--tWtu{I@HQB?n(Cl)$*mds=C7zQ(C2E^7#$vBLs4K}WcO>z%QW#hrmj|0U z8WlwphMgF-Gb%8-j>m=Q;^$o3qm=ID$macd!jw)f0MdXcNhZl5u@HffF(-13wpi1~ z?FsYf<*u$-At2nfV=3pG(sNyq`5NZ}qjZXlf%LAEqDcWkVoTQ0Q11ng$Q9A7< zaFIl8lpFx0jRT2*023lzs&?F+nl^RL*gReQ)*3gYZwd(*OaLT^4G1zoj9NCV4NX}> zoX|#82rYadroe_slfA z4s*_Oc8GZUw6vG1Rm2pEy3k;fII@g|H=etT(!I~+k4JIq9y#im2=Ll{S2A6_?mt&8 z`yGBeYc2X1^Y$ZJk6;r_u8zA{5QccPhd`MpERaN;%DIkt;GS-5?M%dDdAFhYpI4t1 zX>0UyCwB>~Rg$EdL1PHI9yuchNfgpXVBsKx-=TTU{h0CvhBC^XX?M(8nfOA{Yjg7r zQRw-(WP(LcZl&r_sCAs#gyAOH#BDLv5IU}7jY(W?akx7R1DFU(34u*tXj0cuS z2$_OJ!U@s@XhAcgi6&!^xHz%|Cz^=9NZI51GM}B$%(&C#?qs)FqXESnu`900O#&fI zQ6QUZ0@I&c>O5DwBKMs7pDxz}pS_nlO}EMD#=W+eFS(Z6x)}HJ>7K2Ms)F?^NlK#4 zD@GW>k;w45y7kFbtqh4{Z6GSqc)mx`@}1sGB(>*ubOj_}%Yxxj@;U~H#Sw*w$`nEq zM$!P=r)XVfA!dr`X9znygN2w-=m<6PB#Z^g4oR!KnRV#ea*$jT)s~|e9n(2VfF&G* zHV0tH5sqdM5h0i^OjMjob&OUl(y-Ob5LoEM8aVs8%wqrLT6_L;^31I*qBC6>(!BSh zD!KPD>TA@uZk|Kg%S2)^t7v5jr(}l0X%0~kUem#zqtPee_lYb{j(~Fz?B=Vv&~g{E z)6g&T8@TlC&jrjn>qno^>zY3^53wTG`X9wAC-Js%aFoJ}JQ z5(A)|p`1i$DFB!Q#WZL_=%JCA8hB?G)(!0ONHHZwF(ex?fFyw9CIc4`l!ivM1mLN% zRU8yfK=v7h6e8m!Ofhy4WMTywAxUvFPXM4Jg*9$U^AmRFed~(#%AcjnFv853ViJr6 zO(F+Y=nYV`jGH=SJBW@(0%0(aB$z);6F-B{4A+PWSkkZ;r9IAlTS+@I+BJ_RSZ+as=J&sL@vWb#0)JW0OD}DcP!lX5@T$* z*5>rJQOHo*St z{Fa@j@A4}Q(m4fURtP@rapQJXO_fuae3TouTyiL1#INJz#8oKlo7=JmQ) zYF`th=le5eWujsi8;QmWTBH)N!Qk6OP>3te>s+-#dF}KX*xD!SQ<8S^W+ZP*k}U z;SFoeQgO#|Ji0dur;p`*8w;b0oUNl@Zb&7vcb;WipcI&t)NY6p76}E|6FLNp0Hle+ zNOZG+Q=nwx4&Z^^zzGn5$PN~5(z8+^?h#28p=eqFD#;FZcWKy|7)=CrVZ11qMTyb} zc#H^112~(THz-+iqnl{+I$}=3PQp@=0GZth(<+w~?K?D%V@^!{DLv+B`&t2Cc&)j+L7pr)-reu0l=ow(J=9Ntf zDyqROQDU9SP6C3KHVI-d2a*#BWCv>g$2Y#`l!)3aQ8ESHhP1OxK7_yH-o3%>UCNTy z9k_WdKKz#@&LG*Uax2U&T)}ghyA^ikub(}QF!S5=3w|w_Yu~BH3$)W_CQXVr2_r@T zqyTit35Wv4dr$x}FqRa7lQ<@lAaY0sRzk989U%h%IU|r7xk50UX9YAw(sY0kN(7W( z;sgoZG|n;uu$Ysvv~tBGnY1!*Im?4ehjh3*Hei?ui32#Hl1za#RRZj)4U=36vmqph z`dVV&Ip`5HH0VeOQvyhVCU8hhY{&vfi3E(%1i@09SL@Z8uRic!eDS>&zm#v=(m3vG ztiyGiZmpmiHX;^ucA!@rQViRJxH51=fI{U^;Q zojvDEhS=ct9y;|$W>}u{+qHwHuWu?k%BW{-O?dNB=vKUZ&I@%qyyLq-s&(kYVU&_| z-H`$pNO5Cel8gxoMVNFMna(7Gh}Z;~f!)9pq5zSlYV1!FOq~RgNeD*i4pNZ_OkIqc zKuClMD8$V$4U~e=l0cK87?hNrNKBP#1{K_mjJ~OjC)K1Wgf8eLEYlKX(o#7WcGnh3 z0}zlf$iezl=)QNoj8G)*0_Z@HAS4V1z<|Un1;}XEW$0p!hWdTTbJBF&8D25xQ*-*^ z#PuA8wV9>caz%2fLd!Lsnx|gn8Muk#o02z?3?M-0;sZ&6I|xp2PSvVYTMR`YrYSmN z#K5En4wKS+YtlLUI;?#a%io=8Rkf{mCUMf(!RSRwXd)`4HYr~}nNhz(v&$lmN<(4^ z0AsOT2I2s0m>o2LEa(`S1n8{P=QBLiMw|uR1EC;H;1XP?WupQXrHPmtDPk$-ict}a ztsxT!l|&&@Fw+5vBn%;P05KqAXA`+QO(4wV2?$70Th?+}*HBFHv_eTVLI7r1f7taPz

      5nO27~ed148Wpa}{#h@)^}CkJLAMI3@Nf>$pvyGSGuI}|L^uMN7r zkSy&@*+>zIB+^U{nA&9Op`D$}fuIQ^nxpiPqHmq_W@^k90=z=9G-geus+u81cWjC0@-xX@UN+m%{SU?jlD5g^VdVF@5OiGWf- zjf_O#nw8j`lSu<42VlFAub0&b3ARXN1Q@0pxR3#fIWTs(HYDOVGh|O83-nlONAsSI z%9*ukYE{h#HpYnD-)c@dLb$bQ4_p`a`G1~Ob$(mV_4anS9*g2t8C7dN8y$}$)2Y$& z{_CF)BG9vhwC(*r#XWf#9(BJfe3f}&D&nbWC~97+ok5UQyhO++icpGSU?yY;T!KOy z3>sJH0|~MU?tGye7yy$JZLgB)^j7h2Wz*Hc&F#*c`Pwz-O`Hqxs%-5pe_T0wS{d8$ z$}K1bs^-hGQPOKRwaOAFOfn#L5k^5WV`Vocku$I+Fa~pA6haJO;7JfNX9VIvq=?#< zcDB^jWUkRVOhB15?jW2~PRu}ToET&PAxH7QhtckF`ULcOB~2OJC!pXft(cr{CYun*10p5_tnCCBYNpYQ zs1$Jlq`*ur08Ze}$Q?6+c-$nGE3HlvM@h&G5J?k6iZC{00?7l)00z#$Z4`hqMuJm@ zS0glH)y5e_EaWJsjO@=DW9`g@hUM6V7~PzvDXLl8XDul^fROB>ypv2nqz4WBuDv&@ zY)W@2yOPy8EZL590fva~cvq|WFnP9q<}Dpxx%{W>LFdow{tho-@~(!%T!q}bjI{J) zMfb?iPnyTEd&s>R%^sIN;_uw=P}*#RJDcL>n{8#)3_7$k@t zkO4Aad18v@ zEJ6xFVT8biBLW9S2pEzFk`r?7h#t*jYIxM56im|2)y(RYoVs#mHgd$^DM`u6kxx+^ zqhSwj3o71e9kEsX8_rT|k0J-DZqS(|kvhbboFy;Sf+}b zr_Bj_-Wk$xO8ox-8*iJ|R1mNQdo_n1u1ZI;`Q%+$JYPx8Fj~jyut!c>@hjTi;w=lH z=elTQ;^mrxy~UY*g<8ObR%w{DVuoPOhe9;!41iF_Fd>i-8#I7&*PW;udc$FHK{`O0 z&`J^jMiPJ%2_f7FHu~Q?>ayyyPS!%Me1&buL~PUDhQm_WYVBjODWP`|o@(}5Gm2_R ziGWieAvi+4d$r}l#tDp!Ac#;H6N9spC!8d536my`$OuS5NXQcrwFIo-$sn#`fQ$%C z#K7Yt1Zc!gVC;8f5|lHwGK}1qliJT9m%p5?R+{2fdM6`&uOMyMnku$ePm-msr{Su;f#baAewQoBdv`A9$6ux9TNY+2DC8NT z=sBYf^OUu8jLi(uZmoUHsdWJ1S8u1|Yzupv>+pq>X1goXk|^3ZrHElYIg+?g&eSyY zDvqPc3ZPCXlo12it20x^VAXMu6$>Ij$bb~km?Yo`EI@!JKw8-ZtGL5;pGFI_>&-cY zjY%?+rrt)D5^O2cG$~a3T@`aW;{F4p_+ufjC5x0!RWuNC;B_v#^-h8j(C;tVWueSSNES4D8R2{XXmo z%3ZS4p1z2c*tDg+vA3NSOSVVIOKvKI+{?bNp|x6mdePO%znOY?>}PXYucMvp{I&Im z%gXo~IutZVvCmZw=7$|3EmV0^q&KRS6mmwWG_z2*=)--@OLbBprM;M{oN~geOK+6Z zCbeyRvVz?i0_@Zb9xEUZZiRtP%q)(zy2FG>Wu_7XOhI7anx;5x3UtW9F=9Xt>;zGe zOAL{NBng`YfLb}RjHHfX9HAptFV?cwO*TkQ#5N$1Eh4c}<}So15IZphMw|p>fC8=B zGTfsy<3s@F`ETgonr8Xztt#5h2y_9g3cLB!dBbWYP#j?{%hf?ELX(zS zhAnFK>{1(4#0sX2Qs_GX_NmsGDwD>X(pHo#TBC8OquR<8glf>5z` z1GzOcVrV5Gi4y?2LjjS3wR47AX$3KNK^Y5v#aVImL$ z2$=?;kai`cn$d>HGZKk7n)Y#P8IofdaB#PEmEvj~BOP@9U1@nq|HHsT7Fv#R- zT|t#gW|3J{bYhF81?Xm>CP}l1gp$HcurY|OJx67V7a>3#PMHBj2-%TlO4eG?pEBrY zt*mw_s+gLkxQ7xkOdS|A5CqrrF12E{xZ0x?%E`j-8gA}@6S@VHfr?-fa0Ez0M$TQP zZ1XxQ zysb#dG%R8T8xRl#Xqp(=Q8OSY$sx#74p?QWI~64qfJDmb$OH^hCNl`Ma=`9wSf?{K zb~3ddb=HkO-g_EU?&z$}c43u;WfSV;?B_=X`tow}Y1g9VkefPJW0qCT3R)RiT8>$| zzcc+=^2)AlLaeY=V%%|}}FK}2N*KqTmdjx;$7 z43jXCG6!Tp?9&F0PQF7JgwQ6*k7lIIy**16Buv7PghUAIjY6VLr#_@v89g5=G%pO( zx&R@R0TUn-jKWFj*=4o@s7?$p5rH|Nca|uSGdX~m%F<442{g=k8rzyDaxp;UzyoBP zrcxk@+EF~Pn>4pDHB|3ZJN-D-)S;ukcP~MqE=wmYxGlphy%3K4l`HGQh)m^F?r$ZV zkm%=1ba~$A$^QUfcp9&t5mV69U}j8Jjm?QD$PrY~sWny!>Z@=hm_*?&VTr*5AeL&g z0R+&32ZRwbAelG|IRQ;pW?qt{&UD~{z_V*><`e`Boqz)f)R2RlAhUNe{Y;E;HC8K7 zs;tt*EtrHEIzuNACT9egz$`;3U8icB1v7)3Xe5#e*<^ynLAaQtVT2+86+vcR#30VC zM3Aqo&#N(vlN8_*GGHNe0*C@biNgG~EmVjVaA+otQzu9lX_zL$1rU-YA$mk{S!quU zja~>RB||GRwc7GBMI^~mj@%&wla75XyTt75;M};?l}*={j@~|@H*e9uo2eYp1>J0I zxT#8MbF5oqWw4$*QAct+(Lp&+4}X*F?M?oD;rgGM>W0M`*(-pwXA)%9iIa}4*yYn1 z;Y=c!6$(OuM1nFGMBy1QLER341Gu1c;slZla-~u;K{!cXIf8>v5^R{pfRGEP2DwgV zuPEnp6jthvt4{)AGDet;fP#3?6C7YnoDm7KP!a}AfPjDsc&BR2fK;YHgfu2(-br+Y zp^FScEpCU*$}n-7DBS~zusJdZ7BGrXaCFQPT+h;Jp^_#7F&uIk2uR`-O)~@yIvB|F zw9-l~K{7%a0m4-QwIh>*-l1q#;I?6t7R3;&GXr|}v#*oUUB=((#>LwAbe$P#&6#F0 zjB@K@XiDfTXJ}(}?8iLlHk$mfw&yIIB$IPumPBd5{Gs<}&br5em8w?fC`cW}fQmE@ zh0_?Mj9|u*3Ph?Wm4v}$0-(+bz(&Xvm>rS=0$^iw%aWq0pzaE+s?!Ohkpw9cVlIKe zm?U`2CY~88Wp;3i8R7^9#%Nf`ASV|WI2YYiSyyEJnP%V3xX(_m|azA~3BZllF~Z4 zibN5y0Kv(SP7(o0T6$8L7?2!573F0>jwB~>0df=yGy>!-FeD7@fjb~GjoDxVcPHNE z$64FRh9Sd4OFC`_SCe=wrl^go>Z466B551|Nr4a`85z(~ld!A}%9of4qKa6CY~Ue8 zfKrW)osc0Tj&-%1{9v&&DK(t_w->bZWe zZ0_mTv$l5z)4`uCjuBZ*BDqFIeYKFAmt&qgQWT9O)N#s!^_qa6lk(m7ooO4Dd0wrr z22b4_8zwKuRg80l{a0T)fCmH5j57C&0Rk>5J*6qI0AE=F3U|AH1SH425>?`;A}1l zk_66Rnb;YMFmiSVkZrVmCT*IDs10VPiK7|k07aduGKJ{kO%y4W1F<4E6a*sZVi{Q) zHvzQ{i%lu2geJ^3D3ENNaWTd=hCl*g0G3ElN@5~IC@>ktGdSI=vOzPOvR0X?-N-F! zWZy=?wWPUX(S#@K`EKJ}?Ma|oAeCE2Ygqw3h>%vAW)9NiHu*PGB@S^31|chi`Shyh*rDNpYhsJsfSb3N{*lT<5gZo%l@~?i#YvoM;0CMqo*0VaDW!uCj9T#cI z%pl~u{zx-p=&X;FZ72st?N?4I1QRwAV+jfk34#V7Admo%5Hn4r)Ef@z?1$&jW3NJ3F(2WJpu=mjw$B$&iD!fQij;=HCpuBTzZ(>UM)5Ky`ShCog> zD3dv>5Uo51O2pNqW2Yi&%PRt&H)`Y8u+_Ucw*t^+>7^4WIv;h#vD1a=m>J6BaIUzQjp_pF(0Dr;ut15T1`-ZW*PfF>M z@I4<%tXD7D#mhO>`OoU_oQLOOb~)AsGbTDYhS#EGa#9Oek_(*R#GS~35wOk)!14gj zD`qVBumgxEWHK^jR_=O)zdncSKDIC6j9D9`6R@pMz^ROzX!W zGz{Plg&?Gi*))|WskSxdYG)E8jEaQL0cKkBg~{L~Yi;wL5}PeBp}Vddylb+O^n%14 z7)M?!M9Okn6hapeZqF2%*-9x0o;2n{Lz|xH@EPN9h8@MeL$BoNLV+>s%>Y-+)}qYV zZNoQ7PZDDwm^6_flw3kFmB$EKj4QFaaI}C7V<10k#QU>}{Ug}#k>xsFbO`4y=)gSR z81H&l8}^6AMEEYQsi=Ojveg z4vt@|eQ(ZsUpGNW5yj0Eb+guoiF?FI_#cD)3i*qto9D6DqrMed(q&T6l3q(~7-KEN z3SCf~NY2&?Zvn)ER%O(7^%go=2S2>y1 zjpygMKADZv&E(l0tx5!r4qI-ewhDimqs@M9NdVp;bzQQf7G3J4lF~P7H*{K1Q|>c@HJI z&1(^7jcQSZkc7-LGMz07VL}NbPB`TR>%71?RDw4#j2=NC7>vZy+8~y{SiB{4YPY;)>;t1j8R7E;qv-#4ooOKS$wG~%sARp{e|s}!sa&SyE+Q0e9K zek<8{?%zAj5`lV zC(pN3GlIo2jB^60gyKyj00)u*%7MU{kO-PiAd)mNnh6wXudDvC{O0`zQ>BN!LMsJM z?9Ajlo@kyE8(%+6`Ck_L8^)>gS=!K!3q6mb#rT;0Te}zWeP6UN(ed>!ro7>vQEL55 zn()XWN-5x)OzAYvz~D&_?j9xGVZYy8U5Nv5_x}9 zmk)0S1J^%wxyW=q9D34aNqF0@Nk!OHBUN@vCcu`PjH3!F?B>|2RX2jESr}F`ZQ800 zN(m`bsMf7ooli+uGGLceo4zTf%r@=QdRk)H^AArio^qa>!F6!vGE|KsX-FxlB^eqi zz^ZQ8sW4b4vLSboH_^`07MD%TbqRJphsSp^^g>a}poYM;T}Xrxo3#YaV=`&hl}+6t zWSCL|f%08%8XhgqbUe=4=0IaZGdM~J+8B-j)~jl|AsIw)#XM6=B5+BV9393FEGfG< zgT)|#46&hzP+$EA{OtO?kE|<`OUPO*IypOBh`Am+yz=|b_aWQkRQR5;GSlmiOu+2< zx)jW6g^eN%y`(=4_}}!~#A$pT1xS!(9x%57PLTInwi7 z-t}q|*4AsLmtH=jrt{t0v+eiz{{T$KE!`Rx?~LZ5S4{QBf{VKgS5;+ID^@ENm}vq)px z0p_;x_U7fO>gQaNNrN&boY6HUsgn(A6*$uwSjqZu`PP+r9&ZY@R zCtcmzjw=EYsRU5UVgn$P&_YK^nFxuU%AbYqB|{Zq~g`d8n+0Q<9-r)+@JN!g4hC<>OsZ}a=be(v~NS)k4r znZ`~IB!VY6!S`_WBTv10UIVuA{hu}Rf1teA&-eVpKcVLI+9(xHk3Uh-z#uAGjGeHqKqzxhp=><`<5(+egoY)U5 zUWq>z*%aUle;gF6~<6tRv6k~GW#z|?3R z$OPPf;MoCF@H7x08jo9XMlkZMh+w(;OGU!kk@EhSM`soe82A=FTK!K z!1V7wzreif>EAJ~uM?ZSE%C_j^Lv~P&Fc5@=aV~EF0szcy@#XGmm=-eT9acfVCL=e zJLS6;6no)gIy#$j*w3v~ZhL`1FDua13X4NnS#@X1)WZgoD7DYs??#7kU0dP(t>J3jNII{TG%|VI98m@0(T(2@83N7n7zkJh5TuRlrSc6 zK_di4P7NH+EXm-Ws2tEn>_np`PE6}?2ZQlF{{RoPa#b|)Z6}0+!NV|&;&H_tn!=?G znxzDDFybdjj3xkPXH+bsKqHMdBp^a21vF+4saw=h&~@IU+Ck>N*YjV}ZW4bUKzZg>)t`mn)#H zQN!c)9JOm#M-FRmm1h>-cOTSp9Xza{Zk}4zCdu2DNMnmkWe7&1SjDMG(TGm*5J-kW z6qU)T%CNH7R|hs@7@0j;E7FoS5K+4_Ct?G5+*7iWkjTa<@6*s>&Nk6rz)lg!?i1_f zYK!V!J`cObj78y*!a`|9#x8M#lR7g~J&7h6F|r;&lmI8L9wEW{4+*whmQKzkkr1#; zc7=em7)mFCc!y5C%431!F}ndF;V6be@XL6~3>cXRPBNX?#AZ7L^j}YLUrFV6wF>NC zly`Wv4)y$`GSK zTey87y)V@~$I!DhTuUoP1P)^8Vvs;d$ay4&hY3(9q+mHCVaXKEmx%fAqxp9E^Vr*Y z6jzN#%NHnH6zVq#p*X?{mMab@-P1&nMkg3X$)@5?C{E4@9Sur|Q+k&T^#s3B^gR9S zbed9jRLa}TaYvl$Fm%fTt%#b)b?t#^gbNl1D(*p>%tlZOQ)6MtUGdseaf2i z#H4$Ol!DYMXz4;Si%dcw@yHBeAWS4lj3(?E84|%Og>+!Sbj))=B2P0zY8#@8d4v?> zIIdsH(j3x>gCId~q{Hn6=sjmO)@EIJk2{s(kp}E(x_1+?IAbHRRSQT+fP};(E;K_c zUNz+&zvJ4+J(H)CqOTnF!ok5XS(YOu<3teEo|$bCMh-|&?13;A6;Y827{S1!X9=aN zbUiEV9{~EJ4R8UgWxa9%$^P|icrpFAF&x7PLWPu_#dA)7EeGQoG{;`7GVqQvhE;&weP7&pt zS5&nV6p5;zWCjwtU;VJa#h#)hAqBZU=*R{I+WL-SL)9I-JE@Jsh zAK$#pyKLKj@x!j^8)kW{diRA7+U-NJ9R$Pj{Pm`JC(DSXUnoa(;gOcK% zz;xFSxn1dNUoNG$w8kJG+mIVEmM?D+fl4dInZ|yGt^do!dI-V0)(=wU~}o{$h*fbnU9`3G(+7H(u658>`^b~+Y8He5;x ztxq%~WT|SWWlTv&#E7F)j6l!dg%_~AR{h9GjB!S$Np$Q7hPU^u?d@}$I_6IH){jU( z!gv3@ZHF{@ymGnKblC$=na)-m9TJq8EWwtj8eikr%c)L>Ke0=uK z<2udHIFuhTX?^_XCT}xa_hxd>JLO4w%TQELT%OxwQfZ6a{sYbPzc@wWvdi9{)9zOr z&(%%Dwp*{UQK1IUnv8i(!ZBmj%1Qn+Ay#SW$3Mo#hkhRK=};}6kbJG+o*Uudo__fP zhczWZ0Bg1@%giTIMU5AZkI2XUM)K-j)6f$ZR;5=Efa$hfg>)gYl0<&5iqQS28C6ad zXII%Ao0{a$6T7b*?jH)ORebdSornU9%GuftdDcR1Tm+hY!v~N6%uM7y@9ya}Ta@%g? zqp7vC={5gU_S0)Pj%7F-3p*cVpILR^75=LL^k*{x2;9zW833|pBwXab*8?1Lk6uuA~eHf3zlSq(z3*1d@Lib%ddhy z0HWiTRi1?N#}2nL@2F?jV-j;plkF2dzBn^6n|sPc7ez70*d_#%0N>=vy?4?=Ix7i7 z<0$(0X(hg(R!*{VqOTNNF4-!N&TP$ok4F@FrnXSE;rliC`f!O0g(~u9d!0M1wP&Z2 zzn-nPrznkqeba0y2^KTrX{2ow^>yj+D?eq++`Yz4nUvETBHXVp8u@8jikde!bG4pAW&@y?sip4967c`tV9c;#I$!A$s11ld# zcE@(&Pzp{=w@jtb;gjY$+B+i{M6fgAi<`F$iY6*}DClXvrL`J^n&~)(g0cq3U7C{k zl_d#DV!`7!<1w-VQ)zppUh>|#I#wdm)oPD9?dFC1m4FFVQ9sEzBl2J(u3!6Sj%ebR zD6Mb?JjlDK{DQ*Jdivzi$W zEa+`r(&PiV&=@&Utlf<*EZ#QFLz;b2jcAcp!IQ1<_;&WCiTAFt6;=k;#)WE`S-Oi0 z(K7bf!C7bjT#&D%_-W3x22LFv|Ex8H*>0HjaT2Pkk|P~Iu3WQ?VxvU!dQLZIX-{0< z-YR&!ajYNfvcEW0%nrzKKQV^>{BE}M?$U_+>-Wl$NtEPd*sU(xa?NDk8JBYck#n8< z*8WtHENz*qXsf!g4fl2%J*$I>sD7sS0k`PFW@SpPd!H163Vmq=LmJh`%mQ<_)FFVa z3={Jc<1YLB1cr*TCvy1^oYZ;ZxDTl3;t{3<((j-v5j)@4n#d~DMYSDE%a>+Hr{xDm zr9~%K-W8b7MTC^WLsfi1a_7I?(yD!Gwd(J^ct!mp3MvY%8|v38q4~&`6EsYm-%Uv> z6Q@DAl6e=44aW}o;d*}ZUhnI^nKH7#qXc*QW4|St=n1HJNW+QrlZY7-uYhy#8F!m^ zS^MWN``~8qU1i}eO4Qq^9N+7}q4H$7sY5N4uxpl9i0k*@j}`PhM>)MBz~t3w40FrS zhCbx1KZ@1#VM>~HiVXYx*KHHW`iOw-#f#be%dA;Ba1my{Y`P#az9K$tOT2rji7u*D zsM5@2_HwDBTV-NOsz&3d_j!E|F2Vv~lhN%n*MxOJBkZY&*|HET3e8KJ4E9?l{2n7> zZhy6@UmrCL-rHUtnH7p>$J!C6y&^{|34Zn5 z@y#>M@9~+%MA+bwt|?-~Px(^x*A-wvyK$L4eN+}WEcfUmd_&`xE`@9~W6RcO$18>g zlifb$!ODo72|lLl9B92}m9@3Tm8JQU)aUUR$1N*`wo&%G_wCYeyXu^Q@l2s|=~Xj# z!;>;-L_$Dh&ekoLwwg=v594ZcgVEj253&Jbe#x52<9%DxjYpncc(l8C#1R07AZyoq z`jxi+fu$F-UyrVg1iB;x%L95mPJBe;ow<%LN2MJ`w+RCJX|n>Jd3x#}>*mp%qBIIU ze3S;11}w%$j?YopP>=5Gi|l*ii*7ojSof2f5z|JXyyT+vLOsM>NE|aGZQ38ItR5kK zVUV0g!mBXIBV7+fznNZTPo~cm(@?|YM~(!EhP5US>2g>@qG!Rxqk73^cgN*a(x>~o zXmR9%7-E!XX-L*1)!We$X*dw*@>cHNJn z_>n1~+7&2u`c%27|DD)~nBk#YJ>Ty1@c0lda6~}Gqww>4PLr}XWN?5ID5Ij zuY#ZHoLr}WX_0zqBdRh7k zMKV_WlRJbT(Gqb+p&XT`VW(?^tIg7C`!!$34la$epLVDqWBRgx4op~{ja4|ymtuk2 zwX);YiL!w*osh`XDOA&>%Ci?~qt2lTC7CK>tarNV+!istDTS=XpODc8gXIR(zufr# z)N+9Ck7<-MCBCuBx9|DLsqpKy97~twk3SE`nNlYqQIDuW56LXi%0q=<9&QGm&1T{q z$;6^2D)#8UCNjFqnDSIr7j{ZkHM>Ft;WCVdTU72bBQCktke$AzVMmgySWqHJWEreV zBhujJ_CkpQ6wlbgikpdh)2JOcn*?u*1y>mISdY*)gJ*38b*SGbBq$@pq}4SUxD?+% zvY6M@y%k2B(>X_v9LLIUdp5yBB{;RRTBk)UN7Wk03*~7V)XIr!LnsstTb{;_T>X} zWy?rB7sKc%ByQ9AyiyYrVr~GFh3DT-v;N^5lcZNDjrDtpr}ZT57RhDSe~QQ%{gcHkKn~{vK4mIvENYv7Vdo zvOgI0v`DvZ7VjJps5V{_`V!$K&_7a^oOt#o!$!JDAyMNELtbf_eJ%G=UB%NhcOx@&dlWJ^Hm31PL$Kr{+I3+bVJYca=& zRY>MCRr5#dO@A=HPV@7A&7fKKT_!tYd5wN}5ov^UWdA1sXB7)Xk+H-!pCPLMW4;}Z z5(GFr=P~V2(>cF++{w^nDny|G!L`JBM3Z-&WH_|0jvwvEycQ%}%`^k~{>A4?Y-GmG1p$SOuoKkS2WFb>fXl-ZH@8HMo}tIBVp-o zTg38Y3AaV$&>t-}RZ0&>vQh25FK(U30VQ3rm|}OYTd+185jYL4OFBM_AFQCP{R*d6 zjVsMk<5igq)($a+8E+Ct^&9S(f`!P#3$EPZVE4bS8ppyj_jgP6aC?FpBP*rf zbK1tcc1+aqBcz)(>`@6HmZH!s)oM>;1Rx{3D82^?5Io|~EUyb<-r~LZ^onJ^QUlZIGS?*JZDiE>kA&`9XZRmL!F$t=*&_fo*VXlll7V8M@Gor zYm^?W=GFu%KUaPiMzy$e5fE;Y@7`)+5UNu;kK7oFQ(i~+jtj@jpezXT`Pd<@Q6@;;Y+@w0Z*p*4&7QCjV|9E`1xO!MRN#`}!@ zYf9e}I`_n{EFv<6JGdVRH3g!$SV6=QctoL8aUY6e%wBH;R~@kSq%>Wj%GCSFuCaJ( zCwCjO^4#*ys#IIFBkN3#7hB33K>_}!SZi?j=cY{d7h&J#nS+WgV%!xRO)Ww9)qZ65 zu(+H4>V5jlB1WD8H<$r8#@1X(5;r(;fU+tCL>xBogxy><@j31XM*=Z9#dQ(?O6~?N zItyp~KPf3xoe#bC`$>h4HfisC%QyQR+D^E41A6`18>kir)4sm9GcH>TCW;_L5ASdq z!s|tq-?*K5>`mLy#N+4ar6%tD)S~6^(R!Qq8vhU8qmT@L!|6BY!0);?(HkG-v?k>~ zYB#EC8V-#m?cN5)`H(7Xs+RTEUEbXJm)-<(8JVko7@Y*36c%~+>FfWpeC=4v?eOJT z{#ELTbU5L+jS-v^kvvU^P@H3!RSSbgy=joV`C->kGL$H{M%y9UAIO^7rNS)osK5ZU zKWaFbG5^$!G6=f??613TGO?Jdu@W&(|i>yzZ!ds$xP*$f{X7er#v9fxWMp>bhl)?j_g2S zo!0Lfu3S__Rt7O8$M000G<;GX{-uA&S=y9h4M9RJvOL$RiucITG>VW?^gdq-m2Mnv z!KepNDZ-Zwc!0Bn(m-UhMondAWJeO=ufWq3O0YOyHg~ zG0Ives+B3NtAhYnEq~xQZN&L8+D6845AZI#c9-F_nLrw5u4FQ%ADQ{h5wba&)hq(= zzY91|?%l(=C-va;njC~Yvy`)q|4B^qcHnoeh__3P>zy_YYjbE*nDY?UgPT$yha7Bx zhr6oUX+vU;7@a_O1Nn>dvcuqU&@BEOtlAtM(r6CzMKDLQNaC90cPMv!>5&U!(+<^SS5@5sp&QTc$dVBg|aF*Ap|e7^X>v+5}4;Q;pXUYxtJ)}T!!--=hqg? z?Oe(DycZI;tmsJ7tXmN9U#H5r7pmx9iHAF{5d64+#2$(z^X>{Q%XI$I+*0&_#OzNG z^o~-jO2%^;G+#|)l20SamlQO*VTyQ6b3LKlvmF`_U~+O-a`IQ3*qgrO-0cXbN8zSn ztAGgL@fs+17FRA?V z+W6($#?#lLvF}^||9?UEwdTIecIRk3B`TCnrHw~wzc2aaD>bGwk9Fo&#MQtHJ^hYF_?+l|?DpBxTf8ch;+d36D7oD=B z`8;G4apS1K#J+(mBNuBEUNR+@=^>Imamx?|-yBZz`pPpafR7iy5BGAn`ReQsVswY7OZ7yPYx;jZzX)aDrqDx@#5fH zLf81M*r$QA|9%b#Uh54VZvUq^wh6^hshljDyAUt8E6UZW|0Ifaz%U*d{+~Ov>N%;b z9S)tWmvsL!y_fu#(U?H9JA14*ZL8{!AFqM1g2f`$+nHQp{cX+lG39>uQ}yRi{5 zIjo^76V#5h#15{b0O_AvY3(rQ6Z7Iq@84)JyIzJ(2?6p2r!|}D$24rGwcRDB{MZC~ zl|6w`*|nhjFHtPrcx+W?Yo&58G-6?I)0|do6uEgv#N=wHe|f=QF&`&@F!=!wm0 z9bKbb1WPPi8y#b9p;6qxJd3|LetZjdZMk&}?OK|7YVj8qp>=F`_O34hA&aSgoQnSzIXKIIfz*jOW-huCxSl4B+DNaG7%(dgW*8A10V zsc)CHrXlu&MiFP)RL*i6+iYy1wK>Ri|4}=&sVU#A(Z4uYcg?N-`R%GgPrern=X$e4 zpl~Z9zn_r5klxWR@~iXu0Sw4ozUK<$SApj9)NCpIl?Z z0^i$_Fux;gXJ^xt1=diB#WHC|hl>E)e8c=&t%yE{EPeGSy$4JLTpC^ZH8QGO^D4LR zZcO(Rtn_S3*v^F{!VM(kZ}ItJ0WB5_q-KOQ5hQRAh0!V*{FCVjcDO-{U(I-<|CIcZ z2ZeQcY@H1<-so_SeY+%mz@ouPEw-D^W{<2ToqSSszSi5~fZgw{Vy&6&pwVGMjbq6H zerlGn0;WN$1S-E?e-M*^A@-H2ew;?^5Q2M83GRx?nqL72=>{Igx}cICu#xGGyw9ds^zi3PQ#WItw=f@?i6S_G(M9 z@svC+^|LgsV(iD4Mjvjm%U`Bj{?Shla&n4~}-K-Y&v`UiJ55Rt}6l+V2)$)$}Y!^$tVwr0suI;Wy z0~P|Rovsz9bQf;CYpxosv(h1IFY34aa+=TcuF+Oo7aE<{kp@EGY{`qY2?~+s759aF}Gi9Aik0$e5!u7a>8nMyg z;*%q_spZulMS_t+KHhuiXOIRhq<4ca_@}rB`VQ~8uHADzGg2pwVeQ-K7_gm5yWnD` zUaDR-c5r}v1Daax;dAEWGJ00+zc`j*(j&^if;Z4YME%T>y+30A!n!oQL2@GD!qh6+ zV!o~tI#2<_dN7k~p&JPu=JGfwDO&BklV|s2X6I3LYV-^lpw@sL@DJ2wPr`kuxlALZBnQH!E3tFq7koylVPKDQV`U{&v;nAWm94%cFebc zKEJeTJkcmA6}XvTFwWRBzm80Nx%fEu-=oMXZ)8$8M(`auRE|haW>tq!lY-vHP^%t8v*<>Oyip!~_SxZeQUkT!03a8Kc-_WbPnMl< z$mp}Di8?R5&Dj13mg*k&b5%uLo7Jgz7YL)Ox&dV8eYROXHD1@ES@w+wv31+Wea~!U z1r7f6EhJnr`EvWs9bnK4jJS3R$*aW4k#!~hM~lnF{HA%U6D?cA&4oUxx-5W@PFlm^ z3O!&=Z)bsG%vhze0)}u}cP<@+2fEz8v?PZW#D=QxDu$}>zz#GqN|CA0;-#V-{^B$T zCYa_}tx4@HmTttz53lZDc@(9$gMzGv>ByvV{=JAkj|=H!`Ah`5S%oO`b*T;1l+{ip zhLKY-Rg9C_76j`eGqUH}<|2p()I=nRb@cX>(g~f^E)L+M`U+^mL>);QdXX$_Rd~Q- zn9^pX%{6C$-a{mxiPLs}*@;%d^=~HLP#N&oZrTcOpgK`J9l&<|fO4}i*-r>!Q%?5p z6_*ri-F4!25Hl-&maiFOhbGpEfcYv1;)hVl=*$LMuJPMf5*&=pKW7z0eijbMVqYF zSZm&+R{v$Mky42~{qg?R%XFqT+jZmE=p-`B;_Y?8;eT0b}tP5vR@8(ZSXsp}u zsBzzCL^pWb1-yv|mvVVz=6$P27VW*bdKQ>H=6iD&^e^cw0QB_dpnq`;UEN!aYM|HA zy-89v98>SDH+m|@6~OGhB3jv@cq-Lb8SS6Xz_(9sH3DU%w6e#-eU;&ndiZ>!8bEzO z$h>%>@$=4fE*BkN`>z*<%5DQaSX+qdOc<6D5yn@~x1{MiJUM8thBMbX&IP{EF>jsyCwiez?+yZQ0La zH2N0YE}27X%}&(mZA+Rn>Okt%`&T@|8OiJPwo}78nEpBTjl6)1f1AFAr&BsEub$-G z!5RMyQzeUL3`E`xJ9`Dr+qI0|V2cB;Un*~&Jq=Xazami=$5vpc)jFkaEi;I1fxvjRHEk8HpmFrC~ zj5G-7LC6XxwA-{GKJ%`Oo~g7=>F!Mk(x>qlcKzlr4uW~!$tvvxoqrP*ccmlvQz44l zG2#7J;pKD*Df~o>&zxe@>DTL38W_US^uC3sX9rOMmhv}zHx@`KB_tbeKC(z+)QI;6*RrLbLg}~woeb4WZo{5S|6jDkVB)f|p6cFn%%i)Z#j5AcUFHlg2DbM(eMRW#42+7MSs&i&;L zYIX1dy!oYDh02N8sZtNcJ?$38mWDww%N<27^Vq4M*emZ_nA*H`JrVyZhqV>xc{87h zE+eiov8||KTPZTAp|2~I?AcSxyGT_i3g((Y{j2(adO$t2*l8P(r;RPefi3l~QSF&5 z89B@SeSo19ERBJET=_xt-J4gU{bA7_O;D5WL(s>M&eJU<-ZJ-I`6Z444%q)T#e~${V(}SboT#; zG)#pnI{7q^)^h$cj{j27c)WD}MM4SJkgXg9!`T+=SNccd3R~N)abL&uer#arJbm%> zzKUZxUn7sB%p!-p9*gf8wkua{2>r5Bfw}aUVuSbpJB#!sGykV8L0_hdS&cGywHW^y ze(3=He>(Bs+4x8PxZ47~KWsYhC2hKlh$6{PTgbVrxFbH4&{3=bkxSKPxep^LRSPxQ z6RQ&kt+-$fn~~%+o=%-IR9#tw{{VvEE{E~*T@NlR5IJ{<4q8=fsGtfd#049)0^Fzg zhigQV|HCilU<14bsesc}Eat$yk$xY4#6eiKSzZEjeIyW_GS^}B}juD@fRenKig5VA;r`6f0o z)lVu!wJ;pz4&s*gy4!BOR|ES@<&H(Ie~`t(m61SC#`)UxqY@}#jB(Jpk!H;74&>ay`TY})TEV1MO;-bm->xcy+2zgZwGV&fqN;7KLbLby z)%SR%id*k;Ik}ixk6gH{7`aYvsujkgoa?yHrE1l-GKa-tj}3llFYF&r{>7>NUg{}v z+~KxTdMdRrfm9Q7Z6M(q!;w;^OFq| zKP$i!6u*8v-0RPc=~)zlhQ^I_b+vbHB!Gry150tUF&Hyhqa_wgsPEjokh;zG&yT)R^wP}7C~ke^xoEs z`CQ3NhQ7(mO=u8Rgn+}wbW4d(x(7`@CAoN(a6g+enNW95{IYJ&VoVrBvk}jgL-sIw zN;6?2R9L4JL4VZ6{?b1( zX(LX=pv=nAO&5(_chP2Yg9g;82Fwtxam%Oyl42WcYa=A7{5{2duR88M`{NsDC$~#e zMWjGoR2JvZ?J-c%AeOel=c|9CknKX|_4)?Z34FVqGZO$`Psj828Es+XM*`l|Y}e;V zACg~j>mi+rSXbY7(KQ{xShZj*pYxo9tFx3Q1WKx6meQ2eKS>JBrRn3V)#x>;`eMoL zoSI{bZd20dK1Y)T0F)#~pend35T)BN($k`diT%XdVGPAyPg!nt@$p3Z_j%i`i%kq% zQ_C#NWE|XF1NUNjX_%U*Wd$w{SBRFX;hcW|75pUR6nS#SNh$w;=Ox6A=P*j%(z-eW zF4)Z;_m+El<>LUCJqEyb&QOhYBau!{tyMF@p4T9zS_5r#wWyI5_`T@nlvKR=yQOyg zz11H9Weif3bKqFsr=s<)Yo4RN|6I8(_I>GGFkU5dXTmZ2gw}AQ?dY8doTTeMchi6~ zFBJ0DT9!k>5*!1YgUAo77*^$4g3eN-VR@g)x1EN+nvj}v*_BmwxDpW6c&3G`=%JtC zI>CoEmK%k^S>`3etO{f*v#blz8TudSc5fpejsCidIygj9&KvcsVsOD-%{jI9%JG-nGb@auEz z66;H?(`md|y+worQ&mGWfJ)?SB?n*!3?4q`b~fjD6@+WC4R08IxA0h z95ndQE5CNMNZ(1y1Jelc_K$ItVFRe~s3vAAp~Tr+)VREyVj+r;98YUi_%|Y#*TG-k zx>+qNfk6-}d}D68*qV*%>vl+`W^eHdf<(lCz>J1PqK9vtajlK2E1XI(1d&TCJ;j5; z?g7=<*M_QA-y8B;#)%bAQ8HPu2VfvQD zoCKEE(vF$&ROG@sHB62>pDcK!-#llg9VEHUJ_{LFm&k7o(@0!ldZm?=%(qH^ORY1R ze)DdFMLw#C@QkSu>@Zg>fTA;jtaGuOrj3unU>99agD#Y*l$6?iy-A^H%1uM3lMua{{U5!tgt0hbkUxMkX_NC!2S%w`~SB!uocQTng#tMN2iZX|&R< zTmY2WYpqd2OsC}~0^#>kWvEe>>%~&Eech#4-bz66GsoC56^E~voaBisJ!tB8%*JJs zJLl-_dk2w&xPQLZY<@XWN#{lpkGwM>kXY-O@|_MWK5xc`b``DXSmb9ojw=V|{0yQ9 zZR4KdyCMs|r%4J;Wt^g!FYQ8C$zva*x1hscN(oGg)Tf?c7i(S*Ff3T5oiKDr-J@4a z@7;c+>G|8~-q5CM)xtyMPw{h#z8!KhK1~7Hl)aZO1msIlQo@iB_h7Nepb@L^9K2Om zch%bqtQJ7~@!OF>H&1HSpb2Y7y3M0hy7+E`VtF|UH0n*5?@zeV`{4Tmkt|>q(a)KO z)lL}vbTU4BMn5z<@pM6A1ZIQ3CKXxQ``N=$z?{2N1{z=7f-S%3nWv^vPSu_|q?YFTD(?f8@^P0@Emm)*Yc_LL4%m4260z z_$*&!v)^bMyyTI*9%teq4Qu=9njhLie9RIW-DviC*{UzNSF%8p3^YK;ut(Xr55$9w zHKkeu=_pt6A2tbh=5gIsmsE15CZ|>B`Ot(I6!?WGs16BtT=0*uSZ;R4HS0E4rCP9? zcP+{I9*c)g&Alb5c8`5gwS`GTE<;I)o^J?$3a7vaG-dQrdP5R9?`C4jTfyIAX6e6| zDHMR=X)Fo)@kR8DoWu*D*4n=~)dSuV1VznL$(X-5GD#Q0UDvhx(Ti_R4>p4+p@{K! zdi^n+IY=Ok$$`MaX|8Ps6NL&WlC$AY?que{vc1G9EnGn24_^RXO?!R)M;zYFJ(Z_) zCs4OS?izX(=DNvbw!b)5Yc~ULBRL%BT{r{BDX}puUN|!$t$aKzbJlDxBMy-|r=a;A zG?>RH!mgYs@ZqdSpsIJl;3n7z-nHwU#o~KJmyc{|z;euQywkvG1s#5tVeV1BqtFTx zFKZqlLzmKaEISRGQ}G0r;3MKN-K_=3l?Pe$p71{#%5am5QE!#4+)=MD*SQ)6mzME2 zFEax4o-f$*ibdLM>hD}Xg_d|aNJ*hG$CFn3i$ru{EVXrG(dAJQD%q>48<|C;sPy#< zsT$FnIR~k4%dvEP3DsHUYWj@Q-rp4zP;$eZn+d7O$ z*U%eGw*++L+|B1MC^tTjf10bS7A)@>6zMz{%?BkDFo@VB8_qg?P%Xc0+% z5wwNWu6q@3wf+Jf%GLc9#VwaC3_oA?tzmYSOUlBFUWx_5WW+L$e1}e$4062|!{HYu z)X6`cf+H>bw44>fN^$@_D0j6w#_R9{kYCE8Pi+r|vj;f|7MrJIX-S>WnEVvE)PeBK z$?CE1B~QMM9;~Z4mF>^{9azI|bBom(-b@c$4GwtMj5eJlX9Td9OLkqq%XlduhU_#$ zZfSq>P44Q}N33)}&av!UffcE05PO8U&IGMixD)-nXhQPbaLJnLdz+=9)^Yz^0<2zj z)rlYru%5)+s|0YUNwQQft4wr@;;P`pBt}EsIk^cA{er@ItCQC03<=iF(bZ`$rVIg{ zzWV`5eq2EOOf;n5ilmXOMsr^olB8uV8y}#UEY984e!K71-9MX374wk2cT|Jqh~L(7 zGg-ZXTz0JOrpegLn-Ef8-7Nq8tg2yMy#MEvVbg~2uHHjct^RK+v2e|5cHz;x@TuxF zIDnU#FCcyslbRWs%nuSQB6fPQ?{z%8Dh_LR?y8-(hc%MOsiHUM2K8R{E|Due-(8AK zK1Dy^mDvFQp=Oz9ZS8~BIfR6m-xwV7U{}RjX4vSk_lW>9L`7xw!UXa1{rQ@a+5LW$ zA9q&+NX|Pl50!!nG)B43y8%*<$1WIs2Y*)|VGNd{={AbOjJ^%kN)rg z+&Cz*@87V(Eqw@L6wEq|P<~v(=4!oO71n_y9><)$NfdUav`SJE2Yek`K`Z|F@D84b zQKc_G?JUXnHf>mA!-@pH!Ezx%nJ6~^FOesLV02y6grA15-*Fo9 zfrH(VAnXe==7Ay0phidD7Jq8!7*-5`RXg$s2S>gG2*T?&C7zcIREFwsNI^wQ^bFLx zTYNHl5Bj&@J32rp3SXwkf-$jQITg4VtR`oYV~7>|+=c&1SupIb+)lm<$%_2F5qYV& zb;7Js02Z&*QPzkB`>86QJI{^vbg=ZhJ+#m@d z=4*=tru85=^L;*&729}}2EAFueIN!?*zgmPfeMhoB=fcezQ*=4su0S^G-p8YZtgG6 zsZJJFKR$lMw6G`P{St#c+I76nf<+^!fPLvCU7XVIC|R^(?~(TWo@_9L^Nty!0+{Hv z&C$Ww5p~H|HB!lYTgEOab0lP*k=FF_xydy$FKwxO!XgU)wyi8G8uxb6^+UNqfM=J5 zJS1M{2Xvq3g`Y4p7=HW6Lg@BFd{!L`dEf&g$+@GO9}iV>4)(hy7En1{gPQB%(v(~W zqfPrEvyQq6Bx$anPgm7m{)Z^8r2M^gbOe3)-BFh8ueLcwYGhG%ZmCI}5VTp%T&RB^$q zCDw1ejovePviG~&f{KH&{NjYYrSA(Wr9)n>A)k`X>L7z{FUaUl@F;HeW<`9+kl$P*8*fEp~$2m_>`kCxjwgwr|U}&f~fL zgaVVJg#)`J?MP=#2A=G;`EQ+50&<{wzhzTZHh*mKnB)wFGF>bZ967?Oo#VUYqYAK7 zF{6Ue8*{x#?y-*7KR%WvX`w6g@(zpWicKbKWY>dpV*c>Ri|omITo?onq1GsSwZhKL zp_^^+&5QHS+E?EK|S(aE+7(w|FEhtr^tn=ZrQ#WE<2sg z$2Q=B-5tdT38S3Y$x#mP4th}V^)wDG`Cd%5bZys|`@Vh;{uDN}Vs*h|iIRH?$#1j{`Z%RY#45k$AY~r%PmrL;Bh;R<830`dKP_-jXPyw5zb`A#* zM}UPAypz(h#8$nR) z@tR4)r>Q1yfHhPI^V=jGiw(gV<-W7y-!BBR7=*R)P}xfz>lUS>>Xk%e&?>&IlBGyG z_Lo(uYQ}QL*Sw@go&b=xv*GZc@3A0?Hl=S-0@kXfK5L(?b*c=Kz7&Qlamo)M<)R5| zT1aKGZcHZT56O~@oUoI*J`#)I^amwBNYzb=%}N!_wuwK8zCdyT!`;0je<0$b`84I5 z>C`9oSWkg=VE?!~u*sdg`;B4aM%WGJSbfVkN`7AxLC$3ythb2xi!-)KO<5Moih=a& z@$yTVU*yt%5}VqK_N_t&Q{#RB0lAsU%&D*KBw>~>BjY15qQ50QYXyUvx0uYA&QArJzRLusz@d34QXbp-dhp>Yw+ zkxPco_UM{r(g1TGE!73>uk9rAk>oqSV`Kz^RaFWDl85x|wq!82Eu4PCx9AbMM&sw~ z-UO7AmLZFzDgblM>Lb-6Ui>$UgXokJAul`fYPVDpk@|6_I=?}Jp~~wwC4SG5w~=@* zJVNFdz=%{TnNQqP{YLLEBG`qQIWF%uy&ALk<&C>HJIJ9^Fup|%zkWZ}OC`uM9Qe)4PaLf4?y@jqp_IQk$;YrpdDs4Sd=|Tiu$&!LBP<)iV>o0I>5x+y zp6jq?vDq5rxDOj-NuGn2!1MKe5`Qd3=9@gVv}kX1g!xd`ckXsJaMG4$_)w=t&FMvO zMKcLtd_X%DhC^8PcHQa2TNuba~i;XHh3M;OZ1SggzYXpG0A&!Wh9MLDYMQ6{Rqz?-{qv z^Z7x(rxrUQorY;SdAv7j>Q!h1hV5tz+_$-YU+U8ZBT2=K0 z4bei=Hx?YP|C7kDBQ+^p;HB7+^c&!G&ZQZIH!n4ix08e4(Ge4~nZxNQBa`0Ouy+r~ z=}ajEHxb&zU3l^ntvVnIv0@YQbcTlv6OAQS(>(lEz5+$opd@e2-P~>n|K46|KXs{D&`j$VR=2d3Am*<8Xr1CT zctKXrlb@=em;4`AwNp}**ct%$@_K1qn7?D=IyY?x@`GM91xKSpq&1l#gKc)z{V2E$ zwkI!n$K>QfdJVMf`b$;1k(PDhb?leUZL`f$=)w^TD(p0Xn*@_N4guFmmt~aIp#WOqV3a_Xg z9Fo_&{J&c4_u1_`llqlUmnU=A<5S2-3hH1tj!&DREo%MPDqr19?5<7f zdtV#^2D8=r5CD$^a&~Cx@~gbR+t1Rep~@9~I=lF1Qxv++XEJxQe^2?h(f#2Cxw;%g z{E=JFW@rOOJzjp2KBaTS*n|}SMyz^`+p6iKN?7W9`j1i^pX`g>6RI2n_(s1tP$p29 zm;BA*rQjIrPGY5KKtRasBdlqM0HbdhGiQt(K6-H9D-Bb?`_`Y97UOfCu`grb9Z1=- z$FC|Wnn!?Q{|>BVS!R?ub9802|K14C8IkRE{G38e%-L(k3{oMg${hmaQ@_a^Q1YK`_Z8izu6&KDIeF>5w@(PW&&X5jYP$~&KFr_F zV~AZ!G@kF`$UmewY3+OesoW2;WmC3#+*ZexC7J4>_RoG)kVDVHixr*fDZy%bIGOtC zf3GOHIhlnvu7`H%Ieg38DYZ11vO?G!A#RV~<9x-jo3ZaE?GzW7=dy`^(o!xDs3g@F zQfqRaLTqi<|I-Qw4xKBAS?!`(XvF0%rl6o-datzK;Dn1aty z()<2HNsD)qpXkMD4pI)^rLs}d55f>_u$Jc2&>D>jJv^+TjEt;ss-EVY`uB?9;@zk4 zI;57A;pZgBD&OMYQxOKa|4)bIj@<7M%-esmP{Kp)6_$@?3(2P0%Rc2;L*NS^ob=v< zCz$mD1K4l;&hs=N%@{QA4vhSz4)I?ZP z;FC{}uM6IE_@9~_qv(k6x@U38++(5+rl3cb4*xYhXbvkdA&tq)rh3WIGkM~ZLlF|u~VJE8IRdITM0i?6Re7$`&#nWo^ z|N5RjcX03c6}3pg3|`t>celaTp{TW;&bqxUC+>@mv=NxrA~k8DM{)3{BD=UsB(A3V z1e!N7>}g&~ANa%-z2CEL(7E{&yf>NTnCdKDyH2gn^{tESM4vmlcihjpCB<>n#azI7 zr}?RCHk{Jm;Qh54;=@>v1oJ8%Tl z&rfQ(?4qCyO`(eMonAc@U##v%Ok^`2_I6Znc<1m+e(~4Y`h2{O{+5-q&bC9q zR(2ON!}Q0}K6(_D3qMYK2zJy7r40aV8ZNgck3 z_lx!RL=4whdI`_UBiQTj++h30q~p{-xbLHTYizy|VwEq)*=s{h4Z3CmvqDi3YWOE5 zE*nxAqY7G}V{iNLlB+x8z=Pf7AnyD!f$M@*m zom})C!>b>IHO6MR>O4okd|g6ZFeY;w1g9H&*R)$COx8(!&VKL#W(=f;f?` zs15D={naV{8@3z1+@W=S=68oRGYUgPfoU9ggA5v*D752?7i~JZu)F5HAHRnlr7bbm z7W<$qvqg0LYXmz_2aXk0{Ib7wO+9wr*Tmo5{4jAU>S&Q>-9c;^-^#e8xqLjbykZ7> zt8Z4>C}REYE0M3U3$a(jVX}j>E_qfE(=Gni;=|078QxRo?TsT!&}~=VrD_nxyf?<3r1JI zZNl=~utNq;xw4L-fqUSyoW-!rcWS`eHSWj@Ru!T@luuah=K$Y@UP@O`{yHVoVs6sQ zcPvj`{1as*G&<{+J+0gE5>}W{O)CC8x?FB^VO!x_#he?jSbvXfTa@U356h|8{{A*3 zUv!4fsps2(LAhfiajB(YE*vTNLm6wCeV(;XGLVB<>JIL>{(MWH!tOhuGOIY}?U~9W z%R)$*dlHbaki+4U9-`EnvHB=_F7rd=dE>T!9Y-E#n3a0IN{$)tD}bB~E!@3*Z&+Bj zc)yn^w5?Pox3VNIMasw8U(8h)|BE<3%u7!7b;=0exA(w_^D>!q3`(nW*a^N%6oEoQ^q8vUuK|nDcj`R zLIU{-Y)O6nPg3h2?svO_PY5P|BIpzqnpVTNz3x*A{REGUa2wemv%mg0eLK0Ze`5Wo zShb2fQw|AJZSHX6zipZ>zKhWA|smp zV>jM%mv!eCT5l+0WbWT9yIb=`tt$36ajWY~DWShyO0>ft2cAxD%jD~gDRSj@C=j7K!AF@+(@f>N6Cr(4(_`oOrE;|w|p)K zLCO`F_Tff!e8o>2qZ6mTyg@CV4E-pa<0Ow8Sahp5CM;?uNqhzyNOpY7HtB+~3e;q> zzHH{+d(`xO!ltdkI@V(kz47a`F7BoqjBBRp%=L0G#CwnIG_~L8t#bd;`an~t=?1vNW z$-!GWBTc7anLe(tUP`=5tKqxU4QD|GF_qbAarZ88z`s|hZ7u%2a^bSKph?Gm+WemR zGIn027uKk*vJLw8%C#q{T=on@*+5#{`bmJ1U{1Kk%IacMUqp9!(zt2SE4j2#t2J#!CG9wD`0MAIeYht=Bv27JTD%?-ouvq z$YIWclIeNUCg+qyJ(->eXF(+uh}BvIB{dC;QT=Kyp-)w=qHgw=)fTamW@QdLQ7S4M z%}>33khoCOYCNASoat3@vT?H6&)LkONIFrWw~G7f|EG}i)5D6cfInP~O2(D8>$$jA zO;VOzmZ!aTFR56p9|&nm7Pqc4F8s=G_&w=7sPmw6!AkA4F|k-Y-JE1Yj+put$Q=FG z=k(E5uj!Atnq5a2ufpO|?=-QPthz@e|jQc9jn)X8L!-M3! z{jo}!r%iwT&p0>WtLogOQkz2krs?WA+RTl9hETBa4^8pAVXSF-K5N0aHLmXh^=&1z z|6bubftp7q+%1;i&-0dXv#7~qzaPNb&GSCA!SxI#t`SKaC@twk%N+ghl@!HNO~cUj z=~&lnd`^&&ZC~CDZ?1hh+r7Mdjg+iP@CV@{oF5CN@)0M>yH?|TQtUHWf8;1oU#&_xL!UO#@d2Ay3;v()wYJj}1h8GK`}QG6U6H@PtobvC ze4Q6aKGzxXw~<2_N8UI$nVQ^7# zxg^PRvpmT^rMSL^kI+$7F9=*0@RNi^vfsPN78^C$kiaQwO?so&=-w04bV=& zZ2s&Edf5xQGxmo^-+8?9R99%feX29`h12@kS=;Qnj=0A> z+tNU?lO(jpu_Ryccm+vWYZc5>^Y$H1JpqK7fsP&Vh1yew@0^mH(pt7U2Xip9NW)F| z(nLmwW1p<#<4N1nATPS4`A{T$D~|&1d#WqxGihc{=?|?xsq8TA=h5QijxIVrpJe4GB zBp1}fvEfmkpmKZf)!^-UOPSv@)K3I)KB{e>4(>tXQK9RE&ZTawxq*b_iMX2VOrE$C z4UyT9M`Gx)FSmJ;x{BBXOpS^z^pY)rr>%z&6aBW_px%*^$ZTJR571qo($Evgk3+b$ zHYBg~jobv8&9=n_DkfLr8e{V}12V0>vkuSoW$jX3lOiV-zX1zM8$=wn! z41z7i_CfTpRc%yV%Sg7^ga&&Pg(+>qJG)R=x7&Gotm3}4&$?9$6Jp4kFEQvo1gqGb z%Zfu?4Xx{JonZXAL3L%r1WU_CSA?h$s_~^F$-jNyLOeU~E%SV~Zb zGY728+m45a57}+i#dHrczU_ZjpwO}i_w(Wf>LTss3(@XlwLA8>mvyAH#4ZY-qONUd zLJI{qyvc{6*Dak~)FiPXwgO+7#-b>fz*r3BVjW1w4CuwMzP^`!<(Qf3cq%5!XZT!6 zNqxnM@9)zzUu9FB@6tqSj!&KN@+HX2KC=*?nsVsediFdyh>=6! zD|qjxBSSMpGaIlkO~59+J(8ar<4lGG4idXnm;*+wZ9BAEv=Y7XA`bnWAX!x3WG<)9 zIc@IX?@f$IwycfQ_FoBQ6Y94C-dBcr|Ype*f^ zx&do-z33yCp(P+Z$esB0#=yJk2gzO~K)wk>81EUl#E;N3Y{9P03p{&l6(&ci`Y4xN;LkF1Alk1yHf`vo8X}AM`I`@ zYo9)nLaa~b#s7!R(r*X+y?(Hxo6&vu1R{GuJ)-HaZsgNBG1rQdkxQN>47!u236<`C zZjBsPY3Ol3e9NSEFBE9TGXMf#P8^u~WQimhEorci~n7IJi8xb=4qW?D{Zr-k;gu%LN}!7Kn- zGMq}3*;l%|Veg*}4vKBfmpwbJ$*Nf?lt&N=el*|*XVtK%H15lh~VxByU zp-|hO1eCc(wM-G5RsZ+t#od5ZSt(KGq#d%l?egBKh=H!_i#+?7_Q8c$Oj33$#GkPK z*>9MQCk4O~{a@^1DUse*t2$H|Z##}%uG!;ch!LA-Xdp+VFu4p_?I^ADdt^~Z-qS`2{OvN<&@tJ&=p`_G)+vdsFgj- zu*(uZ0lp9ITO#4X(o+?!bhYZbDuq*)dDanja;+04#(Yf~V;{wmz|uJ#vMG`GXg0FS zo_DN#!;F&084RrumR1N^!#Yw4hsdPbSmYPkOw1V@1VLX}N0F2J>JGw>>szS$UC`FE za&bEN-D&o+4aAAzMA-@nczA)nVRyX zj19VI4P8EJnCHAffH-8zbV-@B(JTlXnn~FbBz4wr7pMyNfC#)Y$*0MDKPj{_gwp;y zrC-y1#NhyT-19#o;2af-U^~ReQD}AsSKEDfb_pFo4CLDaf3~?RSS9UdA=aHgBxs!^ zmLSFP+ZBnXAk36clnYOjh4&eiL)bF^lVmDh>f3@H>-;OdmY8m18;LbT05GDSfo zis73(z((?wO~LL487pmRvw`)3QwpHnV}~S4(_HIBViE^~3H2n!afX*GzY5q9XW7II z*86IZ%@JbB!369o=!4rwI?nk0F+enNGC$Btr{KRl4Du(j)1@BBG%>)Aw zTrBqU|21#EP~8FrTZI7y%@c`Y|1{?SU8hD}s?Ysh#px($bA;_gK_V)a&Y$BGWW4z+ z3Ug`+q7MrW)-;baHkSp0;kGThm_hQYG!F=B!@9smN5{bbUUAud|0J#Rt;~E2@ojk% z5qa$&N+7q~P7YAoAVhaZ8^71t)a+sgy>?6Zs$Ou5p?B9)bUVl3NV7xm{G!0_E(A$+ zA9>9_1v5aKDe#?V2OhJ5YIYg=hX|#xTN$h1y>sRU`yAMzg#dH93qbfPY+qye4YuPQ zZ1|sMltByyB=Pos_~`ek0sVqoJP!12CsEH_cFQ0HvizF|HV8*Vb6(pUqpa)`$xDu; zXQ&9Q4#WlaLv}kt81&H~dikt_rAg;KB`PF9+9~>CFM6v{51~yExDYr67=s;d#!x_F z3Zk}7CB+igJt{}xPyW4<+Ghqqg@2-kkzl9>UV**QuLCE7S7~%~bT%;#-R=Y{)6Wlxt!XmmI}kIHWSm8D;-1*0OM zlROTjud+Mm2I<}`6aY5hT*0)u;mVPBz=Nv@wE$pnbxueF?2Kvfp z7)?_Fd)oy%#dDnf1fMhDW#IP7OBE!-_Ao&O06tyENUIB?IYeNewpThkfe_99%~xig zVaK_$FK#7^8w78Ci{yjr#oc_3P3U>Lt9ZL`b{LUl^ByB*U#2s-_j6~20{t>l>aYnA zx&@gaOs@xG9|0sGF)&CUI_?*~2x z(QZd59O8j%Iqz-7IVt~2r&*h04n^N6xxI@Zl57CaSP9+UWJ;(LJq0Z%@W6)bJ3b1L zH1@T0?Q=N2VSm_%o928@H5tG4|11H}<|XHXk3-k!FMwxHDb;r*{;R%oo$C6P|4Q#% zrPSV`RNn!xfMkWV&75!fN8Q1fHk*DMm^e3-nSLxI=@rF8%dZzLLofh&jsCYn&~bWph$V477Kxp$>6X?$a-tbZ`B?8*yI5jqyPCef?K zM8nP-$=o)q~Et zOc#^N)1-@~m$%E<*+r6=gHAuSL5f6?l}#8IN#>ERAD!Q%MUt9~SXWjd%TL9}I$TKI z*;E?TZY;yCaW^ZQ%iT*AlzJruxZh~mDS`2t>@MP}ZjChW3U-P|KXKNxXj1`7->O2$ zFYD~ELG9HG_g5jAmsfUO(p62f2)yEn^g8r@c32rC@*1-?4v7AH@Obtodpz?_4~s*8 z9y`0J$%ax{#gy5zCH5$<0fm`uvTyG-Y|^r0A$czhaaqtI_S|cNP-58P}f$Q z)!|rdRc^DG41>nBb8Q|Inds*pR(gS#4+)PKPi3e+?qm{2gAw3{>vCv?j{MDgZH_H` z!M}-R&DUsNtxup>ViSn~`VbzXoGix$JJ95MD9Z338;XcVo_zXJzyWv@=X@}(_`vc! zyfVUESugY?2vWU45%ay?f?uN|S*fTIgs#Aa zoP!iiBjB$)`vDGm!&B*QJi7hBa_-zTg^Gs=*CUE*d*;=-9xCL!wJQ_r56CMsTVMs` z^9@J|DV>ilO&pAteI_=F)QAV?DAwxm9b)G{VI5)YZn(MgjI#@vaf+D}JhRqARn*}Z z>ob+{UqGaTJSf$OG@db>5^ZR!26J=M>Bs`@*k!PLpMb&L_CBa zKbXuP7Y3rWvYM1>1b@l@dqw0ad4!YZAnu=Mf8lxf=;v(=?(Tz@Yuckna684(EUAW+ zgFGIGY%m()?M&0dKeM{7=Jc}fw;Cm?pA!7|@Iaf(_4syw*S}ZF;VATL?hy)rkAB=`9qrVyBg#Rp8kx_gw)&}>imvh5(mbCWf z5>1JtM(hxRhzh9AI5zotOBK>NZBH?Y?Yz_xXY~}dNp}{r>3DNThs*b{DfJ*xX*Ms@ zS|-hQ-0_#qLZMmEdO}l4@J0IB*hS1==gW+AsEFZ{^wWfkfi0PV%g%qV*lJzgPl7=0PX$9pb<@uWz*TIc$;SVl!|6W@`Ku` zeNp<4!s^wdXbv82j`QbCR>Q$If7#p>3-E2Z+E0mEZ&{hnZW)ul9E2FpT!#Ml{Byv+ zSE|j{*$f6Q6DdbTLF5{-t@FRkz(5DHJ->uNZ{0bKIyr8gAJriuKcInzx|;uuW{fh7 zTW|lpV*1$%M-hQ2MFdwb|8X}!m=;0y09}FX!9f^}EhrPP$~5hW?+`X3L$SQEv0wmA z-0Sty=c_1mz$FccnQ3?@ZzWb|EB3z2UG|Jv9grVlCD7lXsZ{01mcEV-fF@RlS8ASn z*cjbO7!(}Nx#DL=%c(h@7o$SbBnIhM{`nvIjN)>Q$#Jg zL4G=0P2!U;2Pk)Me7ruc3S7o(v zxoAb2bYL!Ijph>($(5e$jg=T=OfA`oktLDxeh^Ei5Szx#2V7e-eM|(vrz#voYoBwt zQzMI3Jr(ZZp8Z&)gYyX(hJem>1i0fU=k9{USrXxtAqkka00X2X?AbUMUZ=58iWpKx zN#nq(ie%Y2HM?GCxAlOoF9r}P@xt1NwXNo)jW73^zEL5kigE3)pV(~wdbuSSAI>ab z`38S`yVXB?&d%1-jCV4ch6^|a=U+&rD>A5>ehuzU@^29spmRtG&MFgmhWdNi=(6d& zo>2&?IF_GeWIOzXYld~ToKjKA6PdSn=k~vp1kZ;85(t|YO$~fO~V)j!G;xK(zo9|#k-`I;> zQkj6i^d}u$D%&>qszd#p3?Fzl`rHVNuiRU@pG@<&&!*C%KIl!>)i)t7v+>*k(o0VY zRM&%WE|?xOvR{Hc`3M<2Uv($`>y4!`i>A^u*P|aNvr^{E1d0=IGDgb>{a^Jp^gKF6%$^?elWk**x=};3bMA zinZH=rUyP685UPJyIVT4-F}Y@*6oo+$G*oX3-dV{H)z&-_H>kDdy<*VNO4^H8DC!- ze>1U62nR};lS+8PTlImK#eHi~qq{bRy!k)vRaMM)ypop{_+6iu znyCC<8;TmlSkGM*d-Ek1^kn=8%bl}@$LZU8$2)%q>%HPt6Lg-_Fj7GjE<861z}`oh z?3yCP3(qeJO@ow*xBFd zbYDF3xbqrIA`{-!+LSTB{!q~D(qbnS|B~QCb@Ed95LW8Dbr2NEech4(zjcCM6zjgU z(yj;Z^GhANDUNYK%c_&{xy;-P<^YYNn3fRgra6M4QgfNs5tSlp{rts=i)I+p!a2stna@L%Eu-ld8)?%^nhCDH@X4dR54(@T#X%nujC zNTz>H8DXYY2@gtyjW$;X*9jEe4j*`jvcuPyRJ?qmCr2hr+Q(KEb4FLi;- z8HqI!I`E7Z-V)C<-B>^b4MCr0=@Di&3v6$0prl^;vge0~&! z9ep^Van0081VYj|@Dx z=@Y*TlVq+6WDamtm$#^zaL3Tq99GTG${{e3=_CFuX3Y%1t|ktd6u;%OP>KE|T#6AG z;;7!m*WI5wT#~Q!#UHpzd863opbl_i7AP94AfBwsicG8%b}=A=@PyYIR8|H}FyEEv-Du6wmGSYQ*u6$ zGCpAg8g0o7d=xFVZ>l9%?5}fhs|HCZnSI`u#`Zj8ZG-Nq2k+he7w8_g_9;Trx*i|0 z7CwlY7!j)g&O?a9pK*S%7dmNFet_3P^U5cj$tsmeR za?TUM#JK~1wl-IK(@KvVEzS=xH2=yw@2GZ|c-(mHxork89B}u+3~@v*(Jl$X$PyQ? zgcMh!i=v?jLnuj&B}z$70%1Fbgem-^UL1RwZ@cqSq-Ah$Bl%No{9*9dNoB5+p4*WY zEVKq_{`QJ_cV0QtXU+i5TMkhv#Xt#@HBgnV^|gb)IBC)HVn9FZtW$RMU9K`kOMA@T z;u513O*(^nn)~QM=en}q)_8p6+Y&zattb$iS@1RQ9+38%y*ER`T3_%?3^bOj;3I_b za2>cA^+{J{{GU`6*(7mcer`N}{ae?aN8rXA;Ku_mklL`}7lEBCD={hmD5Eo1egvDW z$7*?3Ya6(1&xhHDgI-V|6X;Z~w`F|5puXK!gzD!WMG+$sb&V{IjuH=#K-@Ngrt(A6 zROT<)JrO`m1aIp4LDvxe=d}!c8&3elL>b!gw~%^|%OhH0v^PMJm*CD?#|!m2#!(_l z+8AnS>0he4{pC8c5I(xKnguXaAeOjb%k|ZmT=nDJQx5bcgnzmw>fT7_IC8WK5t#)Z z*#EN|i!Y{Gjli}3G^YaIKv;17S>~%n3oqB)IF(VGPjvApouFF7Pr{@}$t+O+JMQcH zTt9g)1mYE=f`!=>^-|yAw6AEVuL^Syf|WnB zp!7@sY^T{vx9kK8Czc(7&e41|?TQ#gU}V%cb}q0{1r9xm;eaJIGQv>|K{0pG^6;+xS$@ ze5!eY@0C*8Y(b{Tm}8+N7%=j!!uv4++j_GDz`!S$NoWBOfDFUOw*WOdG@sI@FkmutNE2S8%X@0K=rp~vk8=_oT+^-+xLWA4fN zklpsUOBJk8r@ri+DNd(tI;MA22um07_aTOask!K}7)B`Y%s5^)4R84$?r{!7Q-A}+ zlfzvHv!sFf}F&44jSH2^y^ z>V#;7@SM(qSdCFgtBw!s&Q!*Ct9wKk{p*9?fJn(8m&_OA|6cj4O+6QNY}~cTzv3_c z@Y$*C0mwOV^p>bURp(*nVi4B)#@?Et41}V(OB z+}`@%D{rpRfUWM4qnN$N7v9%HB7;Hq z3wIV~-02ly1@Jnwb)roke8J{Z?!gz2P%fDVq|u&@CY*DX?7lq3tnhHFVc2;Pb)wm4j7M zd|DErNQ!SFbA$a!I<+`tZUmBV^n{)iEAuX~oO2Y`G@a0sM+6PC zKxeC(NGfr&s9v>Xp6Gm0eM9{IiaW&afkUQEAkYpw#I=~id|$}Bu&G)FDQl0a98-wa za*d9RE(K3z05WAgsOX+eiFq=zF?@{bWR}ENNS(sTVJP#5M%_@_ITmb+yJ_&bt5wU> z>#EPw5(h+Xjfv?BTkfjFeqk8_(*n34qP(5^5dFks(rgnt-G5R;?9a`n{!9;FZCY=@ zU4|li5dvz}ugl1*g_{S;qiN1f#YD^XHmYKT!K#gTH7vP?$^=r^EwZyRmD~*i_|s*|bn8$hwWm+<$X+S^S$VKb`4zW09S0HX~%VH z5q)(dG>f9Vpx*76KjJSHVges??Bhky)injSEDeUBmitAx8eA}SQy0fGtd;YE|9E7I zm{+MwS4DvZSej-S;>{AxST?~w3b>KwaL9-_>!|f8x?675L$!!=SP0}*mJ=e@btBfA z;m_x#;#ZPH+T*J~$Lb{k8n3%8eG!qy{zN}vNUN_WMD6-R?~T!5N}Kz@c!{Nr4*~7#9{&HkD009btRuIU@ae?t`X0&K``6 zdo!sGGba4gU?ub!Hl_=*-t88M1l?W9<%=E6xlHEH_rG2?J)`?Nt29&er*RD!I|wmw z2Wql9-Xu|?qht=+I7|7d_UKehlW3!1C|H1@to-)tQN?jae2ZJpVZKSWyue814HiEJ zhXQa4m>nFi1fd;f1i&J>zO{C+H2eiTqS+^Hh;U$2XuWTTTo&q*R)8%qPU;IzjOp@l z&07T{frC{U@UuaIGhyDe$;4JX+h`%P9;iM!v5#AXHcXmS)Q>+-n_P*$AWj+6fYbFK zLGaZ)v@DXS&Mb>Lc3d_qn%DAfVAJqi^FcmpynF#8K!qblwT&JTbf_TcCt|Irc+>;; z%-74h&CIFpEhJ9mL&jI%83QHUYz4->@1s_^raOC-7gB7qZdd(H|4XGEPj`=LB*X8+ zUCs(oHvw+0cW+n~S*!=X>SZMM;2;F_<3K&bWa>NQ+{~5OwLI*-beB&#!-Ff`2Q~(J zZ0@)5?_IW!q_7?kL*OTXUh_1JD33UJR6*4ZjB><{4KC5BES%zH8GI8qV_bBQhpLd0 z!Mp%BMb`|`vUvS>Nw#^@3G?V{6!xssd?Sq|>TBN0F6y4|M`T|@rJ{@Gb<+h07C)f8 ztd^W}CgFk7-Qs#C@J8AowbAkc23Yy<9gxdaH%eO|yq()M_Ya5uIGz3OpQOSgW%`Qy zy3A_Nq(l$twXw%s)*fg`S|V++L}zl2&$S=6YMjCZbz|cglRE{>tDz9_zTpDAGiu8MI)z}$^ZlU6+Zw}ta>(BJ!F*e@ap$c<@?8 z3ek`Mo{TNIze$ZF2s#jx2^2X6x(v&dXTn<$aeDKiyzP3gHxtJ=^z?p!nm5fx>^^q~ImX zjE>j(LE2C~aJB?`-b~6R9Id<_PCm$feWV$}`Y=}1Q1d5HumD1%FXJ4m$C`tuRWPBV z_X!AEDPA~sx8M!Z2{e$6W%REzR-|c&b%eMDuw)U-vAeFceO+>17EdF3j- zgM*z+mT(R}HZ_gZ@0Dm#YuY8P7=Pf_vyZ^oMzw$9ULABsQ2YGlh41?3X}d%p<~+8{ zx6k~naqtXguq0b*E5c^F1^NaVmv73Sz$VqW0#xGgNtR+xdZL3jZbEi5!JL8k8>@1r z&>o?8yS(_om1s37!}*8Q#_mz6ZQ+_p$1*+V74xqouS(hd{KZYtYRFPG#&-1?UN@w5>>Ew z6mKRt-j*@ZHBZi!Vo!Ms;cTWl^$oAHlgY@)|9gyvtmEUy|JeSahF0JnYRA&Q3UuLE zZy9D8=atit7mXG=4PiWX%slsh!6A+Fp1P6Dqi?Ebggo0 zU;n}yx7Kpvf_91O*$zN}E*u>eHZ<)?trc)BhJnoMEN|x(pA-^iRtVr;j}V_E3GWEy zJ|R7Yd^xIEMB)HdFbYXs-LFJ`v-sPjdjsN)$1Q0ZwG9YJ9?A_G%<=G|T+CC(h8;}e zw8-8D_j?OjCj}{%ImgXmyyq9^c>-CH?(K}O&%#3t^W|8;ER1f0ei&4wj-+6+szyJ`)$9jLdHP*?S<`EbgIfgMfc##?Yeufl; zF2{J#*b3<}xL3Z1GvIj|Pz5qvD(pZh4e~QseqVPT1O&-QVb_S-Im&@$)=ZoGl&-?_P)gupRS1!3!=5J4W7yX zo_DLusr}%DABE*Gwqr@6_`T*#;=H_6sIF3&#ynMe>?9itpgLqSg^KGhv1lvV`S2Ys z13M`?Z@54hdv||Y_6y$g(TE87APSaj)m%C(ha8vp@5F@8UQ|q<*K?nuZ;z#ty)YcySR5pY!cps9J{Pm2P%XtA^Y!K}(h%S?N1Ws8V`2hY=?u}Kd zVQC{33*tTnuGCq~ZxIutXQi6GFdZRF1Y}m$jFL{oWot6>j zA{6yMRF{>_Vl&;&y#HDN44$9_9%DP#($)D&wF;L;wzbMb4#8)Z?K|KS$$V8iJh;}{ zc9En+b~7w-uMwRePAj2jP_-~Rgk)A6COJ04YuMANzQVPy(Nr6yT;s-h0*N#yiY2an zSncnQ#yk3VTS@Ed`KlJLeS;kOg!D5I0^l$~uotf<765EIkM80Zq@AB*VjO3gQz0t! zQL;ZDlHVg;a%3>2+2>$!{)IU(r3xQ^>~56jaGtGHfIORb2-86KSW2}9pi-Q@Pud7p zp{+$ll&mHS;jaNczrK`A5Hd9ei6#Z005hMQEoF|?&Z z`mu|hA2n8rN@+r94S(MGyQc$BB&-a+b>aoAYY2urS<-TfjVx2~rmOzs<8fo@tU$?A^ zTL+j>r8f-R1|MS_bAPd^;yIb&m!iQ5RjUskF_UWs!LD79Y-vE|u`f z*()lj?%Lh5mqev+;0%yBJGYrwK@tE$`R2p!i7YA^K{BuD2?!y|1Ek5DW6djHa2!`oevsc@#}GJAX&e-@q)u`Ti&P^1J)!1AU3b%TGXlzkgl-LHiCiHnUl@%mWSTRZr09242_CRe}aY~t4R#SjBy=^q4D8(l>x75{i z_%AnmtVoIE_1T<|2Dm)0GL=)-6z8b%|DotSqnha2F02rGF@)Ypq4yR#LP!Fkcj;0B z(xt0ldFeGkLT_pUB26R+2r5V?5m17N0TDwHgCe4$qVVXK@8A5GwPvlEbI#mnpM78Z zdDN0HrGpwmOw?_Un90OVO?p6FHO@&(C@XVROR0&Ig~a4T2}&QJ1P3A`q-H$xKQxCk ze~I31CV4XT@3OZ8Rr|e6!i|&+51`%ZPIm2TISQ8kW|^BPW7kpXgOli#*cCYnw^zf9 z3bEGpvT4E(>89J6?!gswUz?I?U(sKbic7&6i~Lov9we(hfr|C<3NwZ#LUw6`^n?`< zGN)FAf6wRsB3181hEf5nY+9J!?^!M>ZV|>-D3)OTdrS&nXF~)E?K}xbPM<tVgZYFnq8jFdi%#oLeOW-j(Gb1QM4B&gwG zmyqH@dqWaBR)=v8XF>{wa8(Em9#J8mlh!{PQ>a9>RHSf{@pO{?{8T=ak{0|tI^H#} zG$z_`tVppgG&}K+5GM~@MuXRWvKvz)8SWb``9PMihI?ugNILM|tH5_3BG#TZD@<{_ z8oAXxvaL-dUg%tH%-^7}vRu$t%2v{{cvlD#i6;_Zher1r;_3(*4-L zLp8~D5M0mE&TE6md~(6JvZhu&5y|O+H)Mym?5J z^&n7HTf%=Tm7_d1iWEvz9_FXIR6aJjYdBcxS{EEJHC70?k!jcWQq*&(ip{0K+2L8| zZ?|BlK~3v&HpzKeg)D>eoUQ}gkRha0cBNgOa2{lyv&mBtU&iK)hF3AoAB_jZV+4{e zGOACRWt4y4n+L?)Dmhjt{57U3y|h#>)zysEEKxS_w;q?6Rx|=$@xWbfjSLA+KQXJ^KmI5iA z6|9kiTnSGzeYHVQvkkJZaf?XR8|O-hVt(%VGWfeJTf+aZNbID*%P^vu`>DIWDg(lO z)mqdqn4Dj7VQ7lj+{6Q=!PFzTfqilH)^!XCDF`R_{vq{P6*=;_i9-g@-RTP+8<_Dx z+fh^Okpsa(A?hKTK-i5u$CH+WIA2PbO63cHeFPuO7rN@RYSxjKI~4wg+o4=XeUY<3 zIgGKiyk86|uX;D8n&jC0+lb$fQUE5biGff}{40{xxxu%>$NLvr5<)$paD>I1BJV|@ zuh18ViiAfp4B0eX>H_%-u~08XAa9jBo=eFkOO;KH4k|=geIC}kDirdFzBX?uK2#t* zrZ_pxus_hS9{_blT5rr8xuljBq>KLi)+^5Gz<=eSI~CD0|8_g^v@pbo39Vx&UnIWI zm6BNa34I_!3ENQH*$_wAa*k{LrCt$c{>QH(259Kx8PfQUd;=={_*(2YsG29q3|a{E ze!dwuR4fyj@Lsq*qz1s~`Q`SyYn=-cSx)G{9E=tRO#(yEMy{al_&3Cj$F?X+0<9wxxM7x$xC9Y`a!2ZLcbC=4HcK8fHT`%bUsuo@ch_F)_ zY4l)26?!@sGgr&iIBpg|eu>WIDn-3Yz|UVqS}(kjfmOo}bbGJ0w;-d+*v{O)C3Br? z47w4TAWUtK2P^Av9BHI4>s=Ly%fFe%T`kdsSnb%OZnSLO$P2`Az`dnCf^~I!l;2`ZbyKkQ++% zg!YuspBbAJO^Nwimq(9Zlg`~ua_2`9c_0|TxAT-6Z1FrI74*ku03eMAT4__;Sd#Ak zsPF;p=L2FP?P?)f;bKT+hQ6hQf}LlNMx8MUXgvlwQW%l}qJT}$Pg5wfAc-z;EaJpK z?%gc|2mNCb;C|rzOs=_r@hAbY;IEpZI<@f{5>b7p$Q>eHsiqIj;28=|Cyxl8UN+C% zr)c02%?bg4g?iB9pj{Sw%TBSL!0s=np^n%nGXiXrUieP#HP!=8^!XA#xH7QhsWz;@+~lzGVg zg_RNk#lt((;1ov97S_2I=&7o95t;J^ktHpwFvg#q%+4QBp4=z1i8vvg*?Ke2k}IJS zl)f*{l(w0WVayBdJ^ab+f3mKfA`Ds|YMFznA!SE#&s(vpT7>;cZ=t=WoSGy~{Vi_eR#A59KFMH&onn6K7u~ zIBqv!@`+-?`K)vYFW8{08`gfPZkE<^MT`B655p zcqBYis>JlJlb$o9csiVB*D}*#^pv1Ru(95+>?H1?A_QccR>C+!+NaR7h6Qv2i?Tie z3tGZXq%&7uFdEwPBoic4o?sNelhmaW0pcivS6frzgC8JEUQ@`Y(IeM(rulh2P_@yr zor$EtK6-*6N#cgn&OUPCl&UQ$|0%Z=rWZJQM?!qUOvd8*%ziDn@h#rlsmuu>$+@jx zpLPRT4!Z$v$!Dj>ITO2D(9D&bnxhoyiz3UI=CIo}O8k9Sxq^=c9#?ciI%qwmaUp8+ zTi(Cc&NEi|B7Gnwu6c&|6=B6a!)&Ypw=F_VIv9tZzJOjDYV+QHz9}^;?jg_d5nbdq zrRjy&?G)fy!$*iiWg2vFZxbMM`ILvC|AeF~MEnIF+KMF8A111wxYhCgHt|PZ=EI6`hJ?C*Y%pdAMr7*;GvY1BPmkKP9 z_}P-%gOB^G$05fuY~vP=y$1z1zG`hJ(?cVtopbTG%)6;jD~Z0A=uY7y7R2}w^w4h2>7mn*LS{lvd=mN$GfiUCNp78M7?)Kj zzqL45pB_UYr+al^M9Fd3zSTS($rG|Tx=f@!fi$B?$X@a6||(}k->kE^0tE0N)Dmn z1G2`qTVO%ltXBR;oVrcw$d=5sf7qeUdfsQz>lR;Iqb!)X*7LAxe_QtYt$R0M56kf* zNhz9FYZ&W&C58i=F+Pmru95VGL)}MVA`vLh z99QNjBi?FKhs3 zeiZnziBv0C(?8J5F_W?8)c|d_IB`>$(xKx`r}eyEt9!Cp^7vk0^}F}2xRQtLYd-Ud zM8%!#rossHZol+X1_R$4!(7D|1(35Y0XG1HEn~16Y~}}W!}>&vrDVLUq=-3goz>=5 zBTtI8U?i+SJoem!w-XE+Wd@3=8+L1ze%_qq@BlRSCZ_{F4CK6lVkfJ=61a#RGcYKr zP^8;G2EqTG(pwP_lWn%Q4f$e|4r_@1-3+@dIIk``P_s`6R3X=T2Xy;p<=!rM)Nm{y zgv&)+IxXQP6nmJ|)#{p|6Z9HTL7ZB#vgRsI_q4VqxM)P?ISfeK%1v6`9uk}Himmir zsR3#1Ok6`|Ih^z@qWkpIBoj7?_e5FUFDz{pr4vE!Hnh-WrN2hBNJ52pk?+o+=1@4XMZqR&Vl*+ z{3j=ZMYG|sq)Ig0j^(aalM-_% HAz4A6DHj7k{$3CAqy31un4UVJ5<&ES%iZ@)r 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�nRFKV&Me3l% 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 aDQ6k(rWNv0H*Csie|OO zP)n<`6;JZLXVJs)`-rMdZY;N87i;s(Cd9I6`-6tT${ELR?SchEPZ+%YsD9v9>EXTM zwZDcQk$646xe2+x;<#Z+>r&FbIU$`jWVle{ZU)ZW*JYt~0o;WTA=U^B9UOWs304ica^&2jNT*5Dmei zy+1BGJSP|})4E{Y`b<85Ru1ShXBEI80%J6YI-TVu4n^}25fpkRE4GVVV9#oiH9P&o zcd|4?oZmEGX@h}hf&T!wwi5_YQ=C9-@ZDn=17F59`+D+V{0__ni?vISx|`T{h~{&= zDAeq^A;2}^!Yl-CV+{y#FqJgchc8##9r&?Bc!P15h41xWovb*@bN@#$BKBgGj7P?d`!SbhwfU0!tOu=*rPah0u-Mz_e6KNsuNIj@8bQ;DbBC+yol?a300|%9T}qaWFsxPk5@2 zBe-XgFz_fW$v7*6f?jKp4J!A5DCKuBD#cAp)+&qfKdUuSW!Ap@I7z3OL z9v57%#~h9-y>Mj^Xtxg-b-+FFeZ&AaPT$5zgd8KY_XBuGbQp6cx(nv9kX_&MKBf@r z6m;(t9LDk7$nH}M3JMeBeaRD1vquRi*N-_DXuP(}KuUf07E^$6P%Fl%gf}1D+-9jv zHfWyU0CG2eV30WQ=H;rc-s=;pY|0BC{dJsQddM>Y_f8^%2R3hRuub6&BOSeFn{3>2 zHp$0&aTyg(UgZmPxj+y-aR%Su^^X1B>A~P&;Fv}J{{V0uQ)}jVG9Bw)kNnN(Qx{m< zglligV-R$Wr&Afi8uB;=ySR6XAyoll=BdNwGh7Ic1*@+HASEwd;{kecb(AP6g(93@ z3?xKjnZ?ddpkl&-^OGo(T^RBW$9}moo+$G$90DbL!UT6V4g+@3(&Hs}P8GG&Z@GJ% zIC{;sY{EzyS}UCF2c9MaoZkLnw^MxLO-tK|4rA{#EC4rfX|Gw)*@*I|S)^wUvrs1E zd~sSJxKS!8ZNe~5)6tI4`%Eb}?u|GFdAjIKB!Q;Sn9+gg;lL=D<}I{_C@hEkV=4-c z7iK|eyjh#+($ZxVu2fJ31;$Y!J?lDDu5eWw=l=k3r(PHCBlS8g%L85)5d2*F&F@cU z4IjWe&uq9nqDSzUuy;eAGfv!Ed`#IU?u=RvLsRZ(6}_wOY=161i><#oEg>ekM*_#Q z02Ojxc`=UQAOL0JHfJsI)c8`iQ9`%RAE=tSPs8fiF#Luio0AIyp~Hc2 z4LzBs=S0|I)!Ib0aV~=F@sDJa#p|;x<5S{$kO0tVnA%?X{lSuJ)5ysbT~Pl3k61-? zw03-CRTkOp!J;?E&0La;+(vK20DSw1w>8?#t>%rW;}ZHN(}VLNy21W20FCi5$dSP@ z@TmCXH!_-x)p<2_#wLrT*l-?@IUEw!JB&4z59@JFw=|sGNI>PhRe+!K5*I{u>4B)* zG|nnntO#-Oj%FtS*-XD4n8i82+cr9D?kbiG#zDZ&^8SYn=Ktt#70dCc& z8yPdaf{4zsSl7Rq6;H zB^02z61qBaVjapbH71l$&A^J5Oyrbz^~D-oHR}l5wF%jP4$G=!(djO_aam4=o7GOVQf_!GWv2P6Hr_n$_Vl(7HCS516;bF8Iy}c@;UG;9l>B zA|+mCZU7s{$&7mOz<-=l7I7vTHaHih;E%sEZd+|81&3N;?ow@&lM#B^&LOHZk1#`4 zq|x3M9uwXiQB|wPID#v@gwT#5M}|!(6P!?~UpSdmEHijiB3Nw23qYU8{{UFTj)<@M z#&i+kv@ntza7J};PE%d9Pcf@^$Kl9Ddne35B#A!jHC6&wtU4$)eQ=M;=vkKSZGni~ z$9|3@zfXwI4IVRvBG5?TS+OX_uio4b`_3+J7N}zesFIt?mC!9aa?t(&?40AQ^%iUS zU{G!c&)jBKtv!BYixyl{Lj~TX%Z+Q1>Vf6Pw6Y@?i7VVceZYcfo18gB6Vn0-T4_$a zz*i7~eZxKbYy98@l|1z3vy+J8(Uu%iKl#<$++qj{WEN~cAx7l zs~e039q%ErPIDbp2O8_sDMY})KDXXYHap8~OvX|TdN6G#!&=1ZpSLI#RI^!NaPRnF zAzHWazlM|Fod-h?NI{O{%$+To? zhzg9K=)icerA(j_<3t4A!l|f-A9HR?$2h3bOhN`Ezz|)cVWkS2EVv5X^C7i)Qz(_1 z)*4VN{9r>{bcS?V9H$tPLl5nXXg2ZKWY(kooJ*_6k3Vy+CE?MX6&!+Vg#E~Dnt{V$ z40vI{tfwEWbPw%}ys7!lSHS1j4R)6xLd%P!9~HrYU(@~K?Qe!62Xj!!N)W+zT-xP0 zfQ~N2baBncWsA@JWmdni#XaTwGVxw?c8&^RN#xGOU`7L_H-_5M&46%uoa0p?!)E4C z+NB0)(fWIq(X`%CSUGxU6i`KDn_O|oa^X`(#m8_lj&|UXY#v_l*zV1S2|6?rBXJwf zCq#Ul%!=W<9{o%2lApTy$b#^w19S0-ACchs%PfX!an&h>;w7?6fCI}Qp%~Z!AZc~ShbDWB$$C4V_=JkvNXIH!jzMah5)vMZmVjH4q z-1&kxqN_8GE`zI(U}(R_a}lQge9NMW3H9y6ZVH=2AU^`VeZ-E!ZeWhHsGMflyWva~ z{{S9gK!$+fLe{_OhF)3ZWc@TieK=h42N;H~=-xASURL!FxV#bmS;PT#{{Z6|ZEqi$ z-xOg&&0jDYg1qN+Ey{je7@{S7V6YR7HwyjcV_u28bX`4D?k|edd&D}w&u`4V1P`V( zP&{yWh}~lrzfKB>UGDw;PdWRDgA!rDZqNjy2sA7 zk(Rb^xtlEH%hp0H*zP+seeeEbi3Dsi5!GMqhER@7L;$3`r^5Jw5&DzbG0Dj(m$WBq* zaVk5`16|Vs2P<7*H|vw%%+xzFQ10ox;(SvR=`qx8r(G@~1Y=M=dvJH0v<&B-Rxu)) z-U1*^!O+W19ILEmMh@H2mIygHle`-|r^D!C*f5k<;lp^L+(V28VJ}6%x4hPJ?B3e^ zVEZnkimHhmhgqoDed7%osW_%u=;0W-1K=Otu{^zXx$hKg7JGsSs*!VqCJ*8Jj2e;K zKe3g171B&q$)zpK$pYSh~G9?!?8#eqyY3 zhiiJk=$#|Pz}(R2zThuT7lpte^`T#Tz=YG;IO)NScK%KrFZyo7Z3A@0F1noa zoQgl5u}v9WWGS?8J4W6(n1n~;S=NSh{l`MX+-}ZXb-ajgd&=EQI6S}rwZQ?UoY%Y+ z0W{}T95CheFL>(|>qa#+_uN|MlQe@}{l=0p=OIx8U3-t+512t7w)vM)u=|LqZDDQ+ zvM}~veqm10S7g8#_95SHZFL>oB^w)2b%G$bIevS96h0V<2#acL%N6+RX@KFd7rc7{ z4)2(-Qqat+D@}d4gWleL<%Ec5SnCNZ+ou6kQCM{|P24mwDA^pp>k2AE3tFR|dT}tG zkTL<=ZullVEH_tf2vYrJAn4P^DRUE^Faou>;;A4okh^$rTFoNS<_vak4f-b-8rs#1 zg3_k0Y9Y%^2_%F4%o>OnpEGqsqrGD&r~PFtQnwHHoFeMCF$x2A39J+f8ie;aQJ=i7 z4rw7P)g}Q*KRa`Q9vf4aAY( zR~bS2`G{lVjB0H3burs(p~ofpl#wqNS1tiLf7=ocTR(GXAZnXmm~g{lP`sVywIAyq1=l!(v?Jd31=Av@;ZafP%x`*26O^Na>>CR9v6Upz_>ue&isin|Y7 z0$iSda+Fcb_Z#4Gt{mFJ=t=V(foJtwhMj}Y+!l#ziBW0joM07I*95o?t?1_%2?0y5 z@0Pn=zj33CenMqTmkSMz zzcGSs+jZ~e2co(_c*H`6`^g|9N0$+`D#!gy1w<0ixgp@tJ>`lTY2%b1p{{5L zC6&)td@$-NRC$K?ArsnhF>#6U~3`p2X5Tp z4pfmc2yw6H?gex~{kUyjU*Z_byJIpc>v#0aG${W7d{w1KL%Wc2fsTl&h&O1A;V_`? z*H|@DJSTau6quCuL0+Z`P(EOXYs31O+gOg=NSi|Oa+;)@Z#X4Y2L_+#9>fvg<2Ib5 zhE-A%o6Z1_>$n+Vy|F5B7dB>~@9rtm99(s&K0Ck!6`*;%UHjKq%H_Jo^bkgQaD?7m zDyK6>R?f}Lg^vTn`(SL?LOB?OGC=JzG?ZPOelZo)deXgMSW{^9&hVWi)6OIi2}izS zpfvb)E3fhs()2sh?6 zm!|6rvfWxU2%^NUONhasHwSPfsoRcBBty&s(zH7abxpW}uXc5u)Y;Y-yk@9I-Fb|K zphE&Q>T~2Ip=@H5))Xy04p`VQM59z+Ji@s&XqW=7iF!52 z*^8j2_nXbY#JMakjy!W~wK~OAgz)z)vLVgdV5?PP?Z9k0CJ)?^htnN#I^l75;i=oMa?n1K|gOe#1nXfS7 zr2FO(`4To`4(=}uMv|aTX=AcnVOVn?=O{4zaZqzjz3UB+Vrv!-nuxfe213WI3zjur z{+I-%SDBMkVO@O5XeS2+o$JOZT3vPS3PT2Bn3g-3MM?{&Hwf{AG-!9g{W76C+Tcj% z$*hZ~_vRwB2)HVAIh}crOCC*Ouue;o`CXYO2+!q%fRh{pXZL0Rak|zZMP4$*EDmt7 zK>Kn?IX3*tHC=hZ6vTA*F)qj;;B4JLiEXwvu5`d*cg%!?PNxPX7RM zf(EX~XYL;oMbW(_g#2Uy!`9%f4LGV$%TRERLy7y&KSYqjZFC&` z#A4pKaRm_rPqzuG$L=)jYe-htHnnD(~(uMF;uD#Ale*6g|y!bRFDKoi<^RC~IF2xfPS0 ztAJP^g~;UuIpM%JL+X2!%E9dCIx6vyO*tkgy*0bWe2h}6=;qBjLmjozXYK=5o&xSWbfZJ76Kvf`~K#22IPQiZ&Uk|x_b_XB8=r>7Tqejf52 z@xjSY$3{?|2_Fnk!ko+_b8aUGle|8$h7)%T#h#9Han1Z(f;7@Jtc{_F#wH0v+<+jNP$OXE@o&9}Dg* z2`nbk2kGI1a3QmItW>18wf(~%8x!e^#R1!8`-@9*8hv=iBZq?Fqk3n@5xW$p(u6M&AuDUr<2)+Ekh{REUQv_D9>Kx-((!Fso-48Y12*m#REYjcO9n=eMDiGAk zgm$&-tN=#TYk=*rXVU=Ld*9rJTK@o(0YX<;yBNt#*s6}cId)R{zH(`VyBMC(`NC!C zBKL;iAAM)a$Ekrzms;-@r$2H6t?OB#q4#__p|{7l1$LX(D^AIQP$&Cx4MChSRSj=g zr8IaB0l?!C5y-_XD>mdtw*LSbILhuPdBiwMeErP`eDBP4vu4T0XhDs*Ko0P=QiHw3 zz^pd<+m3(|a%GdqH_%{ofSqDOJrgxT0KvoqYsL}_d)@7DR0&(-D2uElowt>E!ARI+ zb*$MAKH^GKdQTV>-a#)Iz<~9|JOW#s0ygiU=H>_vU_VS$NzZ)XAo3~gxJ`o)CLER! zx1q9X?IRk71KMH0#OzO?*vUv&hny>TQL`X(Z}*& zfhZ}wwpB`Fb~}FJN@Kwsppwed?jivbLEbVKHtx8_-q=yVqjdc+jOT*qH491>V?ALy z$Uu|pRsR5(F%aI|Koo&f5*BRU@ewO2!Oj5;+pIIv@^E~{Cw+V~Xq7e{=OQKMCL9^q z+@1~rWtk7T=APwBG$NYbSgzc0%ZwDfv}Yn}Zx!S(w|H;-VcsDC{Ei?vml#v{zGMnS zlMSIjH2uU%g>c9sERJY|*E+z3YdQY_S+!vQ09%dd(sX~E-MTYZAb{sr0(9)}ddVHU zb(^&;aM|Aa^A^J6OP6UPv-riqN=IGcXt!JLWE5B%{%}YpzPU}hJHa;2HRiDpn|@?D z#sQTYQ`?eza(C2!mjJ^285aj#=*%_(6h|BhsK0{+s_+~YOWOYc7`qYSTo&v0G6ig1 z<)7hzARb3^5(x>h#tCENf|QzQU}S4}#1yLDD^nL=F{KDvTx{S3Aof$gn7yehgc)t_x>=Q z?+Lyc)+iz&jR!Sh1SnE0P+fyd^DR4eIxq?rG>>@zN=2Px(%Yrr$6OC9hJe%z2OtxK z!PF0?Xo0Zrz~F3-?$m?xA(|XCwj!*-4k^s?;2P_Y>g9?wIqkSB6h{H%HTUjHJGRzA zN<+UcA&LjwLZDry6zDP=c)>%s-_|Nk78*e&hun0M8`cZDOjrXayz3r}Ro@c|Qn=%; zF3IyMN9ucsBJ%TrIdw80+zg+>;62?k*o9&JG78;lZ~WmnZ`KVC2IhxtauBt#4j-5h@}j-d%urGVfA8ESCW-)U`GMO@UrfD#LuuQ-ZXK{g z6X&?g4#jmdnu5!nSv5R;z*kCd%ww+mK4YX5FPq0v_+~`(kGPvP_AeN_AsEaQ=&ze0jvn5QFeDX>W&SZXLNqTo1y4SPZS{ZG zW;lY)fs}_HyUGbrP{AKR>lFrskGK_~AJOwRN!{XOb_^M}1PF{WdxgLPj~ro>X2SLF z5^uJfsCksCJsvgm#00jG_ngH8dHai#LtEn#gV=v_1zZIF__*1){SkNWJMzs*f;!r> z0_f;ZCI>)W>vG~qbaRVV=xTeP!DLSW@%JOMWBOth`Q88{Ma72c=a~m`Ya%=jGBZoN za7AtR<^k5-^^8kJ*~W3C<;UJZfbE=fj~J+T=M$lIn|zr)6yEU?cU$>^c&6w(${V2v zoH4*#p7ckW8$VZ}Ix#X|>g6C1gO?j#YH}=s2grrn)tRw3flmBU6Pt z!9>@FG*@y?@zw*LPneNLw&T!-soLZOk1#Epa@QM;%vFY-o#7V}nC>aCp0i>-It;O# ztk_wHgixM;E^bi@?(vJ+!!E|UNg6TdQ+t>K z)&(S26NqOmBQz}Bh#3_ZasF5KXgp$U{j&Tx7S z=Doy%jsuEhhJ$3U7;a1j;aq7k3ezE_4My?u)kpZntf^vZyGVX{k3bb}w9H6@MBe#473CXVr5p##tj@# z0gR*;rbITD7a}D#%xo!1Tz8xT?+G)vPnlZ{Lz8(5Dw!Q_&i9Bb)|0%04+aV1`r;Rt zf!0f*NyXcn?uOX@2AL64v7vm$LR-S^bC9**asyeVZsb}~njK(5WPiU0imQrjNM-%?u*x{xg$hy7iBtP9}83 zMI((2Kb))yN&YLj<8Lqy3!R+@NfXac-InOR_FgpZSEpib#;|zR; zk1!y4*@7Q~tP5KY=Xfv@BE(G70q<;4u9Msd8xu*4K;yo3`s5aJ+;C4Ov2aMzg)w3_ zonA*7G=jOq7e|7BoTBBiG1b_nzToLAt^VZP4#vE5M2{4nWdsdTb6y-B@Homqw^_-i zd4IkuS67FT#ERJEl6Q$9@tV~T%R9T`Q5-!0&501o-Xfa^Xc0maaL9I!u{ zIdGKQfa$}`dBZP+h5#pe8WapLq~2>_L!b%|qQZmDv^>k0Geh-;x~IS+786clhL zsN&S*(&$(HV2&cEm+zS9Bk(z&!*fxAwwC)4$xNz(hCinBZQwhyqsm-a0Og@s2+x@ra_m268`6b%7M;d+KJ-62mSR zVWHu~Jc2``BE>aNc)-bx=)wYt9eayG(_9?a#s?uQx916ip**+DnF<)|`7?1h<^&S# z&dQxWt_lPWFbl~!`H=yP*N$@T1)k%z3&qZVhRiiXRLPE6g2#&f++U#TI*(#Fg48_DcnZZd2c=4e2Qq~jm8*MX84EBnEay6K!$ z5=dZdb;Q&%3PBy5`W(;9Xk{ku4S*o1;}mWTtY|+-d6EL&m!HgNN`oIGh@oqlD={0p zIx-B((sAfr{+U}XVXSr`Qhdalb+BFx5((ZMXnDP4H?Qt+01AI)!E{vF*6>I@V^si6 zxGe-jcvx#6nCac5=*5U^BDk7nw$3IXK#s1Pi54f95HRJ|It5hS%R!N0dc{XTa?Cld z_x(J|Jc^$h#()Jn@XkR2hC4m8Mze@47Gcn4jxS%h9QstIO)kK3{jM>2YhA7a5Jy)x zyK*vNU`64(!p6HWer0i=9BK)p5Z>8gTr_{I2>==Tow(aQ8+DL?sf$?Ll7EL2Noa1opD~I9hypzS046aJ+lZ~I z+u@G4BS|>QujhE^N&DsvMjcu(n!D8B`ee!NbGQ9L`~tU+G{J? z!=C0qH=N)cH|KwtY1K)77(^Qkq=U@L(Gbf9JvaeLwee1}(QARZ3zgX~A{8BL(Y-mxbS1$r=m;8rLo=ijxC#ht^@;AQ+5?;LAXr(-07E+(J5V zd0ngY%Iq+dh%i*SEo9bc{9uVs1Kxf4VXOc*3SMc}Xms7UOuvCYyOf}d%ZegC84~YO zhAoQ-Lq1#B!?h;9Z{`4DFxTM35OSPl-CC47CzvXgyBC<^PHNy)G+jSlu#!NXafL|G zrE(hAa^fi+{^rQ@y#3H}b&XQbpK#SzaQwp0;B(E*sTdkFXs_oYNZqZ-H{m_Nn%F$X zP?GWYAQO?xg#n=9)>gpdw|I!vqsiluT5E^qTCjow;wKp?`9kZK@LMxPh;-~H{ z`sZd;rl%in6g;bg-!d|q^EN!b-D?Ryfir-c;k%{?5{Cfy^C=K`&^gG|+*P~EQ6+E8 zIu+x#qkZ-Aibt!*vhdDN$xRML?&Qz7dZu4cy zh|6sbrI9k?lJnWdE#U_1kaHXX0oX6h0nb2oE?9f_#BZ6y7p?MPw~HR3{+JZlXyhh9 zT4NBSwvgEVa=MT{2kr(~4#)P!fTBTd#z>lB>5-vbxYj*GG(dNnKv7#xvqNY>ly(p> zoDc`ryf8r*9)Pbn(x&e?EO6a=hBi$jiL4Z%;9#H~G60Er-ZeAR72E+sC!%U~GH9>N zfFvi3K;Q1joAdK3A;G)GUfc*TiWu(2s!+ z6=u)A;7K4}x4g09>V9H-=4$Gh4OaN;<`Gm{))3T*3{veunl2)dwb!#XD1GF)(TZ8_ z3I@oyJjNry>3En9B0uM>0aq4p7FUtq%(%3vL;T}l7k|#Mq-Zzhu{O=P?Yxc+&Wr?t3_W~jO9H|7}_nUyQibvia+-ZR+kd6(ak02)2ngbXh)>PtqZmU zH-F9FnXK3hOuPYyDh`dcgo5s)hX&0%Xr5;h#8X$iN7J@;A^#RsvVvNAHP zEe<+u!1v%ZV(EaOc)7P__H%P(mM=Jvv~V1qexGg$gxz(2t_9Vce;4K*M6OT<4K(Bw zpf`QQ5sP{IfL6zu%)~F8T)~;m%|`hi?w&GN)8kJVAm5*S+Hj&{LVCy z?sJq4)PIIzo4E3rikH=9?g6|rrcFW9lmva#f|c$43}rzt7$q=7Vpa%EKb(RMwe{@E znrRNOFGG=Wl!1soh6t_R{{Z=dGI{cDT?ztwFseUe`Cpipy^TDoH=80xfK(FV+_DXh`H zlyA5-C>a{Bb&U zAIu^XxTl$6!d>4ohO5lH!>l*H_dE4B*CcXu%2Bt)CTK?LykDkYxhBsJRj<&i=}VbF-09=_p(=@aHED(*g*U7oUh%9%Q8e|5b~b5?Yqa9?h)g#S5u7C zUWT&z8BICxbY(zP*X+kjq(bXk!_)xj=Nc_W&L$lQ(`P0^h1Uwkw?leUw=KLmPH}3X z8}ZgCS36v4m8XA9wXKck6VQWzBBNbpQ9x7rVyO*oVQ&ORiu1m*3Y}SWk=DX z#V}kf4sh|YD_FTVGh$u@{m0$8vrS(yL!IFS=-wj>@rXWDjthC0C)KoYa#(twGNr;5 z>lg1FAMDNh$jx0TdHu+xO8(&JBs$hHKn{G7&E9je&ha6|?8&jRb=1R?-Bo1%{pUW%^O_1byfUcAsV(H*aG%P({ zE-5Z5Pvpm3l6P3< zW4deLLCeqdoAOPA9M{_8YrwPNxgFyW(GpWh$Y$<7cW zD3-Z;-8k+Z;qE52AKwvxpxzx@Bd^>M1vZ!@~ElpxXPS3a#wZ(I2!2)sSBv1!;lRi}wj0D(CXELkdzixk#VuO?U-sBSL-hhvsey zxQHvQn7#u2r?`cYIxjIOn>$Pdo4nwokom@L>ovS#Q`mbk;aj@(ynI-^xVwPx470XG zkIYqfGR=8hZ0+VuZTG*x;sqC>8IaRlj8mSLi`?BnJwe0we_(tc|t0uP&$0I|dU zTw$7RpYu2gCilfU#7Ri+Sh{jeOr}w0Xbm*qnN>uA%6FDX9+vY@k~Y8B%+}Is1paZ@ zqOVw#I$s&E>2{qsv3DQ$9!(A@0{!y>7w~<=72(@+RF*o*R5zX)GOzGugx89g3INxx zA|$nNl`m#b!^wNlS2c%3b+SX=2Qy~pP63+ zuJcE2m)z7RJgb#s@lyh<4-vlc)T}C68f$w^-w28sV5^n^+}i?-CSrd$TB7_<#2_jnlWk=*Ye?1YE52pT_AmNo2%1X z#PC`iF+|aMM_9lqCal&9{)Y`<6u&r`Lng-s26FODjU`cXoNVp&$){3(XDCiIe$2JE zpW_A%R^ZX5;y`{gYAFM(inrXDF~uQCG&lnxx&1e$P?(XBhi z69}*`Dfx4RQ9K8kXJLQ`xd&I6Z)JkB|)5@`GUC9YDg8c^iz>@RuDM%4>%yAOWsAtpzpbm_Sjsd5j@#oa8hY=0i2D{xA(4J>pin zpE$>aE0Z3c?Zk^+vKd%w2SyIo00}bawHCdZDcf*?d8Kx0=(}wZU)yIIx(zMqWRteP*Xzs7=`JAjq4i{Jdk6B zw&Yj?Tyry9FFoXNqddnr0N1Q=(Z1Wkf;94p-al<^H4knpYenBU02SKt{Nj~NRW9HD zV~`OIpYIzSgnKtQ2@tO*<|mTq@?^qj+v$h_gcrZLK#dv)iJ!6$-m+T2>0^6x!jWIP zT~b%ZR4~ zEjr-mwCR(2~;yzssOiO*9abH@e;Lqz1nHIuc$5Zq7=83t!9 zaOI6#!`GODs>Qix-;L)C6?E`VFy>vHe;BO;foAoI!@moVIlgB=N1vED5#Jr}yaXza z^}pOd?&ml{+DMq30TdN9kYN6FS{8t8nvR3?v;?gOOMQ}ZGr z{{T1UI6EHwUJRXUr1)^60YraXE@^pApD~QBN%hOZQitET4hmSkV=)iS+|-3JIhhk$ zNrZ#YzJCramcPJdHVdM6KH{b)Pbq*Deq)Mv{Bd&PNy|ABiSCL>b! zt}*T!Cr?V=bAlGr*f)i={!FT}=uRZSL>A&z5=SAvw#Q5y?ei%k_ipf~ zCh$(o1!u*}8__=C5jG9}V7HBTjRBV8gel~I)_OafVgS(&{J?_oijR!K(P52m%ZQ{d zA|+*iwi~mD_rzV`sa9i~y3%M1xvp2k_z?VZydO_k>V8A%_>QIyjKpB*Q3H;(Mg)n3xWq&R{xS64j1Yf; zaE6^9nF|eiGH^xGxg=K2%n_8P_s8Y}1dFpY3%36NcZ!a8o1#w1nrL=h+Es>BMoAMb zmD#6_X6eZpu?_w>Fc9lz<)!7Q!2%@Iz;vqV#Hj2#d71WgKjthYQL!Yz5^oBkKn=Z& zl#JK)Orany$IRBx>fS-oMn+}32Vcd?t6<}KKt{efdxQodB?-^&JD?z0gL&7#a7nX! z$c~n^yr@6}T#hZUfZfd-cU26?RRyJtm#f=1P;}EpIH=9aE2O#F@ zgH3sc3t6TGsK{2TR+G1V;>0!TjN3r(G}w z-&+Q^i2$m8zj8oB^MYv8q4S42<#=K(EfYpWb;UrnG}Arg-p9N$8is~*iV8e8e&wSb z?;+r?rYa)qG@Ru%hFP`mITKEY%+mRK_cgn)U>R})y*sWY0Y98tY1aPECKm^N{{Yq{ zY=3(Gm=&ZWocLtd6iwM zas#IyxNT2iqnt`~61N1mMJ6rbMyY?!dDwD(;w|rwrUq`h;lcrUcyW4G@=Gq$EB5DH*@j!B?5kGP}VF~h1 z8a%a&)uMkLVEi6DS@Slv3&qOPR?BhbAZ%odO{;Q=dh6ko5Og;Cn-spx40Xwy!s)>9 z=Kwtu>5YJfSmK+m%}!=&rSbOx+P!7IpWJk4p11+6uk(~czMsY?NM1ac0&4O(y!hMi z%#@=B`k7N?2K~u2gbF`#HU+FO4Lxe}gK)kvw1?!x4F|;5zU8W07;7RAR}G=4oPhomwPne;y|5nl45{5mS1rjJM$!kZyD7s3<^S1Pu|Qd zEsp^*8+;VXF9;?fE){3{z)l1C-m{e*D?sEXae@Ru}jNbWITl9 zmkFo|!gY?>ulaIT+J<9&R@g8;E*sYT!o|& z!>0MkB9JHS$^m=}ip77fJ`H~4+6X>mI2rx0+oA=g1`j|zT&(4{c_eejJcjGcB)z1_ zT^0F)oIr&$ywc)DoU4WN3=|DE2bjuLQ)ow6dgZikjtm066Z0J|+55clcJpwgBXQg( z`M_$DxEvseH0NCB;WX{%86lL*BJb0jiqnR$bwh~`b48%xOQgU98b^5*xXLbFYoZLs zJ_4o@*_FjuqaqEG&yH+^{a``R>`bQu5HSX+IQSR^D2b+T4xNG5e{u*lyb!Z@kD0>h zgQth{2-xAyHwKe#iIN~uc3tH(gt>6jT)knmgZ}`&WRTN_>CWe8x)T`kuLEKZ6oMqtT=H8xfRs`G^*Mj_wjr9ZZ|Cz!=nLV7Tu)44>`C zj1Eo}(dXHnvwRe$6G*K$&BjPwTgxzMqFKBk6IVxAl$;ich)c!+h-Ddz?&6xJ;s;(A211;cXCIgE!WJ^UTDZ#}T%&?AZ+_Q?T|P+&JGltl(U4UVL$**KE;>R0g4idF~H7#smyO z+ImW5SOhwJea;Q+eCA+G1=${3gCzwyZc!UW;4XiWHB3YZ2S+%oh4$xE^&GltPK*i; z9bv_te@v;w(G*HamV`H)18fm?^I}=0X=>^yQ1ZQ$NgwbJ9)Pt6R9&wsortm za?x4%W%2J8(BG~}2ErIr3*$Q{eld3L36x>BrOhTNxeQQ;Z_GfTrz3*YylWzU12GIx zznGf2NiMy~?KN4vk=0_{2ms{5z+%JPH40mgu60A54sSM?0L#yPsJyS1;M0H#MpUXnaVu;&VYuRd5!q4X<8dJ{{R>} z#O=bl0+l1r`uUq40ifMJ<@KsD+lI?=M}_$0Y$bqfxFl)Aqdmn&A?EO4XbysIgy$4A0FKvYbmWDvoMO3S+Z{4%moE!ryjf2L3#`_jMWg0B zLJj`U3`L9OqlS3-osu1v@)U+J@X1gtBp6qJF-xe7uJA8~2IfrJpIo#DF~O-%Yee7K6%hr7i@ zC1If36t9>JH5T)XBfx7AAY8r8aHa^@p59#LHOBR<8YI`IRY6{iP$v7h{FBqpNC-46 z_+&^>IeV6c$nUklNLKdslmK{QzL~lacZJy%Io`LDU`05!ud3@J+y`QDnj>Vi$rX_5 z-OPtB9t=@iH^sn>wLiX22Fzw|JWuhINxdU`3gVul zwR`-;#;+v6bgUP44k5}$7k3e=dg37$gu@upe{q15b}z#OJf)MLaV!?a!56Au{{T3M z-L&59_X9hOX7Kbk&u83<>k)Tw zD)wXE1+EG~&lnVPTdH0{giKpQ)j(~B#aNAAXI&I!v zp|%-#wp?Jv6P7B6RMYM(wAZUI*9AtJxd*^|-dOTMbMUyh08%`Uxk9LnDs!7KM+~VZ z`1dq|8QH8NL!#W;1*-m-fp_7}#dg^7gdoy#7Ucmqc4mTaI8Y}BdAhix1V_CyT?ZDi3_$T(Eg^mxW>3+13ui#3mug zc<%tvlaFs}*YSQ#LC_>D_QiwQn^PdhL)lqwXzivI(q$P%VMu zk?T7{oI$PP8UmZ9`;R0JZ|6tM z){_K%Cz!q0h2O3~7Ha`^CijC4tq?de2eYEy90W|h>sU<)G`J>!j~aK$g0iqazjC6d z?ix@UOsiqIg}<&4PNb2P{{U_jm67m%;H7e_k~484x|uoRl}7*Vm2 z?VO~ef&I-iOUFD0Q)yYL8V$$X)KrUr?GSZwk&3^ghJj0oW3_nA1U6%|nmA2juS1J< zj>?0+J#o;U%vIKs(;jA>v*z&x?1Zed z^l_Rt$A??RMG3)_o%i2JWlb=Fv4884z@vYdhoO$}V|FLl;uJM7#|e1(iKab$&V<(; z8ECLZKtt`FOf;LGIALmhIG~j-%+jPTuUNETE}Rac>xqmF(9!b*3b)E&6|M(& zF8&-~c-|v{2dt*IS-~dPB7kdwtvWb+%Yi3C-o~^(~`{C2|pJm zwbvEn2Lfs)9YrBBMaUdAqp@)~NTM8O^E_wuz(j(qw*qwYV(9V1VWLO;KXB;LEOi(xg7Qs`@46#8}{@=LuD0O)y|mKU-t+& zAaC~8JTKzeFz^d(b+5RH4YL{0k6$vVN|f_2W3TU?G=-Q+%}OSwTM;SWZO2qk<;xb0G6U#1~A{KzKu=z9KfMGB5)CX+(o`bdWvEzHJT?TXYbg9>lMU%1J^#~*V^0G;ogWu05DQ-d)$ z2guJ{ubiu&-BZwN(Zx|&`e=?#3UM?_%!;H3vPj2;xYS5o?k@vSOym7N2r!KBB(vY|s zfx*AGDFw-mzwPTTO@G;rBN35vYe1i-YeXbd@rk`e;P~O&N+U9W6pa_}xG7=2PHt*4 z!IN0w%lO_D_#?r+;E=WcMkeTyuiS=_R}yGf^>G8S>8)b3{><$s>ybG}qZs9-(72jZ z9XMTU;J`-czHx>ER@;Sj(Ym_6WHF?*y*a}GlO0qeO7WT+PB+VqVs`1{HV69K#I_@# z?^qxvol~#eaBV*IFqZrWo!|F_U9Lm78vshDF!vZ?i2OfrwH854Ah10=eq_(9O>Yrk zE|XIChOp7Yg?Ys4;Sl1?RO!`^OCU8gtrIo;=+3~&%J41`4B7tASzO16)fquB%RMo#h8_c2hNv}@~%iHoJe??Mjgk)f&H0#0Wi zZb5sm_`w^3^N5FVa)lm2Qx)#4-*4nh&61M>oNo&rL2+}Uf zy{8i33I0ZDiXQ$~{^8Lo(zk8pOKYafF2 zHJ1CUE(!=m*~RlM5;haBt{sHYXE=owsWW*_#nYg1D#5xn{WC++^G-~#uAJ5|PF|h3 z$WXI<3&W2}E&hxHd=~(qH9*nm&B7#f@Gf(98rHO%FtlxkBr!1^$gK|;&GOb-xnDgYfXjV zG12o%*0IN+Z5<8@F1o)j88VHGczzBAK@eO3Yv|tbGZ*KaWOHwk{4hhv4!gh(of9Z0 zvR+IlEf;w@Kl_D8@?V(R#FtzgF`*s1{{R^s6nD{)L>H~O3UBjSO~PQ1>~VqL8tdVdJtySEK#vd8=1>3!K8^q(EpJWA*crCO<=_go-DfnqCqK~2 z0#(AK_Y8j>JYsQR>}v$W0tD1BMFZ!UXDEW}`TLvzX4{Lj+zdpAIb7AR!-G^~*V&vz zP`8mvKVQt%r#eg zb&6o?oBj-~Q}Y=ot`1it7b5COmYvggt>v&+Q+P#QM+S_UQs;XL zWb^I^b=Bt+u}r3e`g<{9Vw(KGQ=2iILgnig05aUZ#Qy+zEy*yk10l6~`Gast{g`aN zBFO6wAq{S@D`>l{3@BOVxG;5H%}cC&l&AU_uqa3RmpFP?x%jm~o4d|Q%4a`{{rRkT}xMAK2ZqStM|aDp^# zX0wnw6nT|9_}&?ng0rY%3huE+)_cY%B5QO{xGFt|hk3{mz3-EZrcxh+9kpPrW|^!y zb3VRhBk5x|$_o6$YfDAtetgAlm$|4A^xb`!+CdSj91d#XFcXM%jRgRn!TW$hXw@{# z0j%8Nz=+n zckV+p>R+ZH;Ui;z$&%amk%yk(N)VsS$VE-C3Md1!mBG+IG78bH6VDl{)a;&^6^5=} zv=;aO0Nh6IxWN!DbmsyPt^VOWCC1MC#{5{yWQnbFlCV^N=iGJHLN+)hA|gU%%H?2) zm0fyfz)9Ww$AmDjBUkv!8ou8q3<6YKdIbwV#vr#c7MQjt-nWTrIP;FpYpaoeZNB0z zu$vzL09-c%$qZLZx|{|TyJv=j8cL_|m~>Cy3|oHoaWX(fLF0@HDX>rXi(i9n!W-Mv z#qd1Wc!5R#08590#_r_U8?&rkC(dY?C7jWt4qSq7!t_z;Fu84Eh~;F|#}$;*tXiU- zzBof`7$r3~9MYYbyiu4|C-PwS=+=w@p{^T}>3+-sc_%oHQMXPM-A;Jx9xF5fmKq;& z-e)SY+SlWCl^$6*&VN}w&W490A!iel2Lf%+c>%CZ`5Z9@a(Uh@c0kr_%Yje@2bl=; zv~n&gwQ!qf=1@XRIewqGw!rmtn57h7&3AGnV5|2VBBB$6EV%>uap(oRvHi=M4fBaY zk}nv53UYI0blv{G=Nd9|hA{Hl^OPK>;rWwmAD0O2sorQ0;fRU|3{@Jn6mf!gS~6r> zyEzRD&wOCy(Ivt>z5LES7XS(sYrpx6(?A+={AJtvyy9{x@zU{&NECG70kgA;VQCQ?naY42ch?iM=8fOO~X4FsXli~?D`%-Sj>$NBlhq@hh=1xpP+vDri(6TIeK znimp)4i&^!ys4V3ZsRmfP9O6sn0H=bk>^03zGca`AD7H<4Q)j*)BuR7qY)70>q&~= zMvf*H4Q_VeC$b3ljCO$J{LKnl)+1}J$n5+Y&O;{Y{{SwfW8cgK8P~eULb1r#3b=hB8acz*f9arxKq6gCf{Vsd!D#o) z8ZRk0$qIZ$xQu^XLWE0^CYl(S0XSN|++qnEG81A*IB*TE#)@|GhD8j!OqL&^^8sv; z+kwb{^MD4ge&XaSX$%DdL@asMGKwnojw-h78pTd_ewiYg4t`~tXbCps5fqbcI0$Ej zdf+OWHP^&3{VB3_$o+7^g6ebOa9DDoq;p`^7IXIi*5-A98_wWbg9ZG<(5S1JefxyA zhSxaA6R0@TjWhIZ!j)c3ZB$b0+(t+hOp{tvjuCyB3oO70_1N;{0XciTD+%7mC5_jP z<}0z@qmC4t?<_X+BNS5@u7ZZV|C5WYh=$FmGb(`b$xkxv22_mtQ- z3DBW5Od26}f@>_`HYcVwZ(W};)M8leFbvlHgC&Ha%HPaE09Hp;?|9i~4Ng-BU7Qy| za10uB*x;iPG&DR-A_Goh4wL_gamd)a7UhyPV6MADN zRJFly0Uk8*a3tzDlBRMTa08pP&9!K8jRweO;b^f-g#=q@adOfYZeq4FpR*MRbJ6o7 z$4(x(2GPAt<{fu|&N_Qt<*?hu%>cdH?2YMk-gSv2~X zp0LvQaEqaC@c0+cq!;~}O5|uYa6qGZ<^Bwa?sjQ0u1$S}<2E9IFSz>{ z-6k8j7~-^CYWQHfpw{v=op$0)8!&iVq(s(i5dp=+prm}Ik zlN_Bh{CSY<>@g9hkC+J!YhE(IPKN$rQ3VPTWG>J8%7~tRd5ZB0hMm4Mk*FxI9%N2OX9ynKzf478>)gPkXp??r z2y{9>##K~Ehm1ify$I^yMH0e$l1<3Pnj9^LhX)w~Vg%ksp|*x}I0)AFjMJufjJeL@7x^avM9y@Ths=; zVMUr%!Yvk!6uS1`n*MC8q^Q6-mo6WchP za+we0evC8;aH^3bfrpp`$jC@oFfsPqZ;GmQg+=$MT}BdzBfI%z@+4vqyD zV+bAp056#Ps?rXYTo#-SEt>xKVXniqCjkkY2#0DE9f&{KLp&I8Pv=!%O1Pq zz`c(+)#OLpg*UeDLCicMkxNn_;Jc^_I&hXo3$F3K)XM7RD>giwu61RZQNxNcdjRfb(Hx^BGi4dTOadZKPk%n*R)YfbgH39t@f6^$&sRuX=p1oyxNZl%EU)U0)57GE<%5%Sg!jE`<*4&jE|;RDjOG%F_U9;u1qsv zD8KJ00y9AMg|_gs17!}y-UOh!bJfcXaJb7D02+{SA_PIfgn~Z@HeAkp$cv|Lig0BBhVF0c z8L3)Sf38#&9>P-(V{42=yKV+FplqDD%R%Dc(!91Azz!s45Uz@NU~j-b2L=^w{(+Vh zXHPhG)3Ya8ua$LiQ3OdJZYT<8A%r8Q@K57@yT_KULOg!pMH~j?7hpK~j8f70^A$PO z)&vs#p1D(Mo!mY%P7}pe5C9r#;f!)Ps5YQ~&LnXg)6C0ehQ#X(UIwv0-4WiLS;97B zJ85B@qjf_YkkdvV5VXuP8XTp#9v8WRtHXv61TU@#8rK+ZuX?%32Oq{ZiSvv!8YIch zSHHLr8fus-Y9~G1K?xIsrNOx8x9(_79`k%L38aorW-GQUEP;kjM-N;=1|S9uU?mXI z;NrP2;M?;ML{GYypfbYM(swh-a+_B#PSbMIR16$^#OGNYV252lIDd13KS1Xk8nkHs zF|i@beEo3)*s5#~a&ZQsheMLHhlk899MOl&5Q2hFoi0xJ?qFLo^^tzZIZ{K)xDX}Z zI33ochj=?jhS#GS&u z8%lB8j1^aMWuUxA1jRs(ft+E5FL1#rX+g;P=G%b)HsLrM&S-FGiKt-|fz~5H+rR!} zyQwMg%Z($OfKuDgN$vx4(aR2)uGzd40!ETm~R{V{;8@pP_g6v3`0B8ql>J^}~X|7w-(prKF-*#=n^}(ljpk{}D?b-1wFAzw?r2U-4B3-+0#=cs`}ZUc z_c%tx%lY#FmtfXALHjXxr8yZ4 zkn(RNgz)IZ>KB)<+&QIBIm6;Bf-TwJa=6pEnw41V)-l)(j~?PU@!uU7M1eV(rpG;X zk4mG)N|#rz?s5&iE&!4<<~m5{PC97!ct_Uj%ykC<97D4~znCMojQfHB6z`CjTRy*x ztbw}T3P6_;Zk>i~3qlCI||{;^hz zoVpgn5U4oc$&pTlFL|ZCI@H2!kl=zuRWDW1;64N5z!+RffeQTZ5MPXl;U{^skT}#-9i8ULT4#72MSbD9-Y1_f7lY;mE9($j z2+uK5$M4*D=S$C+^p?`$k3)xb%E_(?reJK<-nYgL15;yc!VtQC+;lWYCyorD&$%4Z z*I(l(98DhJmg&)s;>&1xi?$nU*_2No;KIqmC0tsT2UxO2n)qWBpZ@@t9l{zncdpFg zF47!-EU*Ayb{J^rgK!XlE8enf_6)5%UX^L4%KsGa)G#`Z)MATH1OTnh<^t5(O7Q z?)<_nKt$lk3Bc@d@@GD+Z--dTq1gjii8u#`8(F-K(Z{^vs)&8mnIuWUy2hSFaqe%s z$kPA_7m9M@Q;r>;{4p&9O_1XascPUI#`fwMDN}<(vBhE)=i}AI8{pT_GjxDfe}^h+ ze5-QFWd5IqL4h5dmjPD%(bn*hQC)|a2|>w_a0N$q00bQc$84Ube&MY>^m~BBfbHub zCiAFxnaQ9WfzdHx1G)1ygrmaq_W?%_k5?mPhj(~dO}SpMe1v{rBBg9z@r}LX?*p>LxH{~5CwMa)G$JiDE@xniN>dW zo?z1h0BC>${^VGQIdy+=P+)ES`G(rS*Gz;?&4wH_bn+Q@ji2Go>vB5xcq@Fv=0e$d zUoqk!n$ox;2)-(!2D{Bm`#7Avb#c$69fL z9Z?}i}(Kkgqgoa*8n=MER&2h0J30@aI3ta=(fwC@W?f0 z{Rfz5B3pMH+M(M3EdUbSuk7=JkG?R{9EX_)CUJ(uI2c9wpMLHz3a}b+sMOt_=Rn__ zIaCb?a~_oRGkfgi1=D%7+Bc6$8`cB|uEzunzL_PQvc=mTJr1#r$v>9j3%kX+4&Tq* zSi&%21f*z(nJQ5FGG&8?>_Aq}=w_wa8T0Sv6XrZFrXYnl^5e0O&$$k?yuIh5Cr!VZ zr6^U7FcyKD$%@~3D(P2gHGt6=s}*=hyxazsOf-@PlQ?F{dE@s4pm;q!&1eyu=3^Xf z(PkPrV_1T6nTY#5K4axbfOCeaSlIRV8Kk_NIOxdik%7nTI@1=wH*#=btJ)N0r#Zqj z9yq`w0P~aFzk97_+noXe2Qc>;M%I?`R$AK0Mkfki{{V(8_Kj9w3=fm7YvXxJo9F|# zxVs2BOkF?8+haZON{OzMST} z4sq1bo8BP+#F%9-ToXG;9Io*;j1;**g*RAywJr$W(ah_tIubCoTh%bg`v=W`vl@aH zXvGex+knYP@%K8D)AuwsCi2h?1>Jv~s*3REsC|0Mx>qgdB&aJ;Bd@qRLIJn^%-An& zpC52q39cK$fGCIMaIV0cA3iwfuSbqM?bev;Ike*OOqNiCPR!UM=`KP+M}A@7aHa6` z7YVX`23gbrKD}Y=l&$o@u2PKE%8N*Ml{cqJdpC(nR&H~?u&_)C0DCQFa5js?nA%8i z^8CQ9>#||RT=2bP9hcvXJq0^{VH63(^Ci=mo!lMQ3_|7;{{ZQLZF$zP+&`Z<(-o~T z!3tGqb6Z2GSumg>1;Ha_PB8;1?)i(6{kJlJarNah?kX2}v7rvLMc3A+I3D0r(^#me zH4ofvi`+R=mp&OOj z8N+F*@b2d_Nw{1xf9g;C1d{;jIhQPfg;p!qnX?4t)(Cih`H&Pw>$SoKSMwezeXb}N zrYnmLCQ(&o<#Xd(myewgD&Z zGg>CYr!_Tm{DFW03C;99kH0ZG(hkGS5iFw3M8~F-A^yyql<~Ryh$@!l))Z3_4_`B( zst%$!;Rfc8AC7TwkWV!c*3Bej)%mS(#IOE(WB}LH; z2sEa!xmK}cfxyX=6aN4vu`m*#M-fp(4GD!Vz_x#ks%j>(&@D+f&Pfs*wl5hM6_YmtJM1nIQPDbF6`+g( z)@$u}mgKu#YUaq%HHs0M;ML6=Z@n1=;1y08KwjN`Vr;iy;Ht+QJ$=L??*9N7MVqGe z3=vyX9eUc&zcREj-0tBFqHU%Qz~^g$1>&4>tbwABw;_OAeHf?;p-G!7mwp)J4J|+S z0BQSq!52kzX+C6~Lf#vq=tA1AG*+so69TP%FiQY$eHbF`R@WCoXxZW3Rpt#pFPMw?MKUqgHn;3_Z%uu ze&GOTL3nZ5Uaf2}N~zLH`*DDF39ZwE^B6%IqU?P!VYPq$I0eW>@8fufS7^cjRQuE1 z#3npn=lbIHOlR%H36iN^F`WS%E#69GLtNjuZu@%@cFvCU5 zxMt!T>)V4t&F{;Bg4$`9DBP7(jDk8hTuhrc3vpJ!kK^|>1Gw)DoTx#>41cBrMcl31 zF{vx#tb4b%H&noMadTZHq4A26!e`W$H`5k3z2o3b$4N*&T zW)b&;Ap-pv4XNPZwkp@$nNxW@#i;xvtkQEJ4FSA{QEHKgjEO~vaZ9(~o?!sd`e!9X zw9YXU%23`Q)QxQ9n9_l~8NiA->f*I@b&CV3XuRY$%hTKjv|Z-82|Bji^RpVnT)pEwh}Q~$fT4NzU{!afWGGXN z7GT~O6Sg%RM>S4t!2*VB9H>lWAk=6_%#z*c^?+GGNuTXeqWmKfdm<6oF`95qndoMDVd`d|in<8PP8 zCNR1qV*t=T2TAS=M=hTH!2E))%Zp1^HS@gO+2~##H~>4Qir%~8m0K1XB^j%^1pK6@Lln7_-_@=$p@ni@x+4gM^t;pcS4doSv(@hqHTXN2!l8V4 zp5vH_-?*5ZxhEJRQ4wcu7!-6(;KNg=*^DMMfZ)XFkZ5?g*a>YG;*u^m$Xo!*>bwkI zT+=xWZUA?P080D*GhP8ndB9ajgN}=Vn_j8JNIL{_SV)x|ns3we>kGSRg5Dw{yfzzh zUT}e=I8EFLQ6REzMN%yj2&2!s($8#v%Kh^+92hLMEK-)3^Hk;ow zHawHOsYppPNute}=~J`rM5~VvG98vZf2?6DIRnK8DI`oo;~RaL+15>NYa?pCPVhND zw7bZR+H&g~MHSX9Sl1^E*TCuSMnoXyJz_#Gj!?u4tS?wYu&ir%Z9ozl4qV)>y5~<5 zImufb+@+zRQV0J4GDVYR3`96;WWnMb>LEY&%p7sUBA+*ec*Kt;NAb<1t#MfDE#|qv zsLpUu1_7ez=l32E4R&{w*hiNTE=UNM0YgAc2YMPVpQqd!+AM|Mu&jqg4A%@pZdp(_ zEC3CO*_H3iaLq5d6Ev>29xh{*`HD)EehY$9+C$9YV2ypwYOikfyk?3f5Ht2+AkPPLDIy6!b5$GX32=ch1jPe^ z;}8zZtRj#J{V{4DI&_Xi6j>_C?Y%6@orT`8Z$r0x-YHyK?|gNeS65WVbZEY~5FN5B z5*r+25IdQ$ugGwQA7{fV5c2W<@pd}k!$A;ZwrK7?VG0lj{{Y4@CqV}vJ|kPMvHELc zD&+dXfRn9n1*2i&{{V+K1Z1jzY?82wbj+~_O{2^Uqa70I#smRJ+=<|>EC_{(fvZ5| z^~)4!M3UfGK=g3j0oZKs{9u3yoM1AP-Q^&9A;(w%3B@a|WG2MvFx5>?e8yCEJFhth zBMnVKGerjf0K<%3A=^_qHVEXzqA@1>%_Bp$ZNgPJ88^-;ViciHh4(0}UIR<_1ZXS% zPclf&LAU|M`lcLBEz@%s9;3PZ=F;s$#Bka%TQ_HUun~G~AFgYuqGYRAN$c|wQDEdojfvh7j@piBHM`PbMD~hxahgStFlgO~lK`AvrV?Ta#_>_qgT;w} zBkE@;oJ>J4-ZE;;tLry-=rx-P92{)(J4)zsnXfA)`G!rPy@l3FuFf94z|zEJ>6B#@ z`!E5{vB1QbnK;%Z98T{rfGZjw2{_&d2-6y4_Z=wgYs;Grw8Ak=%|Ytq6|bB30M^9R z$8mIT%&0}&H)s9JDoRwzyT}QZ!a>TZo?mfphkE_ZX;^_YVWN2la~9B)KF#2@j#>9K zWe%qCC`(&#z!bm6C0#4yjCzO{8&XT|$L2Z=%>s3__4t_xzZZD)-Lu-5_}#{$P->kbdIjQ;$G#l{(eMLFU8$vqb$D z4{9c+Yze8vOw;n@%Z|b3FgYO&?zmSZ2;f-=JUh(=x?h0e9tJdh&ArS5CM{e+)h@;Z z&v*D{x*Iv0GO1sw&*mb73vyObY2h<~^U6%5S5t$Dh3R@Y!X2m%Y@$yu81I$LW{PSk zh9XS`)>VMvR3dzA&4s{f{l;-Vh~@Jj!)>lOptpn*s&9^Lp_pWj%IU6&;1m%YIx;wdQ3tbbuAnClC zbJKg6Z8YmOsTYSCHk2SSMgY4$WLQ;mGlF*p{{Y-%Sm~>PL!@QrI0;D?48q=<67G!!)CMw`(`yY6_cNi0{I5^ zb$Y-xScM(t<qe3B!}y zg(W}Rm8VxBh`^@@!voSGwYXT74Z_`*gZ}_ou$-UyM|U4FB5}QUjH_-)1{AWu{{`Gkdw!h~f>-GRS%Bd}5}%`Hn>>o%6ez7=U)td4QWQ9%CWmYc5wp zu&Cu0kW=dSnj^5!vp!R>hh1Q=e`|yW!Rx#W2QIag@NK`iu(nqQlo%mj^P0gef0nR! zl{q&I0P;<|khxeN;HjyrKh zpxaKLxSR#8@0*I78fZBFG0-W5eZ%OMTxAHY)@>cSL;YsXS{sB?rh)hF3T>mq5PIV8 z7hY6$o6lm*+Z0#&>m>nNxWcv2KzhV-yXU<)A!2x*OKEH*mibe zi@#I3fJ;MkVQ%zIGv2Wns7m~qVT;7U7(CeED8onH;Mpff5QwT)YmBC)n=hCQfwJQ? z0M+RH%|XMwb;f9!iaf#XIWR#!6A&v=R~8ziK>n;0&^6=xg058NONN64h8o;4{{Zup z2;>#XNXop=kpQfjqG=dJso324>d7xYr~15s&wyIY#unm2y6o0 zYKuo9iLr#g5Iy)W~aLuRm}arj3TEWG#njj=Ix*u>M?{Xi{{U+eIlqqXd=% zf^A&XTHynnLWB1?oxu!4Sn)aD6G{>u^^l6Th#e*j#Hs%CM4rVfjA}Yv9I(>SG~-l3 z#v!Ep&O(6TIx24*n2$qsm)iAnP^u2_RNnU-V%d3Ip-uz5>w_ak3%*1*ae>a4&o26P(l z2@>5d3|XpOr|rZerHE=^2s>8ythVYvyZcP#Ro&yfJyqY+UE%{Bh#Rl2DK?b+41=JM zdG*H{!d!Wr;(VtVw2vgNk8uLk0Y``P841UK#x>)ktHxETwif`uwaKcSC>s69A_UN9 zWTugFcD>V!m1f}K$rea|UygA|{BUC1l{y`ny1d<-xu6>~-}{6eCjS7O+lOmUnGm}? zW4D!i^C*PV6jqtq?3+D?Qfsc0#ufllQcaATyPoZ?d0`PQ?F$;`?H2<};z_&?I& zi_6@xW?ChAIn4y@@8%>?yk~4H z6F0G8uZ~fS59^G4v~l^2?RK#`a&Ko_95oP!jKawWJhLHS+&Z$uQ{2#$?m-@V{w z2ytO*6D;c{Fyj78o9++iQxVYd_XKu<3irMn-*KfD+i^!&N~D9y1*m~RJbKzhYvZRcACF%9kop+RSeTc5f_2i z?g3D}~l3|YuQ#3W_m}Z8J zG? za0_=np915zqEIf|fr$=U;^d{hCA2V)B3p!>FsZx?&KSoLz0K!4+txtF(M*f8Z(L$T z+k?d1w+5!>APBQhfr_s_D>Npq&a$hi{4+)kXq;eK-Uj)@ znk(Ln5HJ&L?-fk$cEsP;29g$z^2mdm*X9gl{{Z@~c9=-Jm&~mY zuRCy|rETvJvzwr__+zI)fzKZtYPa zASgy)@@#tL$e>G2N1Rb99r9sNQ?aELnp01JvjC{A|%X2Qd>S>Q{(WXL1c?=~2# z_+tk2q~0=$+wNJTpw<#BX2ZM=1Dkb(4LH~41xp1!;ZW6R+*JV9tm7%^wQ&Q!`42Hl zrns399xWY?XaT5l&9`E3G7Kn^Ogz*z!KH2Mj8vuAlO%5I@w@~PF{UM@a*6v#x>$$7vMDX4$Efdt;qQv+h8gk9v9 zb~*Dl4pD64Vmi`rYax1z13)9myTw7(7Yhh$(VKy@tp5NW$(D%9YG74boXy-3I#@5y zxNS~LPP3qbb*Ol1KLsfF?km?4ih<=9b-c5ahn}O zj5w*nPkD|2lzI9!jFqJcrH#-+p|y=`5(&-qz`zhlJh|9VtLShZ%0%|#D%kb&7hYQA z$69wFzI?(BfNUP%5Du&sXe#z(Bmp&fGN1zS_&BK(gQ+sn9c@g~4-F}c3?%QCnaByf zpkd&*`+J=fPG@d%L<`Z@QdpfH;ySnl_%UOnise^B$=)d_vcXs=Yd4OiN z=OXR8?U;D(v3eH*{Y+b+R*qeA+z<+)sdbtF?2lqzu!D?Uns2!5upd{=nN}}J+lVNw zdcGMRIB|dzUAySbF}l-&DRydOM7QS&d(L>`{TxHoB(4N4au5Nm5l3TxxC1E@?i#yV z?*bWAb$rMmcdz3pJg$M3n0QBfacXyAb$|>4^N8^jPbrF}BH}~>EIr{)aj~9dNdk7` z(zVTd)(Lw{F^nif5ex?xycMdm`7kS_2Od>bA1*P`z$M=CPeTQBTwF$O7^Mn|%!P?m z*ZN|$Vsgsm;&sK#2Zx*=Mrrx?EPx-*%$ENEIh3MFfQTsFU}Ylg;3YhbIRo9m3$Jh7 z-p0(B2Uc1xYoH=WgMh$CTfjS;7nWxt%ceub$;>1F0CqEy;RAkaH@e?h(Qh&1yV+37 z&Ycc1Gk6{!+_F`491b87hMr8Jt3utg?i$LbycslY;rr``A}hV~?Z(xWx8a-SHXD|h zlE*fIIvz5T!O?xoQD1AE(<_pY<0Ua13 zsCNEvz$cDeMKJH5F?ki|oGVKm8vSQ6bwYgn#4%DtA$`cxX7=QZ9ev(xtp{PEnAEBf z-k-R!Hh9yVk|Md^8A$uO_wx-Kkd*n_XCf6j?YNOg8fS(f{!FO43nT6!ZPRDWIZ58S z!fm4KISW@>hCevFGlHi>fQ4gv-Oa)qkqkycrk&;3D!ax4G2RPlxie67eKK%~#POP^ z8=7}qY`_Uq)3C&LHA$>_1?l|a3UW?&tlfYRq|P!Mx;b$j>86^?hQnA7^M(LLvSG%a zoppwTavM5wN7DBUlFwY+rEo8s9`Mq& z+sEcz(^Hb;4_AQeBedzN=D>1A>)6O;FV_^jkA_uVK>q;z8OaEX^}lchUGeb1IT33l z9WCqkoVe@^b1}QpYunZ{Q);u7$!p&a80pmg@9s@S3XR)N&hT^TxU*XB1(3XtOl?r?p{N_8?D zpgv^;P8u-O1484uYhT53>n4g!)XzNfVQ7(d@x}$ofQ%^%FikcQ^uauk9%lxy!~Xyr z7$V_6gDq3}bAb`ro0zY%a>T~%Y>(U`*3{v^sSdzz`NB=u1E7v6RD3_f%nIUat{E8b zMGUb)H`U_+1tEt0&`+48gq`tEG2}{GG58TU;5ssJ0lGaf%A_>68i-#LEC78r4gi|^ zxC3GV-V;<`j5@uV#`bkKXChg~AZ$+XqJgB!Q~Un_%xQPW8MM-4c~-00g3IP-70YML zZxGis@vO6pT$Yq(_P{%Gpi%y*g*X$FtT{(bm_~?3-*VQ6NO}CmD+QyRi~w)IVN^D@ zb(at(iL^Y+G@uXeFjV~>a!^Om>g6Ydi`~Q)a*Ga5Rlgh5$jaSNOmMCe6rH+fZUOZR?s* z1<2Ca8}P*^&>UO~Ypc#$ta8dM3Cs1urR8caXPSDr12fKdvlZWrHF% z)F5?*LJqJQ;;ri)PDx3F6gCwuj2fgE6V|=!B*k5cyD?&fc;R8ctAJF86z{nsXh zfWi^NNd1YtX=-id{V_!W&*E{3F)I! zi8ov87;2jjuXB7NEj)ZPUUtRqGf3Lt633!v5OEJ2qMuDa-e?OKS0<2zWWY`Y%C8RC&bSXo@X$(h-*J1U)ckQo9sTPOMj$85 zSp50cP-(bv*6_O&hxWk&7sbSiq<;g3?3-8}=7?_e1{qP5MzKegPmV;7{09&H6uG;O zaH4paEn0YBy_TEt3uU*{?Q0r}o+IIBN!29&3*_+_wBtJ-I)2yR>yg3a%< zBP{PUI!*h5o7ShyH6+*j#YnhurFm0NnZQYi4R7u$6|HMHI?&(ilnJ!c^D4NftEryr zteA|xYI}8(1x4F)>Ri}*^n7qLLr43-O0gbS+_W$_E59>ZIkEK8{;wEV(6rP0l&FKG z*W8a{m59LP*P+8bxr?UakPY|O=4umvf7VVlm0sL<R{&4^{G(NuO zv~eNt+@@4r&MAPovg^>zi?d0B0ly#H2@(tjvJTM!*Em~1czyFKuE8g)DcnsGU)*4h z$ZJjwsnqhTimD&~0Gh*e0dzWJ+m~$GS)j=+Eg?C;92F{HfskAfHWxX`P!J5g0+)4z;S>_?pKno8J)@qvdzT-NIdyF>oE*i@L+s_jXDp9>kmU{Q4aU*y-s6pD2hVZ^5&4WcaHZaiM-9-^RlrLP@6YEosGlxU9_@cP!9=lC zcQH4>EzU6gAMYmp>G$qUoF_R%GLm(h5wnA);FPh_%+l}coB&XT)-tvZPji7ycXZ=z zfT@@Ah_a|zG1Ckm{W@{33=-VZxA|ad;HaB0(i;b-`O0Wo2^R?(?`MhgBb7<;d%rOR zhqYu1pmMe@O!lBX_Z9^Dd2j@RDBd-Km^`7|iz%liaROGE_Zmgg!^FcWql6$XPJBIk5BlI5>uu*0-Ms752wl&(EF1nV}Lqr(biZS8K_} zEGH%240aPYu5b?`9$%QW2d@c%EQvN8E+bk%8gCFnr6n*FQ3@BIxB#|>hn!H<1>Bf2 zeGJIPU#_NZFbB-$({4JDaUj@_=`!e!@F>M$#S)en8anX7yr9Y1KHN394E{5PKii7C zOT#n@2SLstExtTuT{pZmAfHDCUnat5B^_~*ElO^%0T>>u&R9^J6P!o!D>U3Hy@dHO zRmib9&EnEf)VXzNedNVOX5W|yR53B30m-}s@pj^kn`G{0>rJ&wGnBNO`}v6If&&~_ z3!|By!M+__0Fa5JHj7%ts1EtSUQDBL^XY&MUEsSDjk3&#Lyi+7Es$tj7Q>B=YbsI! zMCJK~x-0pYDK$c;zsSG!V1;Z{}RKnYJkUeGF7v@|; zu}T*nz<{M>iB#geKXDQ$I9^`x8DUmCH-vp1zYXu^R1BpIjR~RiS){l{`Pjh(cBWsp zJ)D??3;R&>DvE4Jc_<@c4(C~Fs{|X_);nwsxXK;5*)WDl#ntr2cPO&&8GBU|vnxTh z-{xM!b9?!kyAdGPBYfBhf0 zDaIa`xjZJH&CVv+*7?>XrcRDoai(>M&}%`P`EfX_uxPUc0tat!zoo-#jUXFk=N?{^ zPi{`m#__`D&cpARIz(M0v5|SfaXmIHVxPHji zxo^3=S~c?WU?a+~&T;n%X=roK6gDS6nAE(t`!PoZV5W&U!GuBUlW2}DqQ3QWZC)Hj zQhNg`mQBL|ZLr0IOVbnqdGGEUb+7bwkliE0kgt&i!BkV8ra~Gyeq?mVbN(IU*dDa^~h=z2){4}5*o^?lB zJ!0o~1L-j{SP?dJP^J`L!V~k{-L)`trxc!DE{srs>5c*Pc)0PoYiLiI8%f*m?gyKO zcFPP0QE^81X$(732A_X%fK)&!$>!jI{f0t`d@_Xt^X^4}DYIB=8p=Ui4~!yzVcu>^ z;qwg(Ul!+QY)r14`HH|N8M>_tOq##J(}{Kjcax!5bVS)NuX#nL#x;jH^F~7h98)A? zqq~KA2a~_tf?5=@aczaZqV%hWG!^fR zL_<{fQ2UEfZl)wC5|}{tg1x3KyLtXtMn$h$#Ck)GrfJTB&A`j!T}(Ks^`^YZrkh=4 zSF#I~p?uN&9E!!7;j;pG=uYs8sYp&3qTBxf4$ROb4UhMfiLy_aiU8Da1w;nbnp_G; z7RyW{QERZ#mq5ue+ukvTFkWeh0Hb(UhH^Lnt=-H^r>+LXPnWE1=SMgzR!mXb6g8>Q zfm^Sk-fTzv_4~5lGEnm;hckZ@EKJ zIX<{NiVZ}_NjJCLjc#PFenxyeEiLXLE8){;MRv8!((3)+=>Vke;7?@ad^%c1aBkpM4XJf zS7TYbEXbwd!w*ZdCg;4c;eN2pI~{amo@VXdSf6+1UNlydUy#VP!{o>IsiCrA>yzom zN3f57^AH;~{{ZU_4JlA+;mX#z$O;Dct!C=dNN)fz)RgQ@B?-KjlK|_SG2%>128I)P z5+lLq6+4ELtBB>IpDskdj1eZr*Es~)+3tAYb2FhOdBP%pH~{Uf`eWfT&EqSC5jb2E zX3}Z zsLpF1%u0g74r)=I*+A0JUNF45Y#TpZWzx#1bBYSdu5bW_7gr6TwCv3@LFaAZsA;aR z+yh|yimf#RD`Sn~CWf+ieYpjJu8+*2h_`nzY@3Api46sob$~)G8GXwEXi|Cmirc2K zwxA}mWm<22?*UMNPk6xP&D`(qR-qvW9%MYIZC`Li?JK?i08F@m61C06Q~H0L2%_xw zlCZ1klagtzA)BF3KDdpF$j&mg0FhiKiYXpo%8RfM6Re6To(HBI6uUT8tHKhl58+2q zlvSwPfa@-a9eu%N0Salv3a9)b?r?nw4zc8vZREh>d_%7cP@t>ski?TnYX_uEIM{9~ z+yshlM8vJqhA*KFVMQe=ddG@Y%1vr_uoX`43x$Suz98sJU2m(_C)1`tf!MI{KCmcBc=vuUF(di07yiOlvA${S;a__ z83#oWdDd=TK|>In6x#RPvI{}Ej@iviI2;;KpPu6lM0@69DXt4%90t+697u`>He6Lx zS~7Cdyy7|*9UGWT`{96*4!$^nMBnZW`(OyAH;cN|){Hp5rRgUaho!av)v7w)NsxWf@?oX47WQ9E6iDyzJxoocu=|W7xN> z4Tz5+)y{6!{*E+-J0a8FE_(w8G?@TpCN8itBfM@6Ni%p^UJkHW7KO(S60h;zCr}rU zZp=uooQzQwMHhHAedf*|F$<9zz1|FnT^KWeVZWco4}6}#F(@-do#2g9Uxm$3qVqb) z$~_luh ztiT9b70rkfn~ftVo5&Uu>vfK>NliFJDYK99ny@cJ5wpqW_lODEvykD~VXNc%m>P6J z1MY7zH~h?wKyv-WETLb9R>80~@Oou{B6e^^>jSq<2a_&FOrymO<>OluYUK--wK(xu z)^n^UhMA?_WyM7bHZ@ofM@jL{UThE79^S#zh5R;{0Z8No1S8>w=6?LZXruQuIdhFK z+;SSh1zc6?ZBOlidmw6LWaA9Wjy1D1_86Tup9_GzM7$VCvRlUo zta`%c1AEkPAsB2rnH`oNfM%s^Cfe@?n~>!&uMAj@G=OfIp;m8VV|5#JxXLEat;sdY zPuzoF{w6lkf4tc|c|K$#**e}N5vL*D$^=6xXs0GZ5xw6s={R-!g4vol`-x%&w(!gf zvyJV=4XVMc02M`#;^WHYW(x+G5<>KQObf2z<2O)Y1b4=ib7|CnTzHV3Ge-#L^X5>T z?xs?E3@;f#(m`HLU{Y3_yY~n|G(LQ;TuYposmU%WOT@aj++eU{9=*6=azEePFu6@{ zpK;OokoYJK}m6*|X~3KZvtZ;qo8!Xscu=0JSTEq8}q{&cnkE1|3$#oC`Xsz#P(k;g#e=}!FvEhgZc_7|yfQ{v zjAtftmmn6*tjIX_VFSaiqmH09``#oQYq8F@{Kek-rqAJva7&><{9=ivX}C^tS_l%Y z;ttFtpW`S{mX&(Bp)!J~g(coWAW4yYEd{6|$&70|f5|oKG!M`ofav2K>ncIicOausmz=#egULvyC|o_~gqqn>K0S z#4GULZ*HbPtCj9S&@0QF7gp)@#CR?-c5kmRKeKtl6PteGwNQJ>D^fpjEnxVbWL#iz zOI$?42OS?AxP<5Pcq3rumj3`#tQNo#(&4={pP(~U!s{E@=gxe}s3z_jqXUKSBpO^v zEZMt(#|7Hya#B-H^GN{N8_f_D;_~9QG!*;%WR9n5<0+xu(=^>C&0y*R^>wUEr2KpS zGDeL={{ZG#pcF0XL=_Q>h*!=q$$CDF#-5o;f!02y%6(*HOIY}rOb{ujj0k0J1|CsZni%kxXpHh zZKiRW7x6JW6#mB&h!JGn$Ksh~(9>o>D19$|Wkt`~i!Lp0`Od;7W828Fle#H-eRP{11zW1|qu$d0ULH8BiMWaLcg*BWDqPc%Dl+*tJ;c`Qa(DLKl2otb7 za4A7Zx>q+zPTkbQiLjBNG8BM(>Bj{nhNiNhAc8IiBgekrp>kL;5~Mkph6Q5&Sb?fk z!60|r&Jr-;!+P?|k%u!UGrn9;yty6@O)BZcZ+kn*z1K!so$39+(Lml(FE2@mn-Wi< zfZ3XVKPEe6^!mWp9bmR~-cZ!qPAAL~2V_C#4`C^%Syq5SnlOMmta*T~WmWi{ZvjA| z7ZfMN+p{3<8b3^0F&GrOrPC9H<0wsN@=QPpQ-_%N2aSBffO412ZmOFDgv2DBX&-SF zLRpX)5f9(Y)3F_x-op?U;K1{zA74e0AFu59yyNUm#(gg_lZ+g~w?*AB*J zil;Z=?-DJ?y_w+azn$XHck7G;1A9Kq&?+bRz&3~cG6>4+`{8PSeP&0Cb$%GZBtP~0csdt(Pu3unV}SY4*{2zz&GwC^8i++2%Q=#t~SOxEZ$TL?Y>;RFY@4W zu*_S#queWI#@6-wiGj-3{9_shPe?nA_z2}=ZgtDS<>ww$)o2=v<@QIKh-w)>$(w)CC z0pmn^$3Sb5aYOms5Fnf1SOVCmDcIlv2Bpf2x_JG{F1D1zN`~t;`e6zLyWcqoe@a|v zgHGOKfHXhTGz0W-dm!uk{KGv-`Ce=PRnBAxbfnIs*k-7N4jq@m=9%thdbA&z%YL$3bf(udRh zxvi;FOfzgWG}T#;%oTuY+gDjGHDUh%HOf?LgvBFW^X762J8c6s04G(*AwFTbbYTPv zFpeRaJXd&{BaDQ|0`r=1#y-8`j}9d^W5+7(!n0CU`-|Bp^9)Ffxw^bi?cO++)klw*E5W=6ZUh8g9-p|R9zh$&(Kssb zV1^m1NEak%T4GqH%jCvv7xm}dj>n(x?nNCc6U-?zJ0Xct*+T@ASDTF7s@dn5I}qT& zM%TOx2v)NqqTuU^fw1j!L*qs?LTn_;f&S)ghYkEY!9ZisnEJ&+Jj0q-O`c?~4K#7! z9eEi`%cRDQBzbXEtm<-HQw@*g{l`!PvM(OtDFL|oi6C&IhO<)0&;y5eEo6?cf|XyS zz|nQU7?nL7WEwUg;mtS=m;tcNFNaDF6<4?S%HMhy%Y}sSd>DbHd2o3=+jF1T24MwS)(vdgMTWDC64Uh=Qj);^>1z&pMc-$p+VV^C~4?IA|$y zconL5efnT(AR76C6K4m_;$Nm!e2>%SGXw-}GF;%C?|H)O0~|%xCSWN*`s)C68_D14 zhYu?K-|ivpBbmNAFe(A;-WnbmIOoF=3ekm4E^lSt@Hcd-8UewTB`QGR%OpP?%qpd8 zzj|^(4H-a%oOT&gaMEDs1>$_bI-0$$?sJ(~{0@wb6_1 zv4b3v-K;RGLvQIZnf9;D;V%)-KXKHz!Q+mg*Pr~z284gNju6tEFt9YdeCrj_7spvg zx3V}ETbuo31AG(L+=4A#CIplRMwIsePidZRbt2+UFi7V7 z#^hRGMh2%{x=g%&3b5$cVq#Q7qto1TfEUX7goxLN>BwLf-#>}&KQ7?=c)<>WABl^y zCH!~u0*o3?KQ0MJ8v|3!Lr*TY&s<_fbx)pSha{T!1Ox(g!TFR3&qjVG$L2`zPwjC| zjq3$@HQq`z&koswUEC zIRVy6wxUN9(;rF%D+B9}(~zmwLjX<#{aCi5?OkiEuq!7-!de8)1u-NI_8P+AjF2#9 z>j>MCM|;D<^vTJKwglIOnRG;s(4CH58Xbh1$HdfElg!wJN;LlSnk~_*Kjv73N^<@m zxRp(EBhIjPEhRRlD;*7g*AS%-I>)lKa-ZSFhQ(ZP0W|zL$lJ_YE5}*SO8~%e>Q6Bg zBVyAzl@|a8pI*6W>v=f@uj>B*%+@0KhA&aD4_r+#c{O>+Kv%O_8`+zoNS1Rk;_N9l zzg!{dYJOk@rfXI|;K;jagvHyxm>c9T>yX$(4~Up`aERTs4eygJoOVrXEFoUgPC9i* zQd(xFr~I%63*E~#Z5z|uf|}Hl>ab8%;TU6rC@^;7#LcyxIS2Nn(q@REpc|uw5jF&C z_YOA<2Epls;%oMp(-eDhW{f0c=U7P954RL7pn}bq0|0D%aNeqY*6_vtAFlDzQd8@Q z90W{NTb&b}CQ-VXGZ4Y3m+mNJ+x+2RZO+x03=D(E4{-!{`-}@%EvV+nhT>wa&7Cx5 zwUDqb1YkjRj42a;&A@F8n6D=)X4 z3Q4fiVY{ey>t=6U8+DVZL!o;-GQ`1})<;b_2rY;?G6)bE7-{LJSQ8DV6gxRS}{{S%ztyv6Km~VeFX2_`F>yQwX z-^-qjctMtG`a3e!bn=+imJsJyVtCQhFo3rDYZF^bLy8B%vBdKcSyYbG7*tY->X-!B zYW8zXKml?*-*AGk+PV1QGs9l6AU9#^_kxHUX^dIQq{FIe?Zedmgw8h;isvx=m~ zyZ$lRk-Mbp6~L9bLjs7xEKxlrG3W8&L*81u|v}UwIJv ze=?0}?epLjtz+~_})4M z*4UZ?ypAEMerux~O_2%4Oed4sm9l+vh!)%9nfE(jboRLv0`+l2e=;{>Htq%0zuoaq*SR`~h z^CCiho0q&Bg8_x5jZ-$Gv`^0Rf}1Vy{{XoIXdbE|aDEX^h_F{X8dZJ|$#7}BdNQ8B_ERU4ggmAL0d?>_v& zOjhneU-61ks6*U&L!*jPumrc$$$$=T58oUrgm4-*)l#-I*mc{5EasOlIHqk44j1{@1}WaR>@N1tv?q*NdEk~y%Ru2>Af z5`J(;jPF|i00uK-VE(y94YnPL^vV=E z1be)=wXF@0>KK>Em<>mRC{gWP3ks!D8AE_*C|>vT7*vcHYW&AkDIwX%2#L&hKkhU_ zsP)TuM}hs8CrlS%jP7x~;}*91=LT(>1OSPMtRnOGAx%Ao=0H&*&JzQ3g#o*BQI5I( z_!L)C4;fOMT?xi%O8q#P?X)+51|-$-a%in;4%vXrnk)YRG8Av)l%SjmW>k3SSAOH8 zc4_j*g+82 z9%hwLA;DLdEmW|># zWDR=wFc`G+UCcu3Cy~VL8(s5|8$#gj9T+DtZ+D{-1LD507Ok9bS+;>q2gkfMAQt_Y z5H_5qxWL^103KZ0BWGOC%r09Z=E+XC<1`yicZM0hz0Hn8inOUOLVj{g9TZrNsstX9xYMSw2s3;>?oN{BdK6T$xg zGP>ut?ke8iSY`U>CjpW{PrMixfv&Fhd4{N+K7Qj0DgI~NLaL&a#j@aI03u9>Vc&^GlIYe<{`E=-+yy%5T6H(BT8u(1S(0l=Xj}5 z;jV5NL7Qv5+AN1I{{S%Ci*>-tiP%D8s6{!Q{KJ}|DaKMHN~0Mb-%hHI9FS1%%om%Y&kJYvv?uFG!dT%{L7U@xV@p1|M1{IX0=RAM7wq z0mI&7dB3zpGU7(}^Bf#cAEqxcA@c%AglVDw05JqW4qiVoBn^L(9%RU&l<&{!g6~ix z%l`l|lt2OcVHUyR^z#e>74Day!DG$eSj5Cf;l^GDz;3aDoSV+^WC3d69gA1Y5e4CL zk=pK@7>E~F3+U$>a*IpG-`fpJB+UhOG~?5yw0*?1B3Xuj5`P$t{{SievKR$Ae9gn4 z$y`u6{{XnH?Y#-pn>EVV)IR3Q_M6o)^-!cvuX(EZS-ea{9dM)b5l&En>l;rJCyWF; z8m<8}uD&s1$oZ>+LPpOYPnjRQTXglCxIkNs$#K_l?QoY1PCLMuuyOYlL_}*%zzXc8 z`SSoT$!dGv9Doy%@0c3^X;BPr8KPm8L$=5F7;+wc{KL@^PaF+2Cl$~0igbfrn708= z&kG4aqx^qygNGXq94Rj8e8`IAA)Q4gzPJJnw)*1;9OvgYZr~4QZ(*wpiA3{*qLG$w7NLWW=QR5EbBQehe`YaO zq2sBViMJ?mh%{oY_ZUP3-8cK25Jjgj#!2k|0P`mekO2b~3U>x86tYMF9%R8MG3c74i61cy5aK+Li`}5`{B{nBFHuN4B4VFcX!420B+`7$@pSj8dT25w2kXi`eWJF4!hoR zD!jDY;CN+i$k59Ao~z?!G`^vHlK`b^;h>qh?o zoN;w#m;1+pnobU;ae<>|Xv|~1WT+eO0S@_}xDas7^KsNBcb&bdtZyUEHM}{pR36t4 z;t~ZPm<$B;Dg5TN=UE*c8gkqPUuN)}S@_L8AOo`J}p8PPOEd*{OZqY_XvqGk{ zVZj4^=LSfr0(J4g2l*e&*noM4Rqn9DK;rz{jAYThX)q8<9Nxa>`v4aKqscgO=_>0Y zu?kMtC&774IR)Ty1y1NW11M*GIVmb&XmAig!ZhD;gW0jeo-D&x2|Du)t-$X#2uFAB zS_ror%J$@9X+2{da7`u>=?;Hf2t&KPwr>!<%m-UDk4&P`0&8^6@om6#4QSD`syu}2qL>^2wTZ1{S z9#kC$1{#_JbM8+~{pCnTjBt=N-mtqm!Z4-bcaB69oG$xwnKQNCNQaQXruiW;&^fq6 z6Z*J?4OVNcBb0gG3|tQKsf*fPU1NAupn5$y0UNWX5oHPb@WxGne$UUi*w(;KOUw5R zsOl$vuPs^o0mnwas(yi&5TEY;Bv;KSKa>roLDF#{xL@ItC336cjivS0%4MhZ2s_M z@_D$UR1jXTZXlEh5QZ?(<51z_7+^s!2wY->bn5>AyaZkj9Wx+Hob=#94)F~=agJ%E z;B;XHn!EaBi*2iv(22WH$vhUjE+O6x8>(<(nx#GK9`W4RN=@c~=#86H)y4~uHLLny z9)eJud~<~2X)Qi}U@8J_@W8myr&?zjwGIsqoOftU2Eu!TY)@Fg{I42uv0UWjdT!n(K49#k_U}Py99#_neHA-Qr zfyAUeHG+6=d*jT43L}%dp26o%@y9?mj6i8C- zLlR<20RI4nECH;gG;0H9fxh|sgOriLp#xFDg%yo=cINgS4e{n^q)DQEFjO@Z>gTTu zSfP3V>9ZOYVWK>KnbtkJvP4zZUhzVnHP!>W7kwXdQAx|a;DK0x+~Wf8tuOb^ukyN> zQ2|LKi!J4eS_RoRmYiKaZz7|qZ*LW6%ibieoZv9|HZ~Iul z)#r|GC`OMi@y18^v2);QPngN@M(BBs92Ms|S7WS6y(T~fjwJ3_m`#u!Tp~e|xw%&t zfAcrD&5ytHI6tj+czrU8^lr)j0C9yQG@8DSMgXf^PVvRGQarAVc^q%q=;hE1%e;4h z=~_>r&J$xx;f3QGQ(MDUd>8b^H)J9m0fV*xlwCvp;zLtpJ@v$hM$j=m&9Fo*+4-9v zeC$Sbm(jzfxUm#;PWOXC4?OSkWq_J)=$-Axz}gZ+2Xj96GkSF3?-l@%>E3E;5N8() zY(}z=@r}U%QPcPAP(e zcUR^H9V1D<%a)v)BH_-iBZy!GSrwgQnhDGCHG#b1RP4rL!@rmp#0wov5EEe9IiiT} z>zp?7_4$fx3wz0gs_*V;F?UXf^C)p)I9Y&mXpq#)=DME1_c>sQb4X3jyO}610VN-2;r-r#!+r zbv%-krZEU_FCMUUpM%O{Eg&tlFFM0)X+Qc*4CAY(^Cvx1M-MXV1dTA=#{37*+-3H;5%Rux35y15l7?{O=iKW1pBzI7*HmhE5hd1m5#q62amB0O5w6 zAxE&sO&(qhbO=KTR6@tBZi~RzI0zyr9earlZ^x`TNZnp{`HV#@{WvCg1zxgONZ7n% z%v7ASS#$`{`fzW$7}NI@RTu#`yl3e7l#lQ_!>GSzY?_T%HR#sZ=rTc9Ny_z)8VU;W z=`hkXln-mL#UPtc6#oD?+C8)wd<y{*Kld52?0&?X*IX7}}iy~?`t)P$Zl|a$i!kA&8Fl&H#Fp?y1 ztM?vM)w6%+A#hh@{-zF`Nw?Mjw}ZE1f~L67LmUh(uZPT_(Xo`SwU^x$ztaV$;cO2a zp%0HA93K(}j`DCz#rHq_uzf#svKKY4VAk?5s^=J4P9xT8$l5O^KfvM*?^r+@suQOv zYKx_ob8}i1x|&C$DzbzDk$Q1TGU{8tn1=$p95_7{NI5fT0Mdt80w4`v^x|g`pmLLR zoxH$y0ni#==;08JR9mZ+rr6id+`CERr{=QIY}ZnAaSlat;@}=a;VJ~!`Z%(tgr`f8 zjScAk02okKMh)X;+w&({Ufsl8Z7H+XXiI&6)<<@u^ub#_z-4&=ppUp165T1egrd3* za8R-+l|JKXN;w^5)*_pSGY5vNYrw->-G^DV0Bq@o8rqA!Pmh>s90|kt)XFjdasJ%l zD8PDpV1id-Rdd(|{{Z-4gH2QtrN;!Io*{q~K{n;Wz!3bCw*skC(|YX9;494vQz3g- zLA>1|vUi-6j+33{kpVm>D~cAwt=n=BpYAdm{RQU?)j*5&z)Es4&@J>%4~|fcCIUqT zn!yF-c{np`dk$|7ML_{{^5hUwbllaeVftm9SJwb9*I0vL@h}Vm##bbqm!RV|NT-Hg zyO@U3Vk_=V3pb$tGRUU0V`J7y%aMg<5beUm0&Rg|Y8&~SslLCAb-ELL?LJ^F39Y#3 zF1s7R2VV{I5o|DNiV-S}IL_8s?>HhR0LDN$zvgWVvu-{#YKD-@i9bLdXPM1^Im1EK zIZRZdfb)Ijf_A;@Gt-baaP$P6XOlRbj9@7o2j0)s0?8BrJ1pD`jt6*BL~b0&5PT(4^n+X5I=HDUOD6 zgbwmqjJ+AA2TdebP8*wi1O>@fh=${=LzPmVaf}AhxoL>x@+r492!|7&wZw+iwB~!7 z6WH&_B8#-+V#CDk%g={(*FP*Wx-AgYjcALYc+1TqSiWIt_Y0_w#k!k z0>n*_ewh6bpz$-JD0FDnaJ+}jxRYiGYx-j9e5}DIZ*b81dDPA&JzYO80SW`5vv{&n zyLY#E0s^DyTw!9ABm0gRa|5i;VPLHsq_)Fj+!7cL9JStAMD6)!zqk;wj({=Ir8+nl+^ z(-JhQ>6{knvDOU1q=SovI;3sl{Kl(8FS9J_PV{9!R>UV6RE@npVD5z>>4+OO_kVGC zCwxD-i=dJ)@7a(Dfmv=8MTMcV9CQw;XH4i;F`ceOb>xPn09yk)6&m>mYc&LmFIuQ(CLzs?~Jya$+GLDxAq z!>5d1xJ_K(H{1cILk1&E#Mg{W4z;TureeXBYDuj#%{G%1}{#tuxjh09y(RI4<`pE8c7Poa)C72tSBTm zNsLxQ{xPzn5OLqKzb z+eBdlw=>^k5*aWaF^)@YEQq_|75wYncn*i&*m%oK0C zM$_Ei3_*7Xw-wPrsf)5&ZoQqD(gwjhe9Dl6eZQYDO%hW70EZw9Hx;eLqf4#_>j;-Y z*KQM%8Y%wfKxlLZt=+)r2^Q!cvqw3>|^47q9!AB`*AbFt}vf-3$R~#_OjkD@Kf`Sz@_mIL%B!!ae5lx^M@#CxqG& zi;5hI?Z>55liQmNhg|;vlPZuFygnGPQM$4?#SXh1m~JTocl>3DMDs2nq>N($->`5@ zrrBSO;)#||Arj7T}$5JE_eD>r}%&ROo$kSzu*)dP=eg1H$99?>N;Dn32!2;CUm`o8Zkb zm~ErZznlXHMk9hpcM5bSJJiCb1ad|56wUtt7z>5P#X_{nzcE&g4d97lJetLc!r)WV ze|!N7uf}K`I>nZOKP~}lr|=wgUGOGKsJk|}uM~85j(?l^o7IF9*A~jR`iBeHU!Z%% zmz3D>8N>*SFwlvs+WUh-8WCUhj>dr$Y5ZeCO>gEJ1tIv;tW-p&1UP;Bj=H0-jsX$4 zqb(xABOEjjZL6Tgm9cQc*EnoO-sJ;NM(5k6F`M|Ix)hH z>~EhlkTMyz;0OlveaXrs^u^+b%d-eHGREWPO-gCk^$gyFgWX`E5y<}k0GPI3DiTxY z+_Yi&a)qBJ{_~JR7hc(Y3BSj;6`>eUS58q>O+BBu)}v3?YwqG&T*p#00_<>XUtcqofy{{V&xA%Z06<>@KW z=PtBWS)=nM}q4W$APlreVST$jINaEPF$<9hm`r7q138Df(oMiykXu^h}N+U zvTW@6h=3RNe=Fa}HB{?lqPEJ-X9ho52V1%A73%dqXHs4$(f$--F4wx}g9Ay9p-*UIFhZ_L%rX9BH$4+$vjcLSIX(qSMG97%wn^pVH zRDwCimW}}DnVdHMxk;wY7z4H`66H;A5=k65F~|V8?CF>vPrqjZAaK1b6X zIVwEG=um03$S5UJ*ZyEYUSXko!40YoHBt^h2nXMC*TBTS5&VN9ED~!iblZts^Je_G zVj+$X{{Xj-p$S0bF^=BZ(Hgjd^ne9nfJm=Z-)=w<4J&^z?_DeYVh+WB{1_x5QKDNh z)~W~S;!&=`h&f3mKe3V!0%_5Jr9cL##P9-X(%9mwr8mfPQ~@u$_cT4LBkFP(0v{s5 z#iG}9cpVylpD-Y(+;O6ERW9Ffwu5Nr<_%ya!=i2T$Y<_%jD|gk#m$ubT@P+|&@_li_ z4Z!~Zc<42{S8wr&pwnlD;!`8X$&$mJI>8j}7Bl+cv(~>83Tgl}!4)E}<~EyfUgm8V z171u=tsXdW0H-#&$dyv}Jj7(()nWW+Y!l_bahWMb-V6d)W#&JaOiI~+rz+idgj1r< zOcV_c8=F`7%?MD;NwQ8>55H_FFdaf%N|jTj(iK^=I8Nw(3*=JE8~fF?y?rVWATr#1=RJgVhT zcr%p_c`~ipgm7lXxg!_J)=<(}A2ppD-YV*va*zS>^C=Qz%bE+QBa{it#5^7HU_*B* zn+>K#=!st0P-d0adBTAc-IpI`yI(#zQh{%lcK|m#IKyF}e-?FwgxVGN4uDnDonb}< zaoG0}&0HQnV^Vk6VvA2A@A~5~H<2v&5&=_&kLS!4l?{thU_)9|f6Iqn(rEYAu!uc7 z$~Xa-LYt;JeF-p&Q)7~sf%gPhAaXj_nML6dQ+qP#WeEBEi9n!yGX!qBhO}->ORU=m zGu%>w#>@TkB9ylHlIhR-b8uBjE)xn@xv89-1O&9Aso;>IylDKN zhDWtV$76`AwMU=UB{yPe(%{9?vWnvb76rHzU;X|tCzPl;PMicbgdAlhf?|6xe70<^ zFIXkgZ(rvSfC4Juq#eMX;!y0l>jcpuc=?H<4^B+rZ?f`Zro{@n4DNy1%hUHAB5w!x zCKk(fH-$8bc5t0!2#spIuUR1Cku(^W%cNdr(-J>Hd;N2QHVq#AbAmwW-ffKHCXAp) z`Z{rC-zo;boI)1gE7)KgP92whoC`P}_%Y;E4d!703CG;M6#erx%B9`}N%VBS;L##H+GQoE zoS7ZQ-dPF|K^ONA!aKl97&^G)6l3 z+_?)CHg$7_#O>*ZP-W0}_cc}sBZ7!YSq=|zzjjIUw;+KINyNw&?r#z3krAA09?}CP z_wx(&Qo~r}^epB3iAFPlalS0@lL|{xN_7*|oV~NKSgV{W;DmP^tR)gz620c=H5KrCq%^{^`S1d6iK#jtECh zKI0OXb-j3DP9(O%m~0kJQ>@;HdLto-Q4@jp;eiyi*tX+D6;vIcFenAkxdlWa`<7@y z+e3euxR2KQbCD(6YlCz~h`*RO6GZKO#>yOlq5Q%_`uA~!hi~IJRY|wZP|ciSEkB3L ziU(xYEwL{w?>T`y$U(%4u+xLWwxK-Vim>?lMK({J^9N>Aho&Z3kG=8wl%oiw=3Wc!ngX7#$EATgE`J(AON| zdX#KmILb^Xje@}3Ramyu6spK`V}vIfHx@i|$Jh+6N;EwUJNvh~-AU?*n&vx7;O8&5u}Or`i5L zFzcY2d&v<-+=~&jHXKF2mlt>jze#c66LvIQGMFGfH*NqcTaAsNf# zofFaG%vO9!G30Z{)(jC3dt4cshKBK40M@o&n3V1pf?~j9UT<$#DFD0+o=i07jEJCs zk9@?3N~%_1Z3Qmx0QTTCLGJcs&8p$FjVioMVB=0__1+Fnk1rd-81S@m{61mXK#9xp z;i{qnVraXZCX52?I1qXpatVyk{{UEpdR{sQqZd=d#?uvG@zbx-lmm+wI{IVuCFz0k zm-@;@oa5<$lWG8eR}g{;w{-iQcm}na5MB)iEI2BJtAI&)H_V`2r?VUckg|Or+`0+v z;^v*3%H|!JK93EzF_8X?rRrdaEhQt*%)E=iR}3k8>iO`)C{6BgnGhTkv+c;Kg2&8o zXqiOV^@RzJy&o~VSNSqX+Cp}{7`jE!{U=6HZ8k^v%>!|fs$es$^xb=rgey*2>xoA) zuJq?BD)=Xv;jIiOKIWnoK({tWjR&|S z*iqs*jRggO>#RlAgqBwl3rgnNxPsK?G)}N4lu>n@_!b|%VkIEgnM48G-E`p&&yF0M z4GPz^{{ZGAOV}t{5Nvrv!@q6uwZlf zk(8YWA77b6RtY@+0H!F+_Tu}6-HF-Qd#(Zo;izr2XqV&sxN0`;zi<&j`H>)PtCa+| zPq-+y9DlPkY&Ur;i*#<`Qw_T70TPzHxMNkdZ<)IXQtyKh(5f z-UZq>4t-*RztG8cFwo%i%f^!LC30^aPc!$9uqvC)U6^i$#|hT;nyd`qYXf|17yB5~ z2MgTzGM{F-!Bi-NZ+Q*=P3+!MiUY5@$_dRQeGN5G!tN`kHD z1*gMLubCvH1nAdzU4;Q!&}GOtW18X950bU;_ zS74M+8Dcwe89%;6mW>Fb)8-}>_;TKHjo?d8b3qlSG2d9wL$lQJ#d`w+(K5Rw8czEI?rKE` zPk1=Oq<7?VjX40J{xD?}lfizNEiUkNuQ2yvHC+B-ffh>t0F2@JK>q;qEXb-IY1@Uu zD&IWkGIVo|2(5=mVAZah!Ket4%}r`=+lGjETUxd98e8NjBs zGFlG!z#4DnT@7LQm<8O2%u#KGe;DnY0~ur2IBa}y3BPrdb#?bD*7(*A%^sML9o!+$ zT;dNNU)&AXZ*xwI19`({vLi}g`~hLX3e~ezBacPM} zc{;~xeA}-~87Kp;@Ed5nV^*7Idc$Qw-+1w^I{_Ld1jw8G{K7B6xLH?!6Aj>dP8<=MD{}Yor%=+eJO9F;(Ci^7LSpvvIO8C{*NIC#G=FRYsA{TnvEb z=E4mr;}+$0ejS-C0_@=q@d{CFQ%(vCG7!g6%eEFyK*J86gy10ZjFu&sXsf*W3cc2 zVo>S}beJfuF30=epaa7EOe|!w0n^?rs7n_ig(<5|l=zsjMW&aB3ZeYkc*aQwlEYghBzt)KB+{8;Q5JLg>wyL1$6KA+_%! zarDCa*x^MFCTLaQ_JiO*X3n*mUPjX;<3mlv8<{s^BrPL)-bf?kUW}W)QTdC~0Bj)4L~UpzalK^|S3C14G$!;xk*bjhG>yWc zn@95^fIt)%Sf^&M@7xk7vsd3TAzY#Qz$Id;xCwTCST}qA ziIqDPewlYkMdio1>HPzr+==#X`KBKo9VV~G6NK1#Z0j#Z9OM$-UZ(xRTXMGKIJjtU zQ+e?G#S?*HrW~8+C_Igny2We4=w%`vLU6xlxuE{mN(F+0tN|P@{mP_r%QP5^tibv6 z6z)*OH-`xohWDI8q}|qBwr0Mvcl7r*yAi1F<@A4*+0I71@cH))5!pB9d6Z~E z<<8Z62UFZ-a~&l^Ac7&Wz}HSAy@>|@0E`95h6AtPF*Uxs?XPg7VM+7n+$c00eRF{Z zjt{AVRkPDV^x%bxk*Dy-FiD5g1&W+>^9Bnx{{T$WNY8aLqAUwB01K`h5UexvBZ5>0 zvfz-=CMmr7_Z7%g{+vXyx-Bn;N-{l{Tg8&o;gTtDE=+G|q^{cIBQ#c?Wi*E44PgL_ z$BU75o>{DP-J2D&{J3g>RB9=T8t$9|DuTUng4jYsA{!B$$>voh%$XB3 zqpAhO3S@K!6lz}ZJC<8*ns}8%1W|&h&I~%B-!EA;vFBu8Ot=Jwi`FFYo_+fB4G&A^ z${*SzT-OWv2~|eMB(61=wUiu zK*IQ9#9TyM&D84%Y^_r4FA$PS&a(>CZDWYdX&@K_fk9VCCQZ<=6+w{r5l z;2ONMHZmj}2Oltc`-coe0e0l`2{K9ZF58LD6B9~NxP8FLUlYvO7;s!6V{@C8Ds5f8 z7!cWajiK2Z)XFrK+{PYNa8vZYnWg^#`IxC73wR7hgq-ZWd7F-(Ilu$P@3~9FySunf z`EZ;bWpoKSIG6)zcmtAogKNpT&T4F@`M)uU6l->~4alq_Hr}xml;g~Ti$#qO<~$ne zc;OOskX|#4sP7wLRPlk7y~JqWco;C6jc!w5;*KA<90F+H^utV!MgIUlb8FrheEEfJ ztFk;V`owDz5@WSJoak<0LnP}|DVoA}b6>B|Fv2$*ce&63Q~tOIeF%MT+#s5?$G86D&R03sNSr3?p~w@n zk;7gbLC560jsSrq{#PMN#pvkH7U@yQha}m^*9iJ|b91YPg;JrZjsOE%TZ4XyF=tkdjKxk=Zjp(NwXFnXp+lWyG z;rBJu!QK@hIR0^)i~2?mkzH>A8b_aIavFIGxWIE&Ik?7xtr}*HXdLlaKxhXg=HtJF zQ^zs8r=fSQW*a_ryQ~WfroG-U;_Wwo<2M6$d;^e7@~eW5sYUye zBoLd%;nPJnpK%837ma>mB!Uwd-qJotBx!devk?u;6xR%)Bq;1Fm5r1`l`j*lO#xF! zoC(ZqZ1{d*MBd`)!BmP_z{lJ*I#`EBLjn$``EVqmK{%eKASr?OeVG@qe|6+j64XsJ zI4pxoQ~Nj^QRKYi36ytw{xJ$RSmP##OTKEsMb`E<{g|W!Ym!{lm7me~c&!7b^Ueh{ zrr)@bkBxDKUWs|$7LLT-IdDMMy#|`fP+MkpD*phiVF(7p29BLe$$_vSxAC5dA_op> zb~gYOWLpjt$)tD@&QLowhT*&G3aS=4L(zdZ3}TNrSTjmEg8P8>;C8=m0!R7Dw_D97 z54z17GVgh1E*p7sydiKi3 zDnEk-6fZ_WtwY%`(fot`=Jy_G>ojr`&hed)4Ru`J^$|aFPla|Hz&fI#-%hY)+5uZI zsw(+u;e;I(59hq77l{llD0ELRcu`l42ZrJDIwEZGka_(MF%4B~o!*?_XirB?JHK0Bzyw0BXaW_#{Pz?Hp$V5PS`_ovL8Rt>V^H^D z=rHjh&mnVjQ?f|mwve$f8(&v}fzn2+mJ)c;14)R50PXl=2Z9~??<67-I2Ysd5Gq!0 zXmQ-|LvC(xU~t{H(8l19Y}kh`5TPpp#P1-S0KH(KRTRwyg{tXKE>x=mwszwaLsx=j zDI+&;b-_d7lqo=F_X&U^4ab#M&1(CMem9M32Vi6&ND@p1yfT-UE%$9)9f;DdZgC!g z{{ZocBuLclZ&@KFcXSUwxMqn~DnrLY%*Gm%u7r`1Olu!A-z)sDb?2)F`^r*=0i5)l)?;JziwC)-uS>B zbu{hD2jQI3J*H`6s?BGG9oukNS9k%gb9GwyT-toe!8><>CYSe91cip6UTcEMwgGpu z>5+6j-U3$*n#t=Z$BYk8%+b85Mr{?|Awwho0L(w|WHo}AMF{c_%n^j!w8*!B@|mm% zRyn8t0Jd|jdb!kk&7czEIJT`rb2Uzir*{nqRpfwY+h3 z5FM|~V|6yyVqoE=slohl>454yh6nK$o4w)!!ABd-$BE0Le8Fops_>rX>mWDD#$6k( z+T`6a3FQ9(xvUs;{{X+aD}o=+1Z}>!W>Q2oL+2Wpw*l<$lMzOaI5E|>x;rumBX@>6 z9~<`?L|G>j(%FyLPiz=Z2m z!UKd(^>cBABw_^c9P*ADf;T*7!$z=S>dgYR3@Tj$IDd?Vt7M#3PFn`9v9utZF5YJv z11Zw=F#>E-I!t_Pq^Y&ZC97SeaJOJPyOTE)kbM|+7?Mp1(UB7XL1q0hoQ2=T@WPS6 zVs!Z7f~w?juiU;EI3@mZget@?zA=<1TsWpQXhFA%>-ohAY)SdqjLWgm&Hn%{Ac|`1 zgm8*9N;kvc=89D~JAaJjJ0I)({mWK}>2%_0q^IjQxvCDAG=UMQ^)L`Ac)hqpF5~3E zNkGB2h8im#{(ODSL>1Ssju}^Ofxu;iA`?R&xRIf^)+z$UU)=tXm^xYZlCu72qJHzo!k)?SeHs<8Uz>f<|47E3mm)>-Th;51o&Hpc!yX0 zu?q+)Rn`eg<_9a200jqbNPxEdFz0pI2FxsI)K2k%ffJ^(!Ar<_J;e_)JMLg2ir$>q zA=#^fDZkvHnfLA?p+~lyUKVS20K>`dSpNVBFcTertctDvFoC45@G0TbfPx@!{mBhB z)XpB49#Q9tq`>(T0b@9L!j7i&WaQ%t$@pg0-Dxv(4LSaDY4^P40hl^W;Q9XmhUtZ3 zNSH@i@xy`dSXS`=0KxK{Qv%R#&^N3!2|d9SCDY#qRHGB`IkJ^eBO5sZx^syU0c`vE zj06T;Z*mDWjkMOPoS1;Q4I*GxefzY~sB;_;fSzHh;xQJH?&PJk8_szXTK<@r zZd^b_m?$}IINN9;^m~bDh+V4wWJ1!P0QqoGgGLkzG`-ea0g$N}{J{?U3L5@#$pmt| z!>Nlyaw*pts}zAwmz-A(BzEF30&mt5CV>p+;}lm%BdeFcaZAo=AtDhj-A~dvUu(z}v3OBETAZJ{eY=oeRdyL5QYLpK!2+FD)*OWJQ!- z$IL}5#5)rmP2ND%W{f2v(01XkuJpK=kVcNbA51op5DyP-GW1Z7owz&(aB;js8}ct% z1ceCmfNJiSCTukh_iKW&aZiu9<;0x1$`H3mclnIXtr<5zaiOr2T;OmAUKl2Vj-PM| zQFSis^EN*8MYvs;a)*EODh@{yjv;0hy-X?%?LiTI$Lax7!S@{v(8to?LAiOE00XJM zU)MSahUSmUiB%)Zvo595_;L|fVE+I(88|p=T^A*wS$DMm0PYy&(DnXt1OZ7lwZ=** zC=8oz0SSczLup{&`I5GZfzEK+5c-cfzUYV?LC{8xGN{k>y8i$ecK64#0|ho~9St9j zoZJABygDGfH~eF0p#K0*75KX4q5xNu{sV_m=VAc&Jf zWNPD7Bbh@1P_S1j2IUr_B6uK?DB)Kb`ZO4o0=CHN(D3b4hRq^MRaW^Zx)zqOEb3iwkvo z!2uCZ>6IqIQn;##ppUG|QZh}otVe-<<3tb>BD%9t;$Weq-kvjAZrlnX#}|1Xx4gqB zl_nqp8t{LdMsV@PL%`{O#y}C}_XdC>5ut)}n8~HcTQ+cx0o)t=b5KBdZ69z-0Mh3@ zRi} zX8NuYj^y7)a{Fm|j0$PF<9*5^MA_~Xnzo6l^X>q47TiQKaxw|UAv!j^zK#WQ1$WEl z5bo0(se)aG3v^t7o4a!r-z3U-URV;bxYuu$J9O2NgkkH*bb) ztQUlEp_Q@k2tk_%;(7B5@f@6=*9HKw;u(GD0C43?LEmg46jlJooj@#iuM7iCl#9*; zI^FXbky_V*)%supJQHNZY0+G*YHjlhl66N$036ZVf5s<E5H02$?Kdx&Oof zClLSx00II70RaI40RRI50RR925fC9DF)%@4Q9yxlP?6#B!O{QP00;pB0RcY{!aayX zLN2(%ju4cGSY4D%rO{8#=dy4@>mTkC5<6Vx5Ql70Vi6yn9i!oE6!bN`Q8RG_v84FJ zc)eVD$|M=4Qfl#p#3`{ZvD!KikuaAI$%%!X5-~nD4VPkkCM4RqtTpgPvqno7quwTv zo-P(164vmpG>TDhSXVt8rPeDG7@r71a)coAkuflcHassuo#R|LyshkztCfZLHw0-5 z-YBWkddGOz4IMn_t1A$i7eqer*JIdEdp^Qr-dNEm z6r#tE^A^tz?k+z$q`6#t$M{3!=S!X9^0-vT`X)CAH*hPmEL%uyt1wF|e#@J&(M32y zt`idzJH#gnE(r@8<=(kpxTTmX#TekY`e(5*QMsBIqDu8js%+}}t-8p3d?6}^bk zp*;7+tW7L*erH8!kcICRO0gBOe#oEHB!0$;_Cx8D`h<_BkD@9l*Yuy%PwFWTK_}_< zN601pEcy)y{2ydf*w@=aU&bF~B^rBWM3D3}QOX*)YK9nan6@N(Ok;ncMJT^SexxnC zAVwTA4-*X-n(Tr&5+mra626$)AMAXBcc8W?vk!wq^b)j=0VcJN>=@^r44NCBxHN#>{(W7tiW1teK=3OJ8B2hM&_YCMyczA>V00dN#Y|hMh zn90Oe$-vtQV`5V$vu8*#qaCCy(41qeO&x@ExHimtTf#KjG09^X^kOzX!p?nMmiiq0 z!a8_k&@G{&EF=wEXR{vIx}(+?ZI94O8n((aL|D}V+clvV{V}BqobjM-5S0$>3vr4f zMSZdiYgyY2c(_<-#wj{Fix5arMcCD{%xWHnEqU~@W-3&Jbp>aGe z9|<%yJD{Zd$5^ee<`M?2vqyM@g=zFHL8wZi52E}Mprnz0;nD`97PijpC5L8^ptM5E z*zpKVCk<46q%OwrHf>>bgL=cHJz~kaLRGB#Ai>AHXt_16H=#mE`I1Q#8qc=uc15H_ z(2*oQCY3Fp0^EB(C(QVdNBTBy3>`ur8FnpA2tHx)#)W85*xRw~pxFpaY}oWXA`pyA z5K6_+_Ne)Y)d!Ip8pVkUG}%QKC>v3fYwIAcsFE{HJ&_g|y2Q&^B?hvrX>y?)918-1 z4Pg+_(GcPq<*FG(HW;N7E?Y~p{{Yl25ZQF&{Jzx%`g0Ng+Q!6edx&S)eoHAlV|FoYo%7GSdY=%vvEkvkeTWMmW!wkLz8 z6B8B@PW@5cDL#@Jee|ps6PosfDVk#p6C^W#_6R0z?XlHn>`gHpZ-3DZ`%6Q}#@POi zUfFRrk;nf4=rfbFkmz0}e(|fYzfM?9uEV<6bC=RcLqg%!ZaN^BL?JhySYsC$##|U- zsDjlgsj^Y z8}2cx98Jb-4)!&5G6m0FRub;8e>BXp$Z9o9($~b zh(az8P)m%~HNyQW7-b_3+#O>55g`KiFxyyL1Vl1Jk&B7VXir#zFa5nC8f?7FSlzw6DoiYHmXM7n zY$1B-43jsb@du$e?Vz!L1~HhB?(KR)@vX6aHd|vw^n&4%Nmd~(ni@eAwNcK4iybrX zgz>CVvW*rS5i~K*#YlLYxtuO$Cj@K%0CU`3wY{D+*R4q-_xRaW^u23aokec?P=>cP zvlmEn5hX`8v#8n~OLt+1Rox2Q&}6kW8JakEED&`cuzvAvNU zjjT|-IDdj=J&$h-hpb%8QK}p0ZT^Vw5{P@y(&?KF@WK#6h_OoYh{T7;X=#cRh}(Kd z-~O~c#F3-6KB~xjKG~shdqSVA#8&ByX|G}-BG81-)E{Uz>k#Fuu|-6Yt0>;GrvCs& zAqcu26^CTsKVlvmge*3WyhK78!?z1^v6z}f;d4vC+CzMiOg+RQr+u4DlcU(Wn8}j2 z_$Z1v_FkjA+g*k`8xerHWpd_J>ui9aOD}R7nqdJ*l#3zk^@@ z0FeHo{0qjPW+;)12=r}=CK~uiBtxuynPMpxQLyWe5QAiWpZp`Cu4F1$GG=f>LJF`g zGKeLYq2ZKG9b%MBOxJj)vCzhY7Zjor;WeUWW|s^$#H>h(41QR~>?IA@-Q}?`--RJI zD-2j`gv2<5M_e?RnApGQ{0;QF8ygm(CJ?QO@JLG?i4x}Fmx`pu82V(_jBG+P{30YG zWW*+B5Q0(*qG;<5MmAFL8{C65CRAK3Fq!QC00xY$jpAx?D4zte+gjmDQjZOkZkr$J z&Ei2852t$daQM${qT*Nvz z!jO><@L0Pmc)TG-$wD{0E#6lI%ta;2=dvO}CUkd&3W`J6l8L4~8(};`tsMsI2mb(0 zp++r`m_lRg3$!mn5J;U9VnRouE;M+AAqJ~h8;!Z41g0r`NP}WVHd2(VLyjTkvXpVg zJi!n|(1c2n_<{>5K_g-$@Iq!`yX8xSo59zP=855`K8}PzB0-`YxTAR7Vi39+35mfo z5J*&AiU@=fAh}L3=)M$$5*9C=VXQ1xQs``^@`;H=Moey$g27)RQ!yO~LS>itjAR!0 zGR4C1g$*w)5QMj}D=41_R(eH4cwX`T9f*WF78_>piYXEjKQRP|FQReznThOdr72Fz z$~pJKWnnKPX$wKXn0M(!E(l&-k(1z%kb@|gwy;Gi^hAVA!670F-V-wvxTT)U`cmNc z7=L`x5%{XXqCSHg!a`&j5VPn`5Q0KNR8th9R9~?`kc3Bx*3D>wAiNZ#WiBoo!H4uC z1K*NWi@`@DR5kq)HcU2j?3ql98myrSq6j1;BurO?t3oKGMnVYu64;RmpF-zE{^H?# zI}A7z3JfuMt}Vf;8h(jGWHdLy-71L<@K|DraB7-NBU~Vr5J4>od?q{ef6-_{W1>8D zn~GBX%6O$iR5eG}19IgPjF>DuNHMxMF$}!o((jNFgLXC4?`i zm`enO=!kxaRxi?`;Y9Or*?LrM40hmeaBQr6VF`y`CkDmgk2{g;Ma3%?5w<;!53DRa zK_j4&6RaiLJ_&3=CD{liqovTZ*;z_9J&|yjipn-U27aYIjMIE?4TwZB_?{gac?e?> zuS0F|NTB}Ml1_x~7?Ti5NwNznk+B3KBE&sH;j*eRW~po2EiDtpDBs*E!A%Ta55X2F z_^eUJ_9h_T1R(?%Fq~}(0~(r5@rX)9`W2QYJ_!&(dn)5nUMmv^m53mO$xxOhA`sBV!sudTX)$_y58f*a!eT~S7Vz|RQ50$?(A|yN zE>{QQc!VIF6S<;dK?bmbLirI+{R`xaI>od!gs*tt(P4<2H=(N_LUa_7hJFhl;n5f{ z+ZQ_h!Za{}uh`tLoyA@y#rxM1TqtQ_*N0z31gL01$ePOg8agQ0o&=5y1CAFOGf0Fy z6zz>dXzR3Wp^gn!2IFUyhsyZT(J@O-o(rtqF$1xpvjRnj(FakFvc^C62ErP`+ZSWD zx;9H1!)1eGL5d+7DRwdTiiW4+#_X^7Uo>cavF!9ABOdTg8U%Ypk~HX4(i$R|dkFhj zE*}Uj4WB&pJxdgBb~as){=u_j#m8$65S&f9b;bCf1SCT6rrA7n#WYO?BsUU|sNLrz zbQWYmMEEVnGK=)GY`8X7He7Eh35`|R`3+-l#Jn@WkepO9VrOVv9T@r^$htyQi!q0i zV!*x#Zj?_89?b!?D=%22LM~{8P;SfPoLuoFA=84QUMmd@Tp+q)!Jdw#E?D+HhI$0z zXEZeige)Qt6hw6U!^$`5nnP4W*-^9buOcrLgnCYsV2bz>%qAPfA&7R09X7D^SSC{8 zv7sjP7jz(jUP56p5-m(pofRP%E#I>L00rX>@Iq8qgW@G#geSbs6EB9SZPUc3q3RZ9 zrP**yw3JlTgIF?p5{yBtJsu&k3kIl4yBoa?pOK52e4!f)pA&s${c(oG^s8kv)kLYa6{A|3SnU%#Iv_U8&Ea>%)v8O~x$A{S| zbx_ny>~s>RvJ`v}vQbjAW+f6Kr`Umrfifxa*Bj)VlA<&ag`kljvaq)C)+f$#kfIoX zn4rIQCfh0uPY78rM0$upDqtEn_BI?QAqViDQ}ZD+6GPx4f)Iy7;Bpn@V#9hMhG zJ9$Dn5&j;rAcl;Hi)2GXA|IjlDQKB7e$feQ0&5k*7XXA3Gr03n=?UmPLf7!dCwT-C zh)1Dkq2uwLrYVVqg@u_12fRIh!H*4;Vp;1SpyOjgQK^I^B`}^e6J$0z#Du|iGZVA% zMU5^HHbZ6KG?=jx?33t(n;?guM!!Xh^_9XCJ&I$oxz2f(%CKvnfeG3BBG;Cgr3lpTN`6^U+`&hSw!L3g)wmE3^vc-1Q9&`!DR?S zV1g?QgY!CET(Dt3u`AUSUWLlCye816wkEQ%1R-~Yv2Qa8b}TlA{fsfPk3NNpHe57l ziMWCZ6Cx<0gdQERL3hJ=+%cjE(#+#ahzV#!;V_Z1Vh`3kQymSBkG6Ng;o_ToY>99o z1Q47X!J=1*H;NyIl=S>vWjG4uFRtV^?alP#CbmBN=8A`&qKh(RGPDd2_TV*V67Mkl0R3oVV8p|QUT%@U$h zEMpcHy$w-@T5G_>_!pJ=){0JAB=?Ij-WSY-;Q1spG%*cvgF@_z-f2|!tmk)%*Cz9ZW z;6gnQD3CNE7YLS^k^BDuz*2q~C6(h^7YE4~jRNdbDd2_ti^roHr1>E(3(8$^WAHqo zAuKPV5Kaxh`~+&8mws84BrXq{T zn=HJnMkU4xVPXkp@qRW+BpMPRj>{{P@vk%0FxEYZ31(p-A`qQoQ3OSeet#QDjtPWz zUIqP6I3Sj05mZ8Gn49a8V$3!C4ODbK$S3ivFDphhNR))enXFSx9)?xm^_25`^uiZ4 z{f(h;nEbeKX?_fBf}+oNnt#RYLKDjHKj?krvu|S?!OXja@zMAfg=a@)mBD{w#xiJF zx+!wnLmgQ5PL8~9SJ0Lov&_&tnk_YLqu{ulhK4~*iMjc|NcX_pUnjgLOW^T8qzYlQwL@p-Q*%Um?O zsH=K$Os@pWT<;47nc$gN(`6PK@Xigv<4Y6q(W)Aa z1cF8+em{BC8!x0*Qt?7u8uOy&6P3$MEl|~a7TS2yGNd&ml1U_Jf6&dn;BHsw!|Yh^ z#KbuYCQ|2FLRnazWu`7ngyO>!V_wGLNAnBUvvX?h4+AZR<(vD-qhbn;P`?x|KE^RK zShI>N6U^~)U17-b(@zhAFzv9I8Fdlt)H3Y+iyLA3Qiw!s*wYjiA>iCr7Y1B9FBNFI z7xAqplYAg2S0XOOm#|~~8yW2gtgVa?S2c@sF{IFfLU_8$;_H$Syy$pYdlm`!Zl>*? z@knvKvY~V`Q7+(>!vPhE2tr_xg5tQohWtyha9#OcD2zaNkHKkv)y z^?E*^uji{__jXR$^;tr7ok+^(8f)P%-QV_dyaQcCzOTUyH)+99&F5`dhc*9mn}n40 z5PGx@K4g6=OLO_OuH%19ayK)3FW*bG)Tr(+#5ti$a(DrYK!Se9f8O2b4YgX1R-1TL z_BugoE3{0;e6y@l0fWI?8f;wS_*8zpjr8^OO*jkI3p{cYvp*=*O}N+VSqhZmZw7!| zTPDB9&vyNh03^-nWZy20C4)_@B2 zajM7X?AoJb;a$+A(|8kbXI*f*+DcRP%Yf+I7j2y;cHO4w)!S}7Tk^ju8N8|1@4RZA zsUMSYaaj2-XG{(}XVQDjo`9kU-W1JBXwfl=ffN_f+n~$U3$vi4;o3%=9k10ma_Dyr z)%lyI>wSIC^e#0%ddBQu?|G{~CerrY^}?(B&N;1G-u*#fu49`4i+2%ux>AoW4-7qj z%`UU!)ci%h-TsE~o-gWQR4orF_xd)6L&x7pjMGz1fq@E%A-mLMg;=&suu#^=dYs$GK z9-QfTe;8Wc8#MfIpgPgH#`%O&8Hcg$R={_wa^1;?!JsyNlAUVB2KsLW+6XqGj#99K z%8jWts0qAUvzEHOP&NOj%|QCqu&_s%J1Od@bk+h=qd)VhezOXAaK2MBDcNqbuASO( zgr=b?=$Hh>gkyPv7-E3u??~oUhO5ZmaS@dMq7*6;E7EJ*+oCjUxyLv?3AmWUv)}?3 z{epth9Jf?jX?ouUj|9eYToZr#4IdKz8tep@1_cTrGb%s1Ud~7)TJu8m-j@xwN+wl_ zx}*M!x+`(_|H1A`%>93;J4WAmA0;f|;{O#M`5)x2T*rfk*OWZeK%Tte<~sD1q{VE? zB{cFiwlMLqh}0Iy6SfrOr`Q3rLCH{olHpf5NH&b@q;H7tyrfPZxS+FpYX-!zFr7Gr z{8;VpQ5U$c->~)?D);~{jcOGO{Q}zs2dB0LS`Y1hJ7Y1tV2Sqr#v1!mnj0>St%l0XTeI5v2Sao20IK%DMrHZl)Cecwo z0R~=i$(OZ#J@9>`J2914LRS9a!fFfQ%?!evVdivIM<8+*FQl}-!I~^;QmQdsJ^g3Y zugIsL*AJ%7uINdA{pQvl@4D8=-Eb<=N-GIOn;mY=v_x#XP*ZOYY{WfCC7L4<0@4z&Y5bFaahfaLG1bg&o8r9#++L?9LpSt)L)8C zGE#D#uC5aXm$aH`Ml_FId!c0?cMyo8fL{212~l zD^W{HYWTo ztofRw;l(Rg^1cCmhm9+Am!n!tvL-crw~q^feHkNtD`4D2&UcF+nLje_!C^z3FXg?I z4xMm7czH7To7*fD;z66M+cIHcQ; zS-^xa1Xf<`OE$e4AUO!RN%P``&9pF9r4K)PHUEI?zRzKw^=L0$OHHtq!4>QJL>v;bI&q6>Bp4bPegwwyHjKY zFyN2gV}xEb00>5bNq>%&PEcR3$GqV=#qB&t(Dd7ZHPJrZli`BKUtt|J`UZ7E;$q=n6k zz+xp#?P_9|5Dh-fB1ctdHGQ%tXfBliMmMzzURhjl9UvJP2g2yPKK|#xlDli6w$R4) z=oG^@Qg<|&@M@9%88i}GUi2DztHrFX&7?X0*6@@9-HuP~FL(t@ZP98gk|wk&RWUca zHsCc|Eq254sQ`L+4O{6>Ro^U4uxyPP@|ulLQ`PEaKQa6Ac;BX)rRn2XI?3&_z64*zTbf^)?tj{_RQRmisMm?eJyo*9|d2 z3TM;GYT|z{4p=qNW6g=t;fcg73f|OjLM4iHL4+eu&L^JUl^^L%8?)#!0P8>2e2SiC zb1Z205v=K=>1pv=v`vv;2``znfUvA>)yX}bUQ=?MR<0nzorK13-Pb4mjcz@)6}2zY z_E((AoxcWmTcYt6a${}V<@-G(*RR$H@ROQ~xbBn#8l7Q6*~w1Xzd4*M8zvmGXOE>1 zvmMUr(3e~SpMSx!CvLF(8LpT4jaw8@B-42dE2X_x;53RiQ(FW38! zjGywXn%%P8uf{^8&)H}4yYEq)HYr<FX+}WbwAmUce zxp2rUR?wJsG0W59#q2j=D8ZW;N=VB@Z`}&}4D|0ikfQhhP=8XqJKdYt485oGn%z?I z&nSm2873iRmhW1mKaZc>?9jjM;E~rZ8}ZZ;lqvAt36)tF9Oqd-*j$v$*wF^^cqKb( zNN6KBaq47Cw!+qIBIK0)e2x2nf*iE=`#&SDtUYgXA5**#-`uL=we*>#I=^}-F>W{w zzM^w^MEgfdBE3RSst~>QFf|)$E$FvdHRAZe1mpM4z*qamgwH{p(OpwVVv<+@|4gNwT+jzGHm|Ka?O{^yz>qo|^JTKzDKDri| zo462?vpq$nFS@p&roF$V%ntYNmgCMDbYtnS-x}o(H@j`41mSzkeRvH|G!y6W^|227 z3(jJ!9Oqc}-f9Zeiqyl*Egm4wHcrUq5X|=X`?r`Z+wHsDS2$@e+}I3w2FO)sCHuCHqKhyZK3Vs$sIoK9#@i%*?TKMFw;Iex7QedD;+qu zKyys)L#mXBN@Q~!V@#|56ft&uQ@i0CeO)^xSyx`bU7(D9 zFO^UE;N6;6HOC;ZO{uiRVZ26HBEM#PbjIRU#;Q$S7k|QOLZ>z5z&}+pW;=!Irzux} z6Z~w@5%&p-wofHmopq$^kKSbIxMK=}bN=)8Q~P;&6(N}wVuy3k$UW}CSz}WRKkCmU zzK4F+XGNy&XTBaxbayn;eBkAn)dFr%K`!URN{p;#C=MFWWyL9qX z-W32pZ!M&%<%jfx1gWraz<1k7UK!mIwpy?6`yxT`YH`MlLf3g*VEzO97f+bO`3;_b zFygN4f0q32#e*excXyVUT9Ri_e^fy;)i33kB^=3_uC$CWW9HL;0&S+SspX{bt{N+^ zQu=GIP_(>i#Y2-SmupjZ)!GRS??&RDV-wK5UV1Hlu@A$ZPFKB!herP4a8%@P+u>}+ znZ7j!rp0J{H9BZ*`V|Sl*r>;(Xp4XDg#0A9#}^TOG~SF0AIZr$YkWGvKN;U0>yL#TJOA_@zA&t$;Pw)2&t#+aQ zvjyxR5FpxZKE-_Bsz2zlTNfZoCRt6HRxK<={Pg;^s41^cSv7c7a5;8HfjzdUb#H_s z-nKL6(ysMn-6^%7Phi;vDMxDdAe8!bwWk&OC2?klaPdoo(!q~H1z1*v(v|2S9sp@e zo-2}tm^VKP<23x_j<9HU%hZJFhXB;7Ys)3tQp~+s22ICIn6Batqcl%>U)W`zGP4CU zyKo#D+MJz)zG!Z%fR(B}Wkkd1E_;<}=)*P?Z%)lT+2V-X_2CdJ%K@`fh#^wNgXjJC@wfeM+Pmx1kEy z;)ZRKunStnwn9bSkAtR@U}g&Dqb8#*e!>&u-|xKuOCdPUl%`m|#n=7%ZTlJKSFHDx z>H~!Te+!+%U!i(#e6Teaz2Os5R)RKp)}T8G6YHt%B*g?7Y_}`9?Q*2>WB#pn`yAKV z>8qH|lhTgickx+wn|>H{B3i|tCH13YR_8bM5<{VxU0CO3b7I_O$-W!Kp5Gup2e_VQ zz_hF?wRVn*>uo>~(MNwZHS-)AKv5gQ#&TCph5A(qrk{lL;r<^#HF~1FBY{UXBYGka zH9ep6frQ&;AEcoQM)+jSU`6Ed^{gkF{gv`Ogk6ByOqPt`?-b)sxJPo?Ol?+ykDl>t?X3Rh4i6 zTCW#9AlXw)m`!~M5l3QN^|fJ7#hIU~B^5CAllBsY3S295jl1qA}Sw?)K|9_NT@d>xOt{MZH&c zuJewo^EpEi{L1{}Sf3SI(4-D(4C$Dspa{9^f4_N$bcDKj-c`w{KOF71(bupKG*pYb zcuo)5d4-wt%{E^{J!16><9q{&ZE(4Jkf9WR1h6}`ujo#vYjD1Pf?x1u`ZPZ ztM=u7k<&*d+6LdN;Ia=U>Up)0L&M5#OuUA5Jyd- z;B`U%(re)ZWE3#^dUh? zMuNc>;@|SE%wS{l<$7jtb+D=vvJORmKM+pU7dz%)FxJhCQ;I_X3C5n1qdMxq2->iH z#aq)aW`$y9A>_8(yISl}sW1n}7XRhvd-cwjh6>TzSdI0kQI6XgtT(`7R8kEA%=Ng) zCf8lXoI?HNeFnz(k~Y#b<62W}_*M>oIV9|Ea$6&sQnUtuBXVGss#urq+~Q$+=hNx+BIPpZhp z+1r!Nte?yc4-_9Ceg4Vq{S$+gMgB~p$D(TuudOF6FaHT*e7b)y*8fF~RuJ~O ztn3v6SZn?-k4~NHc9rj6W5nJh^;5PC7bEylm7A1@G#B~|>4QC!)U*21eJjFbG;+yv zR4PNY4Pfkt&}tav1cga%u0ga15C%+b_ndAu0QmsmkgX)5H~n+2b>gO*o>yvpS2x(3 z;aQ{er1YUib~6uHz9V{Y;jzD1H1fV?{6(P;d1=ZkdB)Zxrk10L6T$p_tW3L^NVO@0)uQcw=7-_>e5mSb%EJX0hR z>0BkRNZb~@{&fqm$BKB&83;L@NFZm#)V2qg-;LPNQKYx6PrNtHep&sOhD*wD{fr5< z7};vgq-Gq*J^(cjhN1?23b4e#<2FlpIrg+AD%$|5mVcs!%*IVMh0+;ag!@&}LUk*3 zTd%BFDZ^La6J4KX2juCEPW)3o^PHYegUUS?ws^H|XEfk-KW7kJ)Da)p_I*9e&6biA zg(v!OkedXhOOqCm5xi#? zH9v{6m_zFo%za|icYx6LZh#4ca1Fq$r+<_~`4Mo_S(!@VFDRljN9d$>T_S33Q@ zA9W8|4a|X}yYCqKy#cyY;2q+#X>%JxVwHCECjdlaIs|rE@QMS=AX1%?C^9a{F;9}O zF_UD(e#jMdfHt&TIQ0&5xcxBdq$8*ycdUm}z>7d%s=)r|uPWCff-9!ueeOe-H3P5% zU6)fjn~71gB!oq*8D6~i0J!8bgKkzj*~ZRERON)1`#PcO54i3bqYEyS8@RINLlmJC zmnC-2p9v-)d{*Xjdu{!GbS%%iHWup_l$Ni=?c7bWOi`b;^Wf<uc#k&Zxn3g*QAs1rGsM)^`aZ$lGeGfhj34%bmPn!5nKZVg)wu>umfE86|BT6u0j zU-A(gyH+Ij0FaLIR`6FgPIA4VbDqGMU|Fc8eCWjFOJZVdGB*6zZx?4T#CQMO(Zwou zzYV<7fzg-_AeQHF%&);(sa2cT`rj1w=_Pao;S6$I^wj=61nPiR$Oz09-Fk0elX5~4 zXXB*?BD4Q_X?L<8H4V;?oXwm#9OM01N9WjJcX0JF7gu@KX;GIn4c#s5@R?PDNyo7% zE|Y&gv+MDw$0pJ!rj`vQ7adGi|8H|S)Ml*`k$8|IY{`64IiP{(+@Zg<&A;PYBre>6 zS6%V;X3^h%x13TK>-Pr*`o8VX-b9SY6AVY`)Qa8jyD50>t$5F#g^j3xyEq@$Ziu;L zBr<`UbMoz|c5IRXI1I!%jEV2VLuI!Yu61;6o2@EZ3oYs;4zJvgNGEZ0?m~`+MM3K) z?}IXV`zm2j_Tbdhelp`7y8G8}&jF<$$Jn+_+k029Coh#9nH7;)ZWy&nElKr-=xMJ8 z)zS}Lb8P*lY$Bm{E6?AEUFEW7It4T=JDk(a2Zb8;q-(6b8E`TYgjKn3>U3qj+e40= zAMf&NPdL|yf%bru!l?7;wQt3;D%I~!RkTCQso}?YTvyRmEZ)seDJ8BCybb|twvYINDd#Z@6HA5^u(U#L~m|e>+O@jox z0xie-x61B1@%pbp1LamrmE%>-a!Ybg7`HQOHeJ*&Li1)f(7iO~YRsi>Np#)2&8+I+ z?K$e{cL5uoST{2}K450H)MhSRzr>_M7HS^UYqt=yE{`)gYw~i0S}4d88sIyO+foQ= z+BcUY=u3y_K0}&-VsaOx$E0UPooq>-(y_e0GcFYf@?TK*q20lE3Rs#1$jYPeNxMZb zP-WRng~Q32QO#2tKK4m$Af75q)lKk*qR8sYiQI^2ZhZNm*6uR0%bM;}R4GPjPjANT zF!te_RkHhf$tO3FO*C>-j%Aam=L0z{U_6bz-!%T>%v?ay@$#!~&F4LL&_PNz>^mEw zb;#0Z?VcmERO)fuoe-#7R+_sO{^;)KUT6D)tLG#ST-gpDT{?KR*kIm!Y&?*jHJo`c z1=@XZx46V6_z?wyoSWB*ryWpwHL z)Jy%)Yfe027#zkCZ)3hCe$_#Ay4F>ON@ef5&+je1@u}qbvEN~oB?5Df2nMaXJjsWy z@0}s`tm-BurFj{ghJvyy^XpUS(;JLVV@C~0nnnO|TD}3pn!8uLBY2S$pJr?a1w)g~ zzyYfW7l<`*%A}%V6^&R!%5FaES(~yK%$&t3u*IJdI*>jfd=&HpHat(~vog&9ycFHM zXE8xO#W&a9xiN=Jl==YG68tBVr?OJOb)?fQu}`Vo%o%^5qhj8U!;P9c+!!7|l0202 z(aEj@WB1`jL3xTJ;=7nL&%E+6HzUYykualn)YT}4F%xR*LhAebRU!kUY-C8cTA}R{ z%L3Xmru(u!bQA^9@lmd$Nl?lTYiEJDd0-Al*kOcax}VC#$#7X&rLvBW)QEW6x8fI1 z<9i}#Ni{|_wk6om?#jKE#x`TmQ|tm=DjfmRmM=~>=jU9%#-h3k+x zj>$@mLA2$*auO29t`7u|(S(WWdKu+%)3bn!4h|X0foy*Z&;MC0*#sLKn`Cuudo$1M zi0RW%rBOX_1|48y*zVdx+d7RlcCnETr7TjW(WOIq_j0%fz>fD*`4gDV(S+?)!yRM( zPGuG8+Xo>wE4wM#F2FLcwdHG|J6g17ey1kE$zW!!dS0LAW5Fi3AZDsG_uLUejj8l8 za4)o2Hq3jX80yv0@x{DgTx?8MCs1zuAa;z*4DgPU9+KXE*4__SGlmEa+&#gsZhBsQ zGlS6U|FP{J_t$SgUKiDKAfoW#<9`~UF9yc2)03vnplv6H@Qf2u$$C{6(G zCH*&mBf@!LVi6^H) z%f%=C+9(-#7fJomtP+P`1V92jW;LIBm1OdAX)7YhNVs!O^15@!DAl?>wK($M zrSk*?)*QQv>KnN?BmA_*U4dz*Wrx5YBg%$)Nvw>hmq#{OTfDUNZuQecN#WybS)&&O zw04Qg2Rt8^Y*>zq+AqGeZpf$pVDrDp0v9dJ$5w5E9E3gsV5ay|QFPC|G{v?JX;q>9 z6^fq@)l{UBvA0{Ierl#l&Tm@^hCtG1ridTJ6H9kBy4k*@_`8V7Oa*HE+9Eupa`33@ zrcK1uWvuT=kF|)?o8HI6^Mj489oJUo9<@C>d3jM2>ymXc^-?X%q%_Ei)erA4aA$|=b`%lGGu7Vz&1C)Y)ei(H)7`MJ6IuS*IG z2}>%<$SCS)=~!EbL;nBX;BPy?N>7KN1!y1w0F)I%!wUJ^3CRB&B8&zc<^S6tP#PHR z89I6f2q*!R=ARhoI^h~fMfB}Hf0svGu z1Aq(0K<$K#0YHdV0D!f@p?3NJ>?QPxCM@OlhkJJX`noYMMA#uxZ1ey-z(@~jL<}wh z5rhM*(y%Ci;e`kQV+SC*$v_%IRI&&hVl68IKrW2x(r19@*Z=?y0Q8JNQVc*_kirj2 zk(A89k_-U4F)aTM7^AeGn;74N(6VVgOnHCr(?dW&Lj=ky1qUtw0(Sb)C%U>XGytd& z_+vzp20eJMhn;Veq6*nB2)gvXT5@s;mh69CKg1`mn6T1wCC_s+^ zU=z@Q>Dh}gL7r&nvC$_pywtt=P*7K2H>$m#L5iK7kshE=W;OmK1;F4J==Is9`4Pzs z?*KhOtKfeX3WG4PiU=}(Dg6mR1za>Nv_3$M+3Ax&-N6cC3N#v^5CIK#@Ly~U0E-?B z0f8X^A@G^3{7}J40Tv6b0+_C*RuZ5AW1~l8K<%LHjDXL>eIOtR7XtfrW$ZssKAZOsh>00Wd*7YFw3qwrep$q@V!e9<1{%2y_NO z;C87iL<4%glnqn|a1Q`P^cYzAFEG-l!IJo4ZTfm_fG)uHl?8fR@B>5x0VHd{p!R~G zysUyyfH4LT(9<`gy%8mNTT9zm3jvys=2fXeSLjRF=M=4%;9P?ZVk!$1fDm9{06VZY z!59E?yIqTcK?H!)CjsCC1dZR`L%?WZpbT$Q5cGhE23t&_AOZkx3mK=}egZAjpx3kG zPXVHmfQR~51>mr@e{z6Y(nSFJuucYkW5zF^X#x6}s2Bj2#1MnHD)mJRgh`49IPw%N z1o&LG0s!E@E+8nN0U!WI;3^2H8xN$RpV%~@Fyl0>w~YE4#`GDWaj*ld{4p#U7BNv; zZ_`AK0hoYYhJalGkO6R*7&8K_2F8d21RMZw$w<$3TQ`Fp(1l3z13>a^D1z;6%1an+ z0ipoL#&4W~(1!>JL8LWc`T+26aIe{t06;4pDxjsSDF|T$uZf9u`ezMMZ}qjlgP<;T zH3mUt52{rc0E}7z>j&3Y6-uZsW; zB7@~I0AWdjK#k#0Cvb?gGN2Iw8A$*Xp$9~@7c+hS(w z;7dy@dXMw`mSr;`Bs6gw=3BGZf*qugisWqUU0c3WHu5-?X6E!u|CsrQ)yWU(tKg7J zZ-58a0b0S^w}A{eXkGv23RD<`;XXqw00s3aa2pQOMSN_732F*5(nHt;?10k$kvBzC zke%hd7Q&bzN>{5b3DAe?Cb4O~0|YzM00b;4>jp}=t8tjJ&l8WY3&IupH@2{P<{6^o zx%(`=3ESxcc5E8#G|7i%Kd7T#hnDZ>CA|(JeX}x_gZTl$sPumzXOL=cwD8=Dh>pej zR=I5K?{p)*CZCNvdwbMLGH#QVIjidpUALaqb#BjUCcjD^TkFcxF&gj*+SVw0&S2bTM_8ja?gHuN7N;l@*`9R-HGX^J+TkguLdl)Xn!ymN!29^w>>z9W(@`ffom+2|1N3TsJVlioi3}9U5P}*Du|dw-G#&D)OAc=;pQetk*Uu7|^UJd#jc@h`#aXGOr^v=uN_dLoy?qyYnKCjnLYbiWi{^#c+ zJA_C%WbG@&eqME43r*$E(h`E=_js*Rc6tbq0q#_=wn7$hfS(@LugeH9x_$zU3L>B> zD5!<_2RkSN&YuMXF6e7TJrfU>UklSy45DQf52wkItPI5#)T24!EUoqgI5m zfWS{-mNtrqCQ()+^VMY=yMgAUGWBaQ=6&4#GGZD4-8Dk$YY>y9#5?=ZL($faf?B#U zno1|p_jey}hn(NkaCn3^CHgoXnwy=!{g@h03_$Ev0JYu@@L2)UNajm>^ zXkBLWCf2*4_3N@Cw@b^fV6>YCIp75l11=5*H_>>yBvjHC+y3qM3dFo^*HZZZrn_@TEEuqZ%?QBW(X&bKJ|@K8C%yCS;wc>OQH zZW-vQifviQp7veMyWU&x8RQdww|1W0#gV9(GPiihZD6Swo(C_jIXFDt89rkS05p!< zOl{5Bt=vS^Ft5=x6hXfgUE0L7d(5ld*I1o#$Z1(OwCR4X@dz#da5SHDWHV%Ue!Rh& zucms;O5I?5e+Da^Cmi4P)4$bWs&L%rR8nFC=^tL5ztdvGh|IOywso|?9duV`%_IMF z4?aIKwzfK`;L923sLbSu`f1T~b0?JI!Ckr(%PH3WbL%evTF2ChP6u^!!CGDbO3!fN zfci7f_pn8tsmQ-mRlZ_1ytX8=E@t~))|Wr(#af*oG+=P}OJi^i1>hg}1=((EumefJ zMGg8CcE*egSFbVvYLTICB=iUW0MB8wf*q^6)aNrcmwkBek6t#NnmC@r1v#RAjT+9_ zJzd{vPQ)%grtsn@Hq7=vn=L5irU#p^)(xBIiuzb*Rb(O(Xt-M~svpJI)IBC11>4`o z#C%(_GD1ENKK|-MyYx$WN?qZGU+Aq1OOs73u>%LZT-ppaMiZI+4M9SIC zh)GOY0${%6@1WHWxz%Y1XsTTNy%htp>5Or1PmVjsaOH1pZlnZlnw<$6jR z@2Km1tw!{nxVpj7#MER@(dkvW#y{I$e!(TbP96H9u!CNLx9t*h_;e#8PDmCVt8j zPGyI|fo}{fi~xPcR|vl@gdc`rh%pA(U{KJ5pv_=mmOTg@Zh5k6^FnrdqrMjIqU7$fdDZBLtGyNBMW6{2I)O_q;>;H%oqbfsE`%T73?6(oDkX~G`Hf_3pPum2X zNp-Fm?HPTt_=Mo6!t{QVr!mNoPw!h{0Rb63zJ;8f+pFDrZH6>nwvn5EU3*=gZo7iHln7xYt7_$YC@ z|K@sbbl#0VK7DVA_#R|vE7_7#J$`A|XX@Cdvx)H5!NKv(-Wlx8>ZA~P)aLWPW~z$8 zclV8!FT-xVa>p1vpL%aedftPnH(4-PP~ud?<)b_}p+YgAe)~MebmGK*^6=J?C-b>O z!8RycErg#z1JI6%(!Fg5S}+@60q}z!>~~l%BZCy=w!8@fAvm2#hvKr;dJBb` zF&~NfVX{sQ+08h3)nvV%Y2^8*6%voTl{1!I)`CqX+QbWpi* z>?;|iI#}<;mHVY*{AquEv1dT)_0eO|?9FvAzWagj`1;|HnIAKU%7fuwMsWHS)>~@c z(g5n+h7IfFvp=*CP1pVc%D4K{92b`E2FR}6RqS$a`Z~T4&_dP`{v>WS>M^X3CdM~z z*l|Al;G~`PG_&|#S@Dwcv#gY%i1B`66KB%OB2_}BS9z**@xTZBv3@B&{9Ncy?$29h z;URp1TT`1=M)6B$WZCI~i^uWg*7M=5%wI!_yEg8S>+7EVk<{}yYx%W_+5(`0UvFrz zA)rEb8bHhiR(_~9z;+t}qzEDy5EqTB?3C&{^7T$V4!w-DWleUQ1MWsh_%-g7icLFt zubad#gi_A=`<}nvQe=J>|vbssQbX@cxp72=0v~0L%-uyT_ z(H_H|xaNJ?zmE=QW|vsh4q? z=?&2=d#xF$>mJCeE z;C0(B$%{ygCyJpwI-5g_N|v#Mi67O%Cw^s6PY2j^Gg2T7kHKgSVy7p z2SElagb1enfFgvh3bh~Lx1&k&1^$mOnJ$Mv3cw|LRrWpblCgdIbYcd6h9jV7f-Emu zjvL&LNHF5rsbyAN@bM|@Y3TjEdMl^TsLYvW$g2_aYSP);rs+4;+0W?!tJA9UA;j#h zNiTu)lw8|D8C`HPpTSS8wN&k5wK3IXmB41LPb~WSyhhZG%3}|T^;wFvc;Kb$Gmi4PK{L)@$bB_Fqbh+Qh=T^nqQ}4w)r7rH0y&2m2&@-?r30{n z6#Ar~)TxN@!vww**AmgOLv{1R*iZY3bd?*-=R*m_exwCgRo1bvJbCN8c(dLGnLmmW ziXnWXC!))DszvBmaTxBOb2^)2&UZy6>usYT`%mny5}Sy-5Rj-rOrIUIk_WNPnY5-4%w6Pv-C zwY`g09yz|EY3{N!*vM_Q4erB>IWvQO&O^MBi@EoIRmUe2F|SzY!O)ylN@Z?^`Nl~g zbHej=4ztfYoT?j3MvljH_5nhqlN>lqFec`z6!awmjGLog{PSe*3w#&U{lHF(r~=ZU z{|E!%d^1I4ah`fNp`D!Qdw_Ed;4|JOF*W`&ZyufYXeN)HST7%!WGda6voRp<%tQ`+ zn?|dsBBxJWCNfuRN~gRtMSf=w(tW1{fet?@tk3M)3&Ni5gSFAo6Ul*ZM>*_X`3*A( zULO_Y%M@z=0?@T}&bs&o&*p72?bRjHo}~6}3A1epJFogUTu|$65GdPmB2`2C&ZBFIy`+Gh=9sbFaK)~03~A<2<*1JM-shJ0xj_D3PSs6# zA2FZquDRbUb1&X=O#Ns;T2pQ0!iG~>ZZtGHmSYg95D$nofl zhyc)guqZaI7yLk)0ipoTa_=Re&!FiDQXvSyuQjeEeP8%jW5VP{>xIz#RT*lcEs6O2 z2;39aBjo}E!p6&m7x&4FVQ!LF=DX^#@`PhgFV5aFYjlJ> z8!^Y1`w$aH9lTcS5{fQ8p-Ec{{|j&~TGm??6N9Z1nC}LAO{&?<2b>s;bJOIJN68PH z+`ejc0`CfOmv)$)cbx0CIlUIFDYBzZF;z3Ni&oY}9S3tXl@nsaoy4ss-cQ6(Z$dCn z3I6(bid9i|$+hrLQ!W$8SILi>HoYF>WE9isWQLFel=G}T&vE|W14B9xJDfL1Jh}sN zs|Uw}r)t6(Vmdo4=n|=&Ne~Vx2$U{5ylbBM+i(Aohuf#=Y6-`Lz38q0)hLy|dYHy- zEy3INni>!(2Y#rAAiyCl0&)z-hzEj#0(QD@lNjj*6Y|%YxMw17srC`Cs8)a2#-HCl z--lX16poylwHrm=pzt3(3S}yGJ@Qt6`nUXO=v#LpsBOtIX z=lt-g`AFO4rC6_`1?|4zZZk2T^R3^C1l}neQPV33$g^Fzv8|o0xHVw~0%;_u3HQ#Y z#$ny>$WrdYu&?2iO15cT*MR)7uz!)7ea*sDOgh0*#rXG0&4?cX)6xP^U3y&r zqX5M(7{O|i~ zxg_mz++9Pbi#8^5OR9aZoBd~;xWrbd-cmDVLt8mwa{e_5fv<&W7Mh|p8>VJaTb!=W zMYXavx&)O3_0J*sCEyRcLfy)g18owm^;Imtr3u^?xbM|zGrs_?c3hYz$kjYt?eYCUjiIA9Jo{UKRAH|8+ktSyadazX@8aq`{$5>ICE6JOuM6OI#)%kUw!Wc?x>4{Z&uk`cz z7q8sTHSBq=l@Hc^?MDpS>P8@lzxn)T5sedzyw%RPGO4@5TH)5kEq@(W8 z)9g#JFjkq3Rb&A}JT2dvjU86X|IdsV(Z4j%f|lgW?iqI?%WO8Jdy~_pt1935O@*uZ z#e zgf1b?ioOY__`G_Z1M;{a)yZ;?LubJ2qpfT+b7}DtwZA}FX{qux?xT`M1<67+lgjy- zJ98@6NWoU}Rma$s!F;I|`F0ohKXnPgGH>g`5MOTVBEDq+`uaddGCLqvpsxo@(u0)) zDF99UmKxu-xsRtoXM_C5=La_8N)^*8HbTAoy9rJ$*|l)*@*l&5_st1)Df+cdskS}x z-sM&^HZxuG(~-!X^}I)cyja5F-kRUhsfJ%y@$8>;CHs-8g%{9^8m~WuJP|0yQ(eqtgFyHqqe2 zQq%9NLINQ9-VS}KA*-$s@%DIa8&zm`lvgV`{w4HX&_z1tnswC7immOjq;dgNzsQZBTK5aSQneH+!PU^d<%D@!S3!{xTG$KNckDlT+8KHJD z@m)Xg@ZOJm{Pam2Pz5jCTxgK+h?2i*Wk*Eci*8ff`tik(Y^8&Uq-|2{$%`dbl6FX9 z5AWDvUNMe?vM&6ggOIb)5|}*7+B_77zon44RD0{tykn|}m33&@1v>g$`aU%m!R zp5vZ6nB*Gjm$%Y!skRl*J$GEQdU%xYeJt;7-NI2GKvAF*AL4;v!#RH)pE7gx_4Ln` zq=x2Wc?YO1-DRAO)r)%vxHrBL4Z8^_-1Xnbsi|FEz1W6y#Y=(i`jwS(3YiYk9Ct&m zMHa;QkU|qG1_@h7><`MSOHxCcxEgNW=qh#mI^ni!ZWWh($$Vzk?0jPYFZtE_w)22I zH@kaNiD=^1WuM(!l;;h{shl!{b(*SYo`ZD1E(=7%zvOju!$P9T3T7kGCxLy3J6t{B z0H12cO)+Gie)OD&Z_B4TN_TkT>?`-W7kGl7Ie96T{Wk2sQ_gSNn4T6<=&EXL# z&_yRNpg_NKoDB@iCIF59H248FC<9CvUhrB|k=($Z>ixuh9567p6ni$@y zKk6g4XIvLU5;G1;hOEvvsoNj@TzoAMF@rZ(ZvNuOq4T@t{ot zB&|Ihqb zR<<&lc^6kd^pczFrXuB4@k=~-k+wynG}2~v)9WfXIa!6#Ghd+$Al(7xEPxd>_aUh_ zukKf%uyr6^VEDzvoAW0^r37kd?MZk==4xXZGN?7apR#^JMLx2xp2>A4B<$Flt=GT# z6fM4#3u)Wz8#xVMJOu$5Ug z?CLXJmu{Y4DzbJi-!QDdkt)=bHI=2iTceu~`2KC{~IM>XJ`l5%6Fg>Rs&F>HM#X&FJNt{o zq^=3`i9Z)ZVN4xziM}$}*f9xdcJ203CJ0yaHLmUZsli3Vyw|riM>atIH|8buC7415 zb4W@weY{y)tzZ4DTbC1M56$W(CL2yzzXw?(D^=!4W_+v9&T@M3<>Lc&41EWgUzfBV zvZq(Mx{qfo2C^>IUz)wMTc(GD;1Oc7A0Q`Fd+mC~adSb@>Sh z38Aj8&h&Fy*6ak7vC^C{Nv9Ab~mKYV!o!@u;X0Tk+S=(?HZtd90sMcjQe ziF0c{C|kM}eX&`AV!XU(!#PGrdmIOd}O#3=&8vg` z6GLl)%uKd%&OHlZ$dT|!s@%Hd8!nyz^Vu3UgGo^bPLWobLtSV<>vM?Q*7&)t<54n{D@iQJp{)`hr-Ogoo z+FPb#pCmIsaedb|?u0#lFF?&8*JA!R<+&LRyWBv%6?4wy?(Sm49uJ(2vx1#K9BoJDqbG5{mFu!qLoMV8kZoefa27IWL~s)`wYW_wE31O8>Hr0VcNP54y48{EV&e zwQ;q(bKT=)kEfuUp_+|GZmR?_hr#+EA`o90Pb^^HPi>ppyB?)!+)BChpZLV zZQJ^4oN$p{jjgd3es`Z*RwgIdboYF7qE z2~G&BX4cM3=;@x)EH1Hsl~)=}$49Y}^QKr^rwtO1*|K(a@x3$IqX8%68EeJbKBEXX zCC-9?)m<;?KYaBy_OV5aIoU)-RacDLZw%{|&mc-cYChuv%k?i)cfC~n>#CKmZ3yR= zfksCDv*G!GWb=Ip8RE+f_Z5x)s8YRxl1}HnfZOPQW8*Wh$Yp?bVrH3zjj|zLh`j^A z)Z=|8I-B4`)Cu30UC#gf)>@8YEAd);IiWQZ4UV#w99^8T?;ivRG`V$^RSGrN)>ZW@ zeQt;!Ut1mF3iIH*DX}V_&WUa$)P*Eoe}-{xJ^Bl@=j{xqt2V7V;=_LJ;BjF~hGPku zc`8?8cSY#Jw&i9)j-4}Cc2?csNZI?Pu9*g`je#G4h@|{e8`REfYK2|Gx}YP+rzrQi zjYi|~xmr|LQ;u7_75N3pzWV2B>Q<|Z-$|?5a>DVdcxcdGz_z?dZ(stp_zzqyzVoLK zikZ)N%C(7y@zv1(-JC;h$h$1pIRv7)1%d?!k6S9Jl5Di~1%F?_*VqNLAi)`!VsCAKegXws_+9 zF*en`7yIJw4_$B@3+0l+Td6& zj~L7&jHED~;u8Q2>Hu2p>+Bqwuw)L6sH9|AQs#BqKpFo}{AG@16ApQg%EG^N_|mA; zsXnk~Pv`mcBV;4TKex4530JBd9j@bNY(BB+*Z0jK4jq>&j*^ON!tz@e{!~N-SFdfUWsJtAJ1Ne0j{v9QM--j=fZQ!-jr|#f2`(htctsW zjEl|K;dtsa%%wV*w}|nWkyVh5{nK2>?j^VE zx*sWO=~6b~jz@nqzCk>8h(wFSZK@;Qh)<)^`@78%P&?7W1F*P90`I!w(`|Fv`rYrS zHjNa9zRu6B@zz3vX6R0&DJ|kgv7z>>NKPZs^D}*+ez(n-j>%Cz3F`8xn=K}7w>BsV zn=6LI-@YIxniY!0HMQ^+o$&p#&h1{DS=g<-K!C@a zq>3=_<#1c6)s{eP%U=2F?EK35XjNC}{hlfpwS^E3G33BoSBH!yN`Q?g;QS}YIcde z5aC+cP>UZ;$G9ZMI}wa91jTYDpfo9iwpTFg#zziLcx?MxDU&ygsV*Eyxq&dPl((`? ze?D=$4Zxx4Wojb3)psGnQ33Uw<uAm^x=M1hYAt?# z`(&)o;LECYBPLe<^N}FMgOdk?mguCYv9>PXT)c*pf&TNo9tt9~($zvk@g(K~|Mch& z{`@ySI=X*DB1NxoGJkTQlExsiCjaRIfPluCd~8HHmGhIoa`t1x`@7ANnp9rJDjaV+ zZV=mz<(YN+FZOcdE3W(1?d4)Tv*ncrOcKsyblUpPMKhNlJGDiTKlTR~3EzzpR&qH%45R#Psn@w27GdUP6rylY?j)ggoN%Q&BASoKC;*>K(Wtbwt+{c=_` z$UjrGkF@lYIlk)(nF>PP3acb0K4(D%>;M36XCyzb8ZUWvWV#OQj+1MHC|z;oF1ax= zI0MS@*@4gv`{8P2qpV^RJDQ>(tVljxTY4TUZ(U0WH}dajj7-_&ohn&uihUEn+dQ4m z6!_x%(q5wD!QQCiv-v%*@vXdP{=uCupmt!jC(HS&KXpZ61oF(Ka7lUqzLULo>0-Dj zU*73AhEgFxei5)1ODXarM&>gZYZH%7nfoK6qdsbi zInW*REnh?7ufrc{Av3wcs}12Xqs_^L8HL4@qsc6X0r{+~@BexsrGm<&}{euYrJNT(Gi1O6+-D{$nw#IzOdMMA1fb{s!QEM)~;iS zPDv;_@kbvy7i%zIXYxd1H~j8!O;Dio&P<)a1o>;@dgv&xEhWP2{GR$2x-@LhJrTKB zXqS-`Ll2nQ1n|X1yow(SaV;7Tp$8)e_K*ScyZdVInQ@ViVR&slk)#ZEs0O1*b#Id; zox^&od}R8wuZou({Qd%A+cqZk4La7;&lb%dfjQ2BUu3h?G|>hU@&cn{(Y$Le28x$P zUs(5^tBuHa5l21f3M>(sSq@CLu5rxKk99WiZfW~{S@#000HB%RmEReZuW!0Or7C}u zIM%>?rvA_54MzbNc3DdyKqI5P!LyO6OrG&NJ*XV0g8~IrPEt8z{1xn+_|0|%s2G@W za7-2NX(QkCx=#|_L*;VSA3r~sI1b=mZ>SsbIS%mkH0s>&&qXVadJo)H+?ChemDk@= z$jx4tWH@S_-~Fk^`4uX7RSG!MN|Ho}xvlajgy&lUfN99UR9t6Q{yi+IwF2rIqm?Z3 zuw6Ha-h2H{yJAMLyu|D6 zGoLE4oV$5CW!09Z6koO-#Zgmf`+$inl+VPbXtW~b0Vd9ulbJoxit9^g>KC!j3!s?W z(b)%L?i=$P#BqPGXZ}K#85TaVyS-1KPZ$tcFB>Jt8MSVF{D+m^`a1jj1%%8?WB+=J z3Uy2VON%qZJ--(4ch|+AeQdz|6#CJ9vy)vkZ&S^slSFiP`Q_aZtfHU z9bWM?t43G!y~Ig>r?y}dn6rt=Qos$^${gp>M!On%#7$?+zW{*ER);KPSZtR^gdYC9 zQTpyDix7mL1|7;&fl;-wT|5kHbw8NZ$uF5G`yA@^)?&E1Z`c}{uF|1y&{tWX(GWt! zIJ;Hcx@0jT%=cq_yh1xC*Tw(+8?)Fz?tWZlhNJHwq$hsh#M9ez>B8OEFUo&`f-Se# z2ms)0fERgiiFc=F-*2mbLoiBs`-*DJsb_V_E;P%qxko%wO zZxH%VEEmr9M4-G|6+`G2F(S5=B<}6|@fwU&Y}$$cBD3RiF($j@2Wwvo5^~nnRl_+sO9C$)MOrV{nxU+v{hDI$`Ke11{78w|d(N#ku{Q*Cq@?q7BGaPT3Y;!)caK{Sc*uCq9>{LuR=f{i8 zd#>_z4W%;%vOwQj6TeyRmOFoXJoEb1{Ya&i4}>Z5n^!cc&)Ax{8&|t(l@_;bl(T%B zEC!|I4&R-NJWt8v_t(B0l&JyGNV=eLaq$Uir#2QNGsux8Sy>`cT8y~B?&`wNZu*~g zFYIxH=D&J=P<#bVUvF%Qe$&#<})t_sPRF^bG#}roM@kHo9EIzt-NMZch$^%Od(O_8Tp*ko;HXanK~tp zZyv!VXDDAn$T3?pj;f*3qhH*yFOSXCofkJO4(L{RcwC7*8wL;% zw9QUCof7K*7F!hb%e$n1#c>8QZNcWjcq3n~>4-oj*>pKVYZsXP^Rf@duapiyrkXG z!z}%?j}1Ax!8$c)Rk8-;>jYRE>eWEv!)5w+x8#V*2W+CQyt`3nSN_IOQN}>qZ}zKY z%;cra%U3Mi`muFS{{yuGFbJHQ4ns%#_`&0|6s}?M6Z46%2;YZToarNC9!Azco{_`E zJ4%9I^O|#c>rEo}s|w2M%*>RR%2!;&J|D-VbE5N}QD(J*%3r`YfHPe&qV5W*MRrf( zpX}I~n#%HnZ@|z8{bTpUJOW;uO8J992M86-ujANK8}rbM8k(XzBwHZtnoOJ<)ucN6QuMeiLu$s? zZk`{UHz$sL8`Q?y#%I5HRKU5qcqW!l^g@}yKzoyZ>|OtgzW^^%_<^)ty`>{DE8S2E z6rjgY#y9yKuOyt?u_yYn^|#B})OU*J3ki=Dib9J7?A%4a58_+dcEu@`tw!=hbJB47 z(KWQEoJfUt4aczeCuMTNO9^8z>*phr(BK)7cQ>(hPqk-kH!Gh5ETGA6;P#x_cDC4) zi_g!q4m13-?`BcMHjbpbYPL-)FKB0te zBc#P;nNMgTuN%8HxS$%_E_bSIYvmY}YLGTapk6jWx1I)uUufU&lhN#B5B@Z{Y8KkP z_txbjAW?#Pc-{J z{tLM8XHT&<{c#@i%1s`1P$1?Q)d?-Nl&nTfey0+QdKFOaD%WGrwC&K9)a0_i-b$z* z;kD~EAS-e>`+u3}TbU)TCiH)&c5uzivJG0*NE`X?J4_FeB#PJaiVFbfUtkQK(t2;R z(RnaPEw06vxkxgnb8h);E@3_LY~WqauY8K{w;ib&;nMi9-#ZWzk29(%_UZbqnfEf| zN7raN#~sOe%!|e5N0ybRK5NC+--mb)mqkH%ay)pjZ9=jgf~&GFNtQ$^nB2bka&vO_ z&#$!_A{E&ZVkG=}GQ^~!(XvK%jXagZSJ^NVShHW}=-+BPxMgM?n17dAZ>$Ig<=~9C zu64H-L^ zEF&wvR?a}nOgr(Tt$akTLqyn?rwfw%K6^fq$Hh$9%>RHLZ=(~B=N3Rv!pV^z&== zvk%jkK`3*g!)v&}YNEr?eo=L;)9`TKL^khS&TB*cgj+u0yg?2I{b7G5PgoByl!L^0 zX=RhLn`vNgYWqQAUg-U9K23I#R)CjGpI)Cs zk$f728{xXOXJqLcQ9DmPEc%QwDi6-#x|Z4ju3gzhJM%CRZ`u zl-e@X#)p-h{mqNt^!k<%LssiwA*+2j9^LTV=-%d2UyGE;vVC~KK3VqLMz$wtEGVvM zIQKg)?Bq3h$~yDed|o|u!ybze3(*;v638mpbv6oQHgX6tO4%$nSrx{4Zq2<(0*7nKIv^O8s7trx^GQ8%5TR3F_Z038IUP=WK7c+y?|X>U zlM6+?ITL~afE&B$gwwb%Gsm!Cst9{VxhW9#G4)}SRzzC=A1CKg6loi<2rxQLfxpv z?nJfyxIHFr!2xd5k0V!{PcUW?5%`9Y9=|rza=Uog$-(~ zQazGeGnzL;t*y&yxj*p?hnKj*m945BxRF(RA*(4i>oMMbrp94BPg#qy6M8LqH1V$Z zVA+k*ZQ(n=J&>uZzWyb}8wW3Vv(P^-MWa#sldr~`g-7?wxUN~I+1Q)kTqn#(hoXx% zMbrK$g50l>qGFw~Z$kb1)eRA`sa2XvjBkI#*5VVAvE2YBCfe=Vl?I){uv~$pjZ->2 z0ubFbiW?f(*VF)L=PVD-0;M;#1S_?^k01X9aQp!8hpj&p&j#Se2I>{cHfSRv%!kMF zqui*qZ7kpOv%Kj!$rR-$BN75bqS`PM1@-OTb44u{%PEYah~2c=Yv)7PyONfbvwKM z9;)v<6J%^Wug1HMzC#Tfq%}OLB0MHFMXgYHxA7&0zUvS2{PHAKe)|E99#mfkuIQw1 zjj>D?4o;c$sFbuVYBUaYRL4cNl_5*)acwa%QJk)CE~%CJtLD)J?rD*v+x`X2L7Bv+ z@Y#=*`n%Hj^Se4)m~p@R%{9)3#Uh{=EbLo6u}XAakw07ubr+w(oq-43d@>X=HgId$ z`Urh)T5ARG-81aDXl8&(@|$X)`~QB`4-F^$US&i8>j{~A;68W+pP8~zpMxS`({L|cU0?w#O$2`+va-pSVtZr#So^i2TIPt8VX6m)DShkxr=?@&{Jg2o343y%r~_)M z+tCjnf8c@VNyKyKx{bLhrZu1YW+^iZpTE1F<)d(%ODk(J zQ*tvdHi-DbX)U)YXq-$P4=AaLcw%dWmfc5>hipxnd6s+hu9;o1s(Ws5(?t4ND~Iu8 z>pFAWs}W7dZ>HkTZgRzWxgT*FG;AgoWSfa^PlNA`mNtr3lSfv;P(Y?0I>1F8_u(7~g$mX98F>=TBODywh;F7AUUAF;#B}H%%1~_*^IZz?|=D zM9cBZsi?DrU#DJ&Tw6KoS}H{tOUyG`fU&I3I$t#?UvwdFhYD$BQSPfg>_`dovd8Zc zgvt8~e#C`|E=ikKbJeopTs-ec51t}R%CGG1?J`Fa>#PFQt$h3;$_7qjigLCbi{>*4 zTitp+s+x;@_6z;v%krrzxruyzHg~-E#Kl$>#Xlb$V4EElPBPZFFDF|GB-|;jKOCM= zySeLG{zqg0+f6wmDIR1p6T!J?U%jN1L!4Xn_A8d7Ev@Pt*QeSnV2Zge(dYf%@BjZsWbeJ_uy^Lh%sF#rej`+pe|lD# zkd&}rFtND#aUfSh@c2%BZi69~VyPRJWEAO&|766&c-9Am^Ft!#JblN*b|{u^U%#Ni ze5shj0&7$;7T*lYLrUQz#aOp{ZL`)Il#>>g>w1!1CgEP}W`;`#hM8$HIYsRoZRuiv01JokixZ5)#zL; z{-Z~X0X@RD>MAI(>K`4{RI_H!OYRV050+{aSMPNnZHh;Avvu~$H)K}W!WrrH?ILBT((TBqbs`&-S3;~=D8?cu(dJrWQEs`CA}{7 z=*4V%HmfbyE7<}jaG=OytgE#lz?*}QE&biBlf{bg;v~|@G|y9bg$sTtD&|Q_2l)=V zYw1E6==M6^MIzr#bzpN5FYLqW9^Cgsq$5OR>HbIAemh2ISr+{ z%iS;gDWk~DX(JnWdW3sqb%9oJ#Y2>I)aGxHiksS)Hp(Li((s*3m1u>F458IdUDBVh zP+B!f7PJ0JcWy7GN9CJDlI=K%AVBb5=fsa%GlPPj+sV%CtrlB?ERHB;-3*ij z^YKoX{iR1+=j1>41%zv;@^vO7Xg}=c>6`f#hGv~g`$O3d!qI1Z_NZasWHgBeVfpWR&H5Q+-lTK~l@t4`~ z$ieEGtoN@M}C7yQfTB< zgUQs;Vd(M$DnT{pS(B-Nu($>-;KFrXEk;}ssq>E}ms@6M4lRun9jCq%Bs~+c3_re4 zDn>Tf#@abv zd{^1~V^2QGx5=Y0Lo3TpbmJQB<-^Fp{b1|Bdv39v`W<`YGxv2|)l2Q$V=2-c^eH_~ zw=^gZt<)jyd~_1^TU#pR``kqT$O!x*N*UYJs^Do@6xb@M6Cc}HF8*wP$>7l*5HbnG z%Gg+pS{>O}sasa-R@=e$!n)?ID^b?6)Cxx8dLuIu9N5?tthWe*(ctM9(4qGm^fn#K zj)=kRooW|FWSS$gj(*+WAvDhA>Gyt-!Ub+6GGf6ZSlUZaLb}@OZxG?;cImNg!X49U z??e2oy|dF`_}=JSh;QZ0DB!&Zp;_8e`DUC$A6joAob# z(e}Rhj&)clw)j;ag+v)~7f@5$-P|W;_m_G617ZW+dO8|A_Bv+Xc6^P>YVRgwVA8th zDY0qGahj-XtPxU^RbJGn=NWeLt(-QA8W@V=3qDl@GOojnaw4x5)4&gCf9%^9+BJ+0 zkNCxDbQ}}?a2*hsw?D7Fx|pDFJ8K6Z7aoe(S*xX_=eT3%nmXjKT2BJN=cFl7JYr%2L69+{!1I@v5c#74f7ABi8Ko4Rbi4aV zmsfWOmNM$Xdgzya>C~IK9}5o$LZ{le>Ep8cCS2`w^MJM zgaqjvm{8ApvgTK#tqyI3jH2@ff|29)lv;gHW7&e)bu`2HU5lquxKSZJj%6|H(geP> zRifVOLY)KI)BBqVhJ|h#@WeeW7*^`n#rs3=)h5Q>dgm`ZgA+#d?j4yga13+7R0)OMWg^e`GiY?FsXAH%doN^oSNG6Z32&-v=RJHSUNS z0RLkioZ$!rx{;K~;}Ek+fvT@mBPm>frF!-Cur1F;DttwC{X*<4tTpAdWB-=bCe$VH zoxXQX(bt8>z~$A*v%8H4`0U?NM$!34>2>KjVX+c5fUh4(_x!Z8yD@iPe~+~nh>E}p zeUT{l8*LF}ZWhfv@sk95KZL&jnmeCqZU0u3g7G5zvtTE?Fl;pl+ zl#ep9*NJ=e^8ifLw-6*OIKb$8fM$E`Albkc0N=NUfHT!E+h@H zlh7`2^JG1Glp@LGlB)5f>*t&{mWc4avC_3*ow45_;S-_zOK;+S@Nrj(1Pe(`rSC9| z+s8Y@k4I=Gf~thU{)vlkCl_a9?I_Ca>Y+XU#P;)TdNp>`ViRN-aW3(Zr4uJ|HKZQ8 zls!5mwKyJLsVe?)I++}uqBwiL77zwo^SM?h?43X(#5laeFYsEieo!2IAa#iByAJ%n z1{{+=Oq7H)?$cs#B>BKUlszf-%HF=_`Q)|F8%tu!MwlLR?n|F<3dx1 zZR1c~UR7fw4NckXkx=dF55VemS|n);#^u1YQ`fecH?q1swm2MxF5L1A6**5_XevRI z_0S18+~MiBPb@k)I8OVv4bP@o($2Ov;)TUyd3nls(&glWIkr5L5Ly)zW?niYaO%oV z;h(=jFBVn&)*5IF8V&cjzS4QTm`-^b2W{&q*GtbU zyXzB=J#EcTMO%?qp+Sccv-ypZb2o%R*EQ5$k>a5W+%R>55|G2o)RCgZl{r}RCedk% zvVCDp(AyqcZ>@~TxEE4~o(QupwEE~~C)d4hoV8*tH^s5W7juqWU%X;ZC>s|Xwdy^B zCcT{|oY1~~GkeoI?M>7>8FT^{FSydS4mr;z*&5SU+o`T5)%yFxh{?X;6x(vvRI zohM|#!_9KzMd7)RM8lSZg1fh-exFmPA*MSm?asX<^gyHsGDV_d&pAbKfvmywTVK~m zZ<8Uf*j)@%t5odyv=?!=@XoE(2MP`NtKgp4QPD8*3EJ?P6VsX_&$-9UM~Lp5M;<3) z?%$X8Ft@ehIkeI%Q@oq2f2hMN%kQ6R9B7q~tQQICsOE#801m&((>eD3i^K&?%ZyDYu{IeGVqho!L$zlwYxfGG?cjI)!KQs^YrBPy3m)4yLsz+ zjXLXB_h&|!lJnQV;NSZLii=cT8qjiM9jYsO5fbmcEwUvW>)lo`ZLoI^Qo~b@c^a zn3TE5Tl*9)0B8(|8)B6tit1$UuJq##w$%9)sgYb%PSW1v473T}e^9fT9=KIVHbzMZ zX}hti7#-@7x+eKad|+j^KHZD1#3%A9xL6wZ4e9j+69CqWQC>=Ggc}A&Q&mhd=v*4VU0Ra8n)jDO(Mg+BAesb+(S!0f64fuh_36~)chOE4D*VS?O6G*D;^?!oAS;Y^N_2SZ>vMzL;N=1BK6=UtLPFwm{fmm@hh=ZgzX1|0+>OC>PLCM}4 z-$(L`N9ruAv%xU_Azc$oL8`nZ!QznzWK+F7RS6AcK_AJqeX(FYov)RG@)NS0W|n1- zIWnKg;MNreW(BZB{o_~tBiMB`wB4RDW*4p1L9ru%*({IS!^C|mVm4-y0x7{?Wp-QU z*-e>;zbWfVU$j_=Qqv$;v2((Aa*97=a`hhqzT+MM^o9fAw^iFu`}+Ke+`21h5*)8rlHM>_%Gr2951H z#|fZfu=)Z7vJ%SI?FsD*+I0k4Mv@EqpXAfwmKUfhSe4rIKn1Iw0Ra9zME-l26zmfrxrkQ)jEjmrQ%3-ts0Ug>VH3S{ZG#=23&K>%PA_g)WB3GxJ zrgmy-iN<8c_+xlZ?sUD&FAbt5qEZS@6cY^~Us%xWA(Fg_o=oV2oYk6Xx`f>b_WUtSa8kDIG%>P(eBHjSba*M|%rbgvj z@!k|BhYm&=Xjh@38^P~^s{{hwWFZ7e3u4lJfx&ieE-4Al2;8C9Ri(sH&rj7-YtAl1 zy6362#SyIVcEW|1ELgi4gbQTA|Fq4VyFFzxja*Irv{^qFRM-Rnq6n7+vQ1z4=7I=O%FSFJyyCl~!rGOxKXSZSs0ar_K+(BvkQyU6>a=sD^vY9GiVrD-Y zN&ZTj>90UQ2C+S~`e7v(XJtEAl3%cOg-Jfd2aqKF3-IKZ^kzTYW8@u+p=4N8$f4#m zqCT8z6ZZDKc>K2anH=!&DLszLO!&}z(?`{Q_UmKNRmg6D6tHmI$$O|jFgWwQWeR)x zWZ0hO(RY3XS~x}U2?q!y95xt6jbQ9K%k%PbN43#p1-lnZ928W?n%){0>(JLMo3Cvv zO{qcA+}SOMrW;t#x+n<`m-he<%NB&<= z=Ssw2YaV{1l-8%KkZ5RKt^4M5Z&NbwH z%!#QMIry@u-wZqFl2nMR+6eSjsu#s}1B~JT!3%$h2+JE>$Fp;vvRoj`l#>BC%9gd? zZ>?2nUs5<07DFWK4xp^^*};>?VqH%z_<|qq;Gash_$*%q9vK#MbjNhbNHc1)-U+`}!TRSM){{j^-+1gJz5o%q$c%vU$(g&Q?$>^Z?yxNB zG;B$VCPMOMWi>*QAmm1gTTDNTobx3$)FF8VT}XeOx~9&3Mkf(e#~c@aWZaAyqMgXS zzJTyEj!w9dgrELjA$a%L$b7E0S(fX1>uDN^lg)IRVj;?{H@c;+1j=v-3C|tterdh< zOr9Vjra#HqawEaMnFngnz2CsZ`B@PhK;G(2-B-Mj!_d?61s{`;YvQ z=+GXG+40^g%EJz7>igw}EWFJLfxLTpv1|Q1&l`7NXWfyI!U4c&eLy}eX#h|J#1TL| z0YbV#aY15Gn@h9qpjD5-Guo1qoP z2svJ;k8Hrfp4yeN9tI|{rr+%=sI8siCgZg$;V6LzY;VCc*#>u<0xDxV@6Xr;4i3SC z?%}PHZS!z;V4&rradD{Io_}NmB0fu4c=!I;Uz44u{oU|OKif}l*K2LM*8tsMGd;PO zQfE=rU9^NLoi2xo^W){^J+c{6io7S&K6Xs`cK6a?K2?s!t4#?nh7?4P2ZSGT$b1I* zzAgHA9Yhe9Nb+oK1|Ih-tM2h}SR!!wKPGi8o+Wd}Q73!KMvSR1gRVt+67S+Sd7!FO zQ!kOb)qI3w`e*$`y%XeRyAG|D+40wyMrb;z>d8O|_jxFikA+^SqA zhhWv?Zh~TBvv4+n5Y=o}JYVIBowmD0;9RiS5)t37xH-~QngGg4p>*nz4&o5>qj z7VZG=+%Ws-j1uRLlLE2>>9Iik&Pnlb3fH0Zu&pmJP`ZwHFV`10oZAOCrzj9`8Czt% zQhhwWS%KW!>(ED9ZqEsS%vqX7avvgRY1N2chX-j#jX`~ICeeF)lBEDX$iBCde&-== zF^{_a(Gc8`$mM5}*x7YKuu0s52RffcHj#3T;CyFvCvC=U2dAQNqdsnWJ-a-iy< zF5NOS*jjuE27!uv@V(tJoe~}UUPmM+%EnA3xCQ{M0_Y{fbuK4tfBP(y#Q5!_lj)LQtoOs#l&6K_#eFsGRcL#D! zbp@K2#>j$Ol-MVn*~T|9>5Tj@$dc)#U0`*Uz9bi_u#tbu9g4BUrjWJSlo2-PZ7{x!twOuLNAXX2RZPkjY z^)vMW-Zxg~GuBnQK}msa7hVq`0}u<@Jpd9&iHv~2hny5QAs4_aHDzWd31#oDiRHV? zX7x*dZpOEXh59Yw}kBrjaBcT#7(FfKs3iw zq=Ulm3k&ELrs!W^YjRPwDCZxuy!DW}W*j2Wr{T;Ok}?7->tq9b+B~K+)8+7jp0;kB z*r1X&4uC%p4wI4`J2@)iA_0#c*!@FCy12Q0-GS1V3 zvqUJ8`YFuUMTQf`8D zp=RS8fmbAewW}@fBi9-Lcma+4ZYm|E0)@czcBp32{ctxE;a|}`l?}FF-YpZO9z@s* zrXZWvYP?1p_aZ>BE;*$F7|)Y(vyfbw)Bj6^>6KZRVw7Orsl}8$Tb&-lXM~><-$R55 zT|_z2571cK;0B?+^UHp}o--dD5b>*LO84-Hq&~FVWJ$<<`4aS{oxY_n!}w&mVr2Rl zfSR2|f)#B+L+9D?i;hEYX@nm z@+Ij{&KoPn21FKtEy^m%?UNKX2RcfFP1GP|rtJA=VtT#SvxRxg#rUjb)dk(nWtU+6 zvL0L?+zaiKm3lxUOaEVCfGr&7p~vBgzA*;yD6McOYiOeJU?FRS#qs^+sthgfhgIUs zgYdBN?W5*B@Hq%KoCoI(2g@Vww0nQ=i>lf^5Jm~@+3GbC&{a{dxr1Jxo!2cjW$u^E zZUvjP@8-r9)X*6np|?bA)Y@~F-XUZ24&GHR+UIMzQLV+L=MA*glG!?;ARR^1oS1i; z#(f=$1pN6q*$g$6lwgXYRkU7Dxg~Wp%|gwZFzdig|C0ppe)Nrg3EPc1GLp4o9SGtWPNVTw*q5qVckI*ZV&9-?(%?Sn7X>LCVbMemYf4p%|t6ArCfaCT<9-EjkZ}k;T*t))Ny)VM`hcR8NTgMiox`*} zE6|HpJYKDu7!4p;(IBUFYACdy{o7K#{3pLV5Y7Q#}wiQl(s`Jz0@kT!D7~b9en?J^viA%;-AsY*XU;}A;B!w)^WLZ)oZ%vgA z3@{})_A{|oON(FrOB{Ai0I&Y~j|j_ZY3Brbz|i2pg-vF9YVVtwu_U%x@t;I&6=ACO zv1Z@u!!fpkTbUkOPoI$9BfAN_^|&~oD`9Yfw}b+Qg!KYF4-OorlX0UB}fl zn`ja)Z}++~*gxSW$~MaQ#4_1_UYp_x}<^iRnWZ z;m>p_sjFi-wbd}CuTwg)3-&-HypUz z`kVaRdCROcz{+P~R!W{W$J#I>SV2G=^{r&n7Pf50Th)Q-Jx((gGvd%PJ**XW zw(W_B*RQ+K>^A|s#~3~Xz%(M8yl|3IuSd=+~P8L{Jt2?o9X0J zU@Bs&wEYC*N@}$a2`#EEdXYkQ8A5k{HrODUClh7R?Ttp0O@=;KY+uI+M1f&{1i1RG zMBqar16)TbB?1{AFsui>#I+b*U(eBktU2m&$BMW2O)c=$`=vTfFfFcP zH)Wb}0b?jd%y0$##}h>$l`Od8Tt^+Tk0xJF*xm)ZwIHqBBa7X%Zg09b+I~OLB3s(6 zq5zvrWi#coR-AT*q;$*%q4tm#mkJgKx%F>`_%%NEm?V%Yu#-WA0&R2(;_?*OD|I3% z(iyoZ>6^m5AAV0u`-f|ys%Rjw;xCZ^&H+$f{1ado*D#%r!&K4!h?uk6`1OyhcpH-i z6L2d-O~>ZJ?!MOOOjtfbrTuJ@MtPnBMED4V1K_F4695BZkd!nV0Tm|}-!AOVPnxe| zDPQvkJX9jq5X#A6?)}?>(1gM}otQ9{Bhj<4?~*Sr?L1b&+XHHe$22zIO$)5%vW7lF zF`5Rb{>}pP26@BTX*P{P@QAeYa$vWuULNOgLEgr^Car8m$JLS;Kt=C0{u%H7*#n*& zA7D#POIg(g{JE1O?+KEVOkX2^yfDkl8NhP&Or@Dotm>Os?M1Q~zm`1n6h1-wy2*gGfHIU8J zam}PxW~h{neS0tUhiNXI8rXk%2T7R)*f_h>qsC$I8Y2yNB@@iEqdKL!T}wWTiC(1n z__*n+MSiR$;&o|ELrk#=*tu1uG#0VJ#e51|JegSv4@fj%??9soc&F&mIF zr77SoELDlD7Kt{ciHmBb9_clGzId&e>P^XKMy&*Oi7ly9L5g`dy7`Tqi-x57IoF{s z2M$ig-xl;Y*IHGE2eT!*nbcX9Y1e8v1-UP`P0V(InJL$lEUT~2cz#Tuo&NT&GLc4C zD(#O*q`1p=kx1cj_>h6?!&5|En`_C`9#s8QcCw=w zhn%@-2=2c$uNxJ0}Z@p+;l^qC^>*>77iS4 zW>WfRM)Fmz-mp%@B3i<-^!)u=)6-3x#vs>&NwhgisdWKK04!8^pBywUp1>F>*(WbO z-Fa`plj}d0hd5`pw0Bn+&6MR!`6yh+#ATR;XHvtarR&?rgJ^$EuUV;s#*8e@M zN-99?HM>x_l3^DLE4XmBd2oDee>mXaM&}sdam=jr8Su?0Jpny_L_!KwN5Eyd2TB92 ztMFk}Kv-J;V9P8CzW|Aiy%$4(d$#zl;FeEH%J!Yit%_gMN65>GgW3vIe_+9EnNI6K zxh_V>H5wwvIRqH%{~{*(e|JcC=r|Gi182Gtt`{WxtFY?6=c9Em|Fq(T>q%=E*e?hB zNm~2Ie{!2ju|GQ{9E$6Fos zW#!yeM6)Tr2VoiY#kG(2>uY^L6xRvpac;)37)t$9?uD5IRE{V-adpjGzAu3}&}7R_ zn)fXKaTotoRm6(WY1QzZmsiv6+0OhKF9%`!1vTgo?!Ds40>b>j&IZUL$^XOLe|GTm zJX#OcmW0pVFMAGZMV+q$e)D^$$B=95Pv890i7>YyA-|xcJM*iB^2^T3PY9aOY)dZF z)39!@!u`t`i5CezIJh5yDiB{-fZ8!Y^&S9PhzzIza?X5IPb-kNECw4B(aNY_-d0Im z##+!q&_ASD{egAl-qvQJJ=?S5K5H}FLn~{oV51?8z*30jMj{r&!|>NpO|oeLrbEEN^Xc8$Wt^=#_TW4gvrb6h~o{TT(?9KZFFWby~$6 zWvjV2>E5_vCL4`V-K>kXgLv|9UgF#fC%N}e0Sg9}dvOFHgY%hqkN zwcRAMmZY{_fBt(E;Mxe$2}FD!+*whTq?`mDRHwTZTV}6D9X^(?mB{Rs*w--I^OyFUj3mGppo7hfp7`vN%=>C7O%hDAb^sOYhg~Sz5{y8{@l$KYjjf0fA@+w(fGeM|L4cTbFAiLHIs3LRn%1 zTXP~bS^xCH;bGDs(cqWYQ)6-N=+j(f*2_l zz1!9pEK=Bv_l^$Flka49?Ly@to!j`IZb~D}s<_DUVz70+`*PqOINKbd)k?d1pgfP? z?hGQmhX>S&@_hr+xT@s!1n_k3vEl-=tk}Mz=-TX((HkRctFfMt<%`j{ zxFu0^%#}E~sJ?1ZYmv~+5UriHd|k7J{$Gynm>=H#aapyG#td949InP)cKXmgZ~M3P z>Ya2dc5piLOcN7YYvV}s!I@7fIjWBE%wBD+T?DuR2*9v1z#EgAzIb?2eHb)=(DiS2 zet%W|jUE8cCRft{o@h0VCk(UzJfu%!=le>`w%PZF7vJ8iZN8@Uy!UI{>+~*o+vf`i zKlIdWkk$*^l!BCjZ~fY@X5M&Aq47#a%j(a0fK$~VxM~lP#kWr-sSm>h=OsD^{U!fe zhbvA*57I6k4eyIX@q;dI0(Q0I(#?~5*DTE`*+ZNt@2bZ?)P4Hm;PpCPvvWL?+nnX& zm(pxLpnD*7EvNzrBm;dyzvwOLX|!yswr-{q?|*a-tkyN1Cu8V1xBV7Re&ReP2@soD zQPDkNofM&th83^XL}Wh6AsbbLI{wG-I-swwZI`>`?v=R~2VLL~%$SF{pL|LCdw$@< z-M<^G?3gqM*Xlcz6s;VH&SZWC63R=8>+ z%qal0aaN8T=S1jfkSJ`sNx;}aAjrQ=G!k07JMb;;DK(Jv&wMTW++Z8XSt^zn7||Nv zHLR&p8YY*Lk^gtRg6r9|keZQ7KDl}{V0h&69ji|h5N3DM{GYRfa4=zvr@uifwaFOn zeef=Dt25BDQwI{E@HWrY6+ct@zg_Vzs84zh{pLl*7CaWKd|0j)d&vTPEwa*pnt&`( zPRDOf%4>&KOt{QXCa)##hCO#eHfZ7dU)%>4@5$R6J%B&&T8BTYW8D@(MYTmLC>Z9+ zH2eJha(vUX#6JC)eXp%C@xqZ=&EFu3yVfUze_MeMoJ~nu1Sx>f|5Gfo9`vm1CWuyU zP13{_HCcBbh(`RkBY@(6;Jwb(>>LYVrUI4na7ge7K71g^`(xQ$Vbe__0IX6uDQ(cG z4>mQ}E9l(Jpn}$5#s>rx*`v6$x?n$PSQFRByQ=1+0b$6Kl79T}SI12oc~(zW+5A!& z7LlwMAu1bN3g4WQ__rDO6!%=B(>b5x8f5%|7{+S`qD|g5I(u^MvZgsD(YsUr$~5{15Ij6XOXwZZ zMIRgNi|tDJq=7tso<2WF+&OLF&mKI@i6d5*S9rz*Owa%O=f%6j-=IPfWfiYpm0*`0 z@l(rcv0 zMGrF8nv$_UB=F1Q03>c4ymTpsH^90$km(4N##97S9&xT+!^OqNyNP!l_XY?bD1QmU zBfd`Z=mseR5B@zedTw56MyZ#ovy1tP0vA1?FN=$%PK z$?s{Gh=N6Q^pI*lE{|PTk?7d*U&B z_kHiu{{~$|q%07r^Q!Q6#3oGnvENA*E6hLAtacnA_BNF@HB{tbTE%D&G;5jA=ijpy z$V;&Ot=5$D66{hN6HK-@;MAC=X!{q%NWK_xdik->30%AP+GorWecEyCl>kXH> zZ#|Gk?Twx6Y(FmMymqa393BtS9)-#avy|&R+}o|V0G@lr$XfGvUAmHbD80?V3sK&7 zeg}Hj8QzN}T(km|xnTPpV>|T&E$S(V9t<}9C}QLCafGO%IbT56w~?)ZgO$umDd(2t z?#7yt0?xkP-XQWmbgJz`mC2|A+8(C{LukP|;WX#a#q~V80Fs{$X8|-g75BwU)ERv!afc z$Y!i~LEcvE^Xy+kOu>D2?sfJzvq;3BaeaZ#a^l`r-ri8mlF{KX^&PQmh?r(cz$mNT zaC%vN#9|y|IpYIn9`l7VX%Y~LQ9qg@OA~0{L^?QPBTz1zHd2Zht$;12_qvweHsmf& z-j+EWf~EH)6_hE=t$%7&T?kn|2?!Y|=V-{_tiQ|F!&5FBk{Mj5W%2s%RMKw{YG0%+ zc>7&-bzNxgrthqA==ccI$Vt2?*33-z=&~W3j#6D$X0Gsb(?Ua_Iwos_Mt6fr-YDdK zT{WL%6{`1EQ^x(!3C|}jx3Ei0oPEu*!3rpXfk8r>33Kim&w8`@!&KGFpvWnk`)5Kk z_5F__E3ciIV-(-+$Dr7}(ntgbY&7KW)O>+D5XU@75=`MpryVvfl@Q)!=cMyBy4|WD+1% z#CYXs9T)F^mLh6_C;N(=))S17*ep` zJ|5TEIx~14YpYwd0#cJ*lQU-U6%@;fcqhRsi+P=CB_0F348+H{KLx+{46v>56`g%C z{bY)GaY0R0PV;PmGh949Qhd%#MNtlHS_`w5uzq%bHNi60vOl$U(|E4?ATe>dI@06w z0$h`ZMVMl>cCIExG2EPNxS!4*2q5g?m__dfoA39ykf1oXqdAd1{AU2Hhhkg;S;a_e z&qD`kN_!@dtWB|zR^X`a5VEE`f=K?>%TJYYDj+`nn$gUvkTPtCLP@GkBu!;eM8|li zisCV)dob?J35AbT?ewEuGft?o9pWpb&B`n~4HgXk@R1VzV)@GNhQh2H0v<>+*A&MAPhdW;sdvY+tb?qElx>d>K zG09m()~u6;Lo0?hm$r z9+}66PE{+$nNjXA175(chp(i`zgDFvwo)}_m{9YNj}JA#d%w!CH)IPjxIOYE`esp8 z64}V9zYNZHtwvM7s4PRUUkGo$2|rx-FGcC!)T%L+&G&R?Die=SYB%@VvzQU7b#z^S4HNQ zbj2#v!JpY9wklkcFPwag6T`m&U{HIB@!#@H>5x2ynZ# zf|v5dvoeMK(^l_1Q^Ji8`_iw^^j8tL*sn60?0X zxwnYdDA*fxzgy^Ml~sjf*WCG6Urufu9Yc41^;u8qFkW*-}2 zArla>&$&Uu_%>^pr8b4y@^eT$mMnyGevJPNi9tenx$y2mvc!hM%;V`P236kaF38=| z4athXT^Zd?-hKwJx6f34uwC?RIIF4xD;}vwG~z^8p(4I<^VU81_p>#l2*pAzllFQg zhQMjrkS#C{>ALe>&K)m%<3Kn1Ds0Z8rTp~qOSnR(74fvV_L;zxrS_}6G~b1V;kEiQ zh?Q-@o2Jp?kfS=L@D1#M@hm3Z2mzZ+r$FdVSXED89CE}?v;Ck`Z@>mO+aK4F3MEw{xUKphy1FbL70cnW@{ ziM2@|mAB)Z=!%>=!TDJ()-8dZ7XnSr7^R3gwW`LkEmP*#Qh@{&miYw5Mqz3J*P{>B z4lgUk-YIk+$3i`YD#EeZIpC#45 zfBz@vWin+qA}IP`7P5@k((T;hueEA3Deg7{`?0@7G{3UMdRse3-^#VSr6y~iO1Lr4 z`6j~b4F#ghgwmmgL84b?3c=s?uI}sjA)-%N^Gia^N{i*}_=ILj-xlQ>XK1d26P{3A zKpDxm`bO$9g!A|vWm8E|8)QA~`ITdk_9tJ_3PqBn>m+C`l;rz?YECf5|lNd|adBs5xp7 zv%d@BtRGyjbNYlqAd&KnV*=v3TV{9?Ux(K%?Ky|X-!k#Srd_@YhPK(pJO(Gcg_UMl zkRE3xD4JD&vP3{%Z6#p)wkgmsx!`T3@}hY6*tf?k{4qDi`7bX@&9*1S509%|o|rK` zlYglPHvSmn_7maU>gIu%wVS#da@tGjf zz5$UfnocA?uz33IT#(|#W$%ch?3nbqHQ7mE2TF0oIwJ+cDW2r+pvMQb+Al-R&b6g+ zaHGuR%4cFIhAk*5CrF`80ZhpsL#A1ulNEfJ+9eD;JqI*+cN{9(({{H zx<#yfF-GFO0fTqppi=SI`A4l{#tntm>&DPQuIcLAt%d7V%!~~c2AgFq*zJNl5Bil= zQd`&HZxwMySiCEK!Bt!u7e-X%$Js{V%z{;49caD;HlyIvz9Z{~zbt^<;l-N#b$+2T zBr>MI%LXh!n>JG2%*7fyAqP}=b>r*I7HH_zO6bTp6XPydp=J+~D=a>eV>Lr=Kqb)Q z!^%g`tvRZdzf6S)B0|R#B2j0=RH07JftCdy5*12q&DA&yG|3zh61@?x>0msQa z50j8&aAkUH z9HF6@Q>@DNlw#lYc)jF>-6@qx;0k(Nm~iqkde~NLS|80kTJ&>#8P`Q=?9TQfLPDiIjN%OxVV6AvL`5~gWAoJ6GNlMs*i6WX> zsQFZdSJZXc3$KY%aPqzHN4mFWP=V*aK{PJfL&^P=Ih9iaw^eGAUKlXR^NB*x31**_ z575dsHsY0$t^umAI5i&-6VF@AF22OJTKQ`>VO_rsb1k2#m%1**NDOt_X-``mSA8zc zj908pSXj`Rj6j77uKG;&%f3C?wG7^S*~g4r-6+r8AbinSaD-pZ@yL#eq~pE5<--an z%40E*-p_A$%Z8<*CUAiQ#S)nd$=CkwLf0|@ZphBjCF_DDiMg7&*{HG%t%lC7R%>B@ zr8-_V=Q@}aF*&dFaBGmz3MWHU&ce~FvJ@ED`BBZ5>ug>C# zbq_iZhEJ)v7%kIXse zwJVT{NR+t~^bIfT%XafeWn(e?l`y1^^%kW@d820GGi=L!j>9vd683bRS-o}cuG=9q z#}p!p`ZAH!ZRnJx6AhtbcOLnF%cuqHJz9Xrz$ zmX^s+zxt`e9veF+?3h#>AM>8^=X{EpH8Z`p^ngBwEBWTH1R$X{;OMrc-)5cojoVHJ z{Y97xPC7na*S@2;j1_MhOrhEo|F6xVJ+KAyBbuHqna{njE)r^a8)mtM=TLh`NL6*o zNAWViKJgA6Jy^9&MDFFFNnPxyUr^lP3w>N_WqkU*-3HA)N%ljG@dRP>?K2aP%M7Z# z0sh6;sW#bCsK2*49jvkyV)~ z?RE&Z@o-DdwuzV81J=fo+HbQLBdwT!>(e%^`g= znwsOemQAl<>qUmX`QTpNTln^$0drEmGxd$D3`^JRBJKxg!j7< zh_`t3PF18OnXP5k+VOCYgLrEBOc3Xz2*w%gC#Zxgr9w@)Dm}{vsbi@~7iVEfML3w@ ziLF>wf6TiLiiVGmsmuXv9WJ~C3y8JDDKnZq-tqEipsI2?nDWV;tn}xWVvx^%3YJ5& ziam&$B2})X7}2Pj>QAu5Z&6HzG*Fuib5r8caIqI{5)@V59ZvEn-BX{7$K;>IWxpSV zXqocp%JpYw2TGXjp}&s4Rv)v;X8o=pD=TZ!^~y2yiSf;t*mv5}%;$Rr5v>TE+KBB7 z-EHR$e~mMCx!_ayN@|{p%VSmQN=oYM6P@xqdCk@C+k!ck zV>@U^UMSXXab(vaE}Wloj!gYT`fi(zF^#8L%8_88l|o#0_K_Ccvf_2oo0kqzUh7!N0)HW zvvCe||0CnQ4@mK|LJ4!uix{nKNSS4Re&X9A&dsBnrXOvHjY3h{rGh!tWj{tXUUCRg z9_W1@QQSbl_4o-ui8MoItp8vUrJ;j1+A_!;pplXB}kJ5i4=J~9TJ1UDn&skT))B5S7$KppZ0VK=Yg z1L?DOZvOZ|k|+G+OFS#)mGimi{RCElNIB#r;Yh_(;_q&STT}Cn? z(FTkb32h?Zq~5epEtQ?A5Ts72XJX<@lPnWm>UQ@RHj#&d&rY;0G_e~)9BHX3_BrjV zQNEtWSvz+2-raaFA=1)A?Iq>apf@XLXKWea)u8QaDf%w%8f`+-W$j#8-)wJdu!iy& zbi0_vwYICOB<-nef?4e>FYh$#OH;9;)D}^Fr(#(lm9*|b47dmIt9)%L?L zQeE{Vc8R9OBfPNa`(AE!8HLrm=>#p9_)OhmN z)3wyPCd@l(#CvY65r!+LMs>|E@!qkK(?YrkIj=8P{FL3ul17!?+s*_JB8`QsO7=F~ z5JF|R)+VvINUSY{RjO*%+QSob5Q=9)hX>q-J>&|~`$^kyI41jq@~BT zKz;!k1XbKd3%i){T%K!o0m=hb_c2QX3!BGNbYKz`f>xC&4(QY}fRd}BRz7RyGI36F z>`QK~+!0=W|xtohO@5wp*zpv(re_Zm(@%zn)E%VDZCmJ?@_~y`|jAE}LtpMQRLl zUfX6_n!v{t)7k3D1Q!;Kz8IR$BPrP$YPL65aPN*ddsfU%v&4OmYK<<~uBUqhkS?Xx zBU6Uj%HGOO_Mg+&`t{FySiF^AOSaJTn4TL*V@J7}tp3nU8XL~2vCuA~v%I-Ut6u9_ z@1FkJ*SFc|i${k{nt5}(-_{#5br&NV^SA3v8FmL(KjU>D0AE*2jO+SehU-(hcgGeplVgi}Rk*3#L_c@?e9leCL+V%BY~ zbgKyDw1hsHsaZ>BWi`XOisMjyax_gZSMXZv5yK!`8J+=o)mFMNSei+1uHoukKHhys zzl_ zebzc=p`zd0#}=U# z^_0zeK=pK(&rs=~j`imDpH7KAc=Z9A(ySm((VJL~H`C$S1W1;$2(`<#)Giu1ZRTK_ zeWlbF631rniyZ;4mgZ1VEp=!T&Kr0W=3O+20F%QQw3_3&I3H(o0k@UWxHgyo$o#H^ z3M4W)$FvLSyElsePLocYzne2<_xQa-df#%kjP=N05RreE*G!Fl4ZK-(Dt?agGV1qRw%)Nc8R zB;3Jin7bAyCRU7}vO=Sb4te$4!tzNTF^w-oo@>jl^PskuR=Lx5TH9L-Y2nl$yp|@C z^5JeR@2!1~?pdXsq>}#tP>hsoi7Q5oUVBV)T*m`j^$a?7k+XzYBv)NlmKvYgrLFun zx}xhrovv&nxYRXm9>OF|B3pT<)b*RFB%Lmr@@ttd5wE+@{ggVb-k*2uazSUZ5hO-J z#ueHw8|7Iaw$C!#z}E0AYd)bp>^D<9Ya{A9)!gbJnqA13We^|+t#vtU@!5hLt6g78 zu^G2MjnVg-o*kQHdUr%<&^@Y2yw7hd*d)+t==Z6pbzX&O9?0*YmQ81?UVTF4bjvo1 zO;1$6)g)7Sav8Ta-GhN)V|RUV6fj0h==x&mma2sAo8VsHJ^uh8R4Ugl#khd%8jt{8q`c}syj%cd@2^?0Fd#c-(_8Wl{TOOdkwA(G!#Pz7!&jfLa zT_L%>yVE8Dd)Efo>i2gk41UcSo@a|qm|jVAC7-_V~mJ+eBajB;Am=N-S#aLFKXaTsmH9%fRfirxM3Qee{@@to5)2Cl9! z%qilY=#DDl&$3%IRaEjTirfVj8T!&T8m#5P7&W3?i=93ro_+rSNLKrAEG{dW;~(5p zJAhG(W9jAUUq7v99^^JtJ19glHKp;gSSEmNo_oo?n=85)=9=nBOpN#`a`B+qklbux zxUkzhgq-fcp5!PI&h(qiR>TKpj%6E!k*g}Fa~q~qq?5HIZxa+|QHjvqDWSIvf0<+| zz>}Kp^1HlMyYdvXxJQq6;Jx65Q+CeNw;K-T3OHPvi?pnJk(RA5QjbQG3y7hD?rD13 z2YV^ca^_u6s&Dlf;+|W4#i{H1t@>Kq-O3Chkp?+xitb3eq978xPk>gm4IbxGn1OG) zEiXp1(vbEO$M9})#&@gr&amO-z?*N{4cYZ{P|m+=`0ri89GW`H-#sfTlaBY<8^Gj;B47F-44v4Ss23x`^s1tE*XkfVqcJS)zva2-UZClBT?p?NSJ1SYnPC zqs-THHfJ;4sC}Dl(pQc|Woo#Cxq0n!L9*V@Z*-nE7baPwE#MHi#_`2P zCki(4&ea@L@qFJ(oeH-Z0o>6hq=z}+*JVMI3BszxyNzlSZj_Pa+0PY*G!yE1p_&4r z9xf}T<=fwYpMlr*{mm-gYqKvWx zSogQIw(ZN{Xy)4-yE2t5@=xY?t;fo|Zb|d4rAMCu*+Br-NTrdKFb9uwKH^Bo!GXc= z$&=#1w8W@UisP`1(J4SvP?xiDGy)aaXYhbKY#wR*L7rB^!t%a;VR_nV$p$>bZ#~4R z6})WEqVzo7$mi5wYQ+ptMzO?!SKzk_#;ou1%p}t-oL-1s#74yfYX;YJ5Zl?TLgnI? zXLzl|G4wG10FKA_?_2)>1U&l3C(e#OhJq5MyoS-WF&V2n$*iYYVO7l9)veXL2}F$Y zMYIO<8?f12idH+pCa#~irb3a(yQ&>Ty_C_(Ch24e6Aszt#_2?}xE>oTgM}Z@6A5EO zj1(hqXvP3?N1rmc2b!K7^NN-;lZ@5^=bk|Dk&1K(YIbQ9t~@t3jc*&uUtpP{!^+VbFPVVZGQX-5fD@P`W_n_Va z3WHi_NNTsy$8jM`IBz;K+Sz!&k(%<+ttDh9HMzF!&lsVw5Ex>f;fUCt82$z;6@q@1 zvA-(t`mLteSA$m4Bgr2W{UxUA8Mu+9S*7S$cW#GJaZ_{^>m+J56l${QtGjtJ_h?cM zjkW}}#mlj?)2y`g+ih%-kA`{3uA#KK(KSh;hItYs>K%1BU1ID7y}P@ZNq0PxRqtd7 zf<&RZD@GRZevpv}m+{W9v^QET?dmx7F4~bWrJ3W-=3Eh+85%|#-HkzOJj(2maqKS8 z1{13eD%~w7P>%h#Xhpg@M|6`Tqeje*q%=4#xhEU)RF%NB-xEjleJR2TRWNGOGul)X ziI739nEwEG8L1b}q>DM@H6$4GqP&1dFOMTrp&~`Azvci`iL_ICg=U~~4nf5=^h?3U zdPiP26aJ2K$GvcZNGC&1yIF^*U|^pn#!fttfWsgf@SOSJ=gZVvDx($Aoj8pD0Hp5K zWld*Wg48niSGjT2&^Zf+b9B+(A(6(~mIjaE0ZJ=vY$xeKWIjTpvAC3O2uS@IfVns# z!f~7~`g$RAA<5EsGtui!fQKVWbMmRVl1kiQ|Ipyx8zC`wlnIcj4dG%?Rk=n_Y z2Cn5>iC$jVPgFyl*v&-~&oJkm7fx>202+ePVhc+U;+`Srig^D3^HN9Wjwr7_btc^X zF)lKGlx5scG)7AbxwPH`EnKKvigFDDoYw8TX{7w9%E#+lnEh*^^jRPcsLq>y2D@qO zdbXhtm191zR~Rd`NIY>;LhCH5tuAgBZHHlIB*DL&_d% zY1pVt@nqfAFt;@|s8ju&3j2V1$Ea~gyZ-0RX%@l>q`woP@c$H*iUc=P3w)E zXt&jIXLo4(XSJ3lv;P1$ZAZ-hJ8_?9p97ol7V_u;>w{@yxzq-oO6=VdtH@mZ#D*)z z2dPN%V%U;2Unvy&?fa52h%VsZ1|S^Ovb!-=T-KAKH;aFX?Cn+*i5Gy2uw0CRlFI~&!M+)DCIpxN3oOC`_?C6=ve1Q>}GS4eia7k5tko9@b1~y5en6w{^3cRs-e7IbLUzG(7VyJ>38lwj$j@Ltwtji)cMD`Z>4HiX}$|7 zq*?7QEn95xylq1nB0D+q6Ec9418cNd#YJX`a$ zcOgK(?Z>Omt`#MoSTht&UwX6tV(yC^mUtoz#^v9E~X^3q*nI- z0GQSZpr(>Dj%t1+VM>L(sUscX8&^%}+GVAcrPMay&+t0;_$pB1fdDYBNu#`YGny&1 zkWVeKYxtF-nz<;R!24;ZfwJoqM%W|b%< zBsrvlgd~ws#k8rdF%XfFQeQ2Go?bT@zq*q8>Pe+JbWOkBqR*XZm)_F{Y1_y58|_m} z4%@7>rq{#sSC9i+YjbJMfWbE4QuKkq*s>-!{o8%wY}bqT}fx|Z%; zAEtEeKG>Mw(dLg0#FsjR$R4$uxUA#cFdi$Iwec)(2Ftts1}WFW;CVFZ$9z0XQ`$`i zH=_?-if(mx`8r-M?aACIMYqbafxzT|x%{*J>RD8C!Kvk0{5^q(vx{+da2EdnP}5^# zkwUY{cd5?u6^_m*hqGKlg|Mh!$2m;!N9MYf2?tZ-s<<9Pf))%=9oNs~(n-(8Wn%9VNItnOacc;r)2NV7(gA@Kdfuk5Vip3>$r z7JA%A)YnXO>*}({bZ$1ph>@bAC=2-SRN4D(i**<^BJCoP$}nMFaQ*0Xxj@SF1_p`1 zt$4K4GLgoQZf#^z2ai#T7kMOwl!ms1??+1N9X;T+jD_M<*u+#Ym&qfGO{VVAvByck zs|M^=2iA|$q(7IO(%^kfUECZWF;`lIu*P#?UVosSv z-mDbd+-dO0#aTsPv@^^a9OJe{Ll`7gt+{?Nn$a{wMMs@HP}=t6#}%qT8aW2ub!ZG1 z8@`i5s{5DZwjf~UvNy8iRDa9%@+jn#BQ0 z2;=B`eqJ0BgXu%-LAj_OmFA)=v~f`{H5IvIpjhbkOy~qseey#v7>r07&$-psRG;u$z5Rw40*(UDVrjOW8FY zD$edz0#C~-}#hgj)NHT>V9{>P_YR;&B?apKvN-tW(DyglDG}W3^qQ)ZG1QSNw%s zISNPC=$6k13ktL4g()65YqmYIfFAcVsvXb7=^3<%uJWH!6-qTa7^vV< zN}fxYoUel3H4U2Z;}v@b^?X*fWxX5)<-sw!c~lL9iqYJy^^woP>#ado*sTXOoQ=kj zfJSewaDuypmL%{;(z8aBlZvwW0~&)U;!U+>axF^B3hs#7bndAOyI3HTQ?Y{5a*_PA z+S|XEoEFiCtYU3Y|^`@3C zw8yzY<6u;fYoTs?@M?N%ky<$rbll0!Ufp+Od=ZOZTtua3dd@{HHYM35p&ppP}`{2{;vOq(&DsgO8>} zuWs9;H3jrDuvq30PpP%ktFq=6K*;FX@l(j*Ii@_(=Asxhrxbjs{$8&<)GPg}**vP> zD~h)`=YdnqcKMKG9x=^o^NV-}X(cXAB9^7MbB-x(ZkFbbI!RxlWwae?{vy7ex3T*KAtdgm|Qv%_QOWBR7?4nur#D z&*fILEc#@ym~mmp-g-tl=<^n;L?nmF%epP8ExmuS3G?|{KY;< z;;v5W)AgI{WbHGFp%dvhQ5@SeFQ^1VwFd{!)SvH5Ox$9;!REfAqFmGv)DdE$4%-Usq{-Y zKG||U;nj`1s5L)xMA!7qP8cGJZL|JA);eguv5CU?{Hvz*Z_@faGZX$RS?R>OZ)>&U zOAQX@`Itsj8?K+c)AH=qrfQMfq|jWjN{r&`y&LX{&TvOHx1TXegN6%Gow&^-o-;y0 z^*n~jraAoShxg4-9_~P#oNpU}2KbBdBq+Sa4?@)z>0Gg!2;(+qa#BfHb|Lw|E5rc(1<^p2=N*$O!6 z>pP7S2@>w}D|2-B2l7vk)UCT+)eo;oy0fy>ZEi1Y{iX|TUG-k9vApcZ0{%ZNNi=U1 ziV0l+H{{Zr!$Ag-XjlOj-!)Fw}bePUD z&up@1io3VRBAHL+Kyyeq{ODHSE-E$0okn*3F-bqu>XUsb2;(%Z{f-Ian!A{JW~X3k z1{voS)6f1bNInOaNe*4f`Y+|kb6S57p1&;5bdI#0Dh4f1^6RnvV*K7~04 zGFj=`rL4BeJTnJ}SGzJc0l~Pm&Sl%hjgNZagqg;lbrk*h0R@}`lg%pNn&Ot1&oqDE zl6lFdBaYmP0qb;s7HM>HmNPqZrg?$@lk2ZRIFM^zrarL#rwB>b)jQ4Mu4K z{gotbCPIv!!=ELqU}2aRS^yDPtX4Sluc4`%0;N3qk-V~M&QN2)#ZH-TI-c9>UA6|4 z9%wI@0E_K`qZ)=yw$@tw_Eh7pl)hwE&RmQATh_alWj?K zux=n?w0Wn8UV(^ZjGPWd41a1|cxVj$C}NE{r)nge(_%PHRt##myvZyB|{kBm04XIHUdj zM<1ONQn&Z1O#}U@Pxq^7b`Ud2JBgp9iHzo?w)4QQ)(EYK%g%`Bn)3Q)oS*MY$J3af z`_v}_l;V$ziZ;emfGXEVa;L-3=nJ<$A+0k>md@H|e-GU6PH!%cyQKA{{4hgk*8b4; ztJL>9W|HRK-AijQ^3hq{uAS5nUEMvL(Y?LTNn%@^|qo?rY?di>~(*!;U${IS`{ zI5-V%F@iBy5b#@X7Z#>jF^(XySdcC#z)%{1n3x>Zjl!b%PAjUeM7HuV0*yp)PHHS> zx?}A%OEK@?YPLFXCgO0lKVNBxSVwO&*X8(?BO6yjpB(-RTz}{azVKKm^^B!4V zIL#dWMPrjk@}tL{5Bya5qIs;)V@S*o6>D+86~iqNw10V5gIhl#Oqd*sBR@>jA<1u` z9CJ~chs!yjF-W=Mn(hrcBP@x$L+Jq^z+EWgLF-$6UT(yeor8CDvSv8GU%0o*)iKPn zA5iseBN-LZRtXJ_%=5mGIGQk;rz3H77kj%wObnub*%VAqA~wYYg^yMH${(d4x>IP;=0^x+ionppC3 zPcX(n^Wj%NOwe7wO1MKm7^TtDL-nmYO1ibVhIj$bpWLTyuujy+B%gEq1N83h$QQi@ zqCq~6m)eteVmhXiY`FHAQDy2a9k(Hycuhva?(*{1-OE=^NBTRfHA@gMpO0Th8lvGq zG30=1-yE9F7s2Nhb~BSl9M|PWjucdqb4SI;l|-X(0;565;*u{f`MY0CS71}dF_Y&i zS4^SIy+PqMMJO1|oc`vy+-wz~kx>ha^;7<34=SN4w9;J7C!Q)}N(k z9vXFu#vl}ZuiUTB+Y94I+zvvOt3IT;O&$$7P6Sty$&JmLj&(o_0?pGpRn3~+-d+q` zn9Lo08+|_>xN$74k1KzWR5<+Wc>~Ld9~69G)2E-Sam_KNKTPnr2N>cI1w=48sD}z^ zKr~18tDXVHOE$*j)c0r%Vcvx7#*}Bp{I|M=g_v^lDQ!cjCb`_PeVlJ0Y~kV+ zk*lF?dseq|dzV)+T0-*5c)PxRN<%C8YOk0r#?$I5Kn8%_fyEJuwZ3R@ui}j)Nmq1i zD>cv7fgZ0hUrHnWs%kVVAMamEP=C3oiC@m6f1#l#1IoA{oYvZ8#yGCY=DRu01r)|O zrSd%RhM+kk=~ksOwQs4|z^H;u$nMfHb~!(C)*EhjX?dDHiUQgvvw*?0k((&xlW8>D$ zsI1Izy+g0uU*7g1%EJSQZDZ#rSt@Pp@C^mcI{j)j$S2OE9wW_SqLtxb$Z&1%qnn5D zzce`dQ8X}cJx%@UamST6pA;wx#eRA6Ry41iR5D}FnvP81`BDtg#swf0ss8looC?{= z{{WP5e5yHdj%(VO4?0<87cokwkV61Rm)yFAwrF~(_w2~tzEz}3zT0AfYF0DA z-*0JR^F$LgOY0E;u3`L%c<&i@Qu7dcVM$Bit}{cEN;s}?-&#}86dZtZDjSfyYq`6c zR@`uDIrB7da0sSM56JD$kf4WkELp`vZIRAuAKgdyKB#TF2Bv*idKI*BM~3Jf)|joj6?T z^IkgTddb;mMcrCt!sAc0VVuY2c&LsBYdlnps&PPqY8NLJb8p;JjAnT8$CW?UiOHaG z^rU=|O5hqtA5(%Hk~kD!gOW3K;?ETxm-ZOXk%{;AXn}On_YDoacJOhvpYi@Y+rHC>5=h@HYQQCcY#8Howc>#~P^?Aon zU)R>7J6t`RMOlc-p^_GxQkF>G(T94jI^Oo%rS$7)c6(i=>cX!S(FtL)=^M>nIVaO5 zj%eD~Skc);`aJ0+)z?|-sQaw0j9mv0vuPIvkclja-A-_|cRn3{q6Y8-n#sjqsF<;bTtE2w>#w zz1iH1Cue z)OV0Wa~?LvY4{a0Qn>#Ba|GBR8dmVsm?QJ6t8n|c0&!`d(L9UbPFVfcCiQIcx0ldI8_I8qd_OTi|R-AwS6)W^U zpZ@^Zp{3a`J*rDPSpHZNhaYw8w#J2ug9d1U#wCqiWi}!q_PlIATs zLM7?Wu(OG+{{Tl__M+&%s=8Ru=(k1FJr^GX>biz2P15vz0v_F!szY6DZEp0NsOBCn zkd{%Sg_8n1D~R)s<|_X35;h6B6YsvYj;y&OHFYpVI&VIE$z(w&_SZkik zZEqAu5`G&u;%k!yxja)>d`%}c9 z`DhU5iZKD@UM0;550*`L+ng>>e>L3)G#DHl0Y@40;fTjH$HV7ZqwI~1KP1;1t9C!z zqpaTQ^xTkpRn&UFX&TB0!~0sSn_#J36>uDyoMKk-W{6$s!8Iaa<84Xd?T|sJ&iczQ z(`{pneF~o{D@-VlcNL1qtP&|@BBHs+naxWeG{-)>JGty`BDlAZq?!)9Z?0PJTqOSh zdh6r=00)3po(o@Dfx9}U;-BLfn&`a>+ABCUTh;DP)1v)oN)MGt*~sA1E0g=qHLY6D zOO2W263we?Gu{iQmRy?|(_Dfpd$}``{b11^WyM@|i^xV9t5Cjs+n15tk@#)({kEM0PjMhs)o-qK zo0XP9;gMv8EuF?{Sjoe&!pyj zAk?FpX278@K6tA+{{XlY7_!uj&N-=@H7TOwpREQIHn7Ghu6}^l-^kZ-mV}2CCIcDs zHyly8=B2v|8?@*R@CEF%ROpX1u zm`u7}oieu@Tk@^A^RAh>irYrKX&V)PtX`8{A{s9-zLuO+Az!43fLHSmv`u zkKww8v1O+z4KFH@EM)HyBGH|_rbAg|U9OaB14w4FqoAOP1Hj{5r zZ1oy6)qi0f+-$5WJDDs9itjBG$gaDQ!CBmJD4uF3#am0^rt-#Warp|FF@c(O7;X(b zh`GVVUF$JJmGd_moyEtSVzZx)mop;m4tAHx2NVLexnOCA3H2rA%6Up?cCK3l2;I@6 zVyDeqtt)~kE_3CQKPn$uJkj@$!sr=xYfhhe^Wzoi4k7H;3}%cyv~kG)0BHMTl5&>O z+jiAgpbU2!719VmuB5Qa_o3#lC3MbLmwnz;ePXuJ7^1{mTBxiLd9EZ@&&|>IdVQ-& zG}2;Sf3BFLph}QOo9(+*ZWZ1)jf$|rq?aCb<~%s2$Dh=% zm*hvdD>P{PsJW&XBzm!m=-1oSHa~g0w-;8^KxA~SdrrR6ZcVk!o4`C8SZ9?UY&OqF z(8=8}GjdJFX%rbFGh$CJZ zOjhO{tm(+I+cI`@36-#?4vu+AV(i9btxLVVL&R2%K`TKtQm@Sf>2+@f${z`%Mvwc` zRM9Mhn(7XlCw0xIhD5%)f=!G{HMXwnx4gTnPt>jFP$QTF1%zVQYPJ%(dzHiHU(6ly>+gKd#DI5?S}sVR_4H5oODDl1)iqz zor|XI+OFK2%{J3iOiv!$Gm#%HZafP%-Az z>O46>+(Ss4$q!)&R$4NJ77#D$dVu1ujD zl6>iW#dIa{yy@s7W8*Yv{b{Mc-kbZ>(FRk+YnlW%nP}5%%MA8ywT5aL?wQxI0~gUW zjeb=_e|jK_*4o<5e$9MW67X?X`H@=(nIGjO^LXR7;~dG$x832Lpl!>H#dyAF&4OG* zjP57GSxVxFta`T^-Nq}5$mg2IYXZOX>olNKdC)jDZh~G~g|T;Ba3RsIHH}ExS`QA5 zq1kA#?16Vl_pN%=*=rh%IK@L}b#jutHquDF8E_!B)}m&`Hm5Wg?a9Piwc~CLG23aX zJZh1?LI+!-i1F>O@X?QvK@q?Pb}dh9YjqPvJQ2$uQTjKuxJS6rzQ${tTZ=iQg5oBQ zUs&Y&XII=N>Gcah!32NO6^| zs(c`w>{Nl~Y7|y)5aKWwyBkEoBXI6~F`$B3{?tP{ZA7;nxGoEYTV`3i1sPuA4Y7$M zbrpKzSsp+ex9ap~KZ{d`G-%QP0BUL{)WDuASiH8=EhM;|urDv=y}D`T@|UbM=yLWt zX%C_G>~hR4wMbSppSb~71Tda$>D@!&nqYIyYI6>DkykSKPZ*=m-c{LrjXdc(4&cMB z6mL9MD34xieQvGPYd)ZH>(f(wW}vjVl3ROASohsW`X8k1@?NgcXW|frPqhXnsu#TYInMnyY8-@N@8-^Y|vk&FU{l#9&3UD z-{AnL6|lL$1k(+pjM5=y?WZ+np(9ji!?MK*`%G|6~>>h4J=hiKb&AG70+0Q$WiUG{aD5T8+|ruxwoewBA|1&y?~H!rd+cUqrY zy=k0ni`UW}SS`Y7I-~ypgw}i7O~(HKG`YW5{nH#>OS^VWPWe86eOb;h$`~(VOkuW` zwrpq4niE9`tb4!`c&O}UWej)?WD|zYMXpB+$4}|f-#aa?%xLzSUV{v#HZxrHjpJWv z*F_-?5pLy`RwQ!WKc#g{4ZRX{O*h-8hi0R0yQb3=}7V0+n*Az@Fq~udXhdk3q`4L-9W7h;=VY?-R-XBQ{%W%ERT@DLwow}G!Y|n3P)H-F!3YT#1ONC*a zRo1Vk+5Z5Txm2k-w?h)7BIkR_V{b1YZ8F$QnJME3gM;^ryErcsY>UpPrcY*a-YDjS zCpf7Q;yiIsT*{5Z;8^N5sDP8XqSP8@-SUfRxfwK*E^s6Qq_=6%lGzXLZky(nBU|3I(Je9(R=9iKztkq;(%v`)-lcnfS?@07l>Gr2 zp@4Y?iO9x1OSI(TvE|Na513%(3aD+!O20j}6notnS6{3~an%C%EA-hkDq{(slgovZ=avR*Syq{0Iw!61&vh|I% zzNKkn)K()90`##`z6fYSyn3HXODr>m~M(xM01;F@E7*BZsnL?tbfd#j7K-*IsyjXx z@}gNEY>zU|-PrdByf$e!h|N)0cKgnEcT7U^Sc+q9xC?J`l4rMb44t`InMEHnk6)vU z(RI_kf_y+$+S^Tq48-7dZnkyJVtJJPgiOllSI%gASlvg@-RRq-yIby_x&6)MoVHg} z+sZKeO&`FOnNC#T$93c#ceAor*k+|q-W<@Q>IW62TRn&?}3+|7O&Zw;HaJ@&Y&8%NEnLUbJ4t~DBI%B&Yta^gy z>MM}h+f2?g;^8*uoa5`2Cp&o?lnV2250`Jpinq2fNbS1d70m#P;hHjkoN@x3)(m+=pXD4&@HM8t=w|?bzl9UBpaaZswwQ%BByriGT!vaw$gR ziu7@R?3&@VC%^}*0=*&YzoRs-V~L2ksGvU0H2K9`0W>h@lIyULPd??8lRLjF&;*@AFryx@Xjg6`IW^AZz1c2wm3BeqC^gP8V&Zz z+82Kf!H~OTkTpzwru8hgaLH_d*~_x6?rzkRC9KjX>AOTKj2Z^i^+RhK$g(JH8tDFs z(+D)z00nQOLaaBT1MfPtc#dni3_!np#v+YwrFWfnt<0J4TFk#~HaGAH6(0_@Z1UUB4a5#s zT{`kDM#j?eFOryr1hK&C%~`e0YU=4v*y-9_mvRm`)pT)X(|67nmO`^WS2hf zm2MhECbU@~x`Ovdm*u{;lG5T>U*?cIbD!Z0QuW3YoD)Gd9K z_hSv%(VTvV)4WEdlMBz6wqx?G;&2EUZ$G>B4yts0E^CGT>A01oc?*)udpeA6uhKLB z0L@Wfu6%Vp@Nbk;NLq)OuHgowyDML$e7(`}`qo^FI0kack(UZL1Ls5_h8*I8ZDJT4 zfWsgzYik4Y*4*F^J*0z*D!_B)^dJgvAZz~s9I_SqidQ3nOSqN_z9`&)+0HZ1oj4fd zib4u)Bvh)lS(2s1NL8C>_Sq@#iIQahnPm7OOR*Ev)4HJ`}a?|(m)V>>pB8Qk2FS%nT*2Zb@ zM&nUl+*vn)&e?SnI2iM=ndS@6HtV&30;b1rZsS_Sy}N0-ts(Ylb_yzcl@XsEBRfby zsFz|25_q{hecRF$gjm=|?~gI}eyvxVQre6~G(&3;xF`MU61{*Qkl5O+q#6n_yX&-r z=Sv@!PSEYXLQfR2f)5~30F=nZY}y03;|GnSp9Xx%ta0jZkw6rITWD9WAP!bNu_MgZ z?qPdj7q!b2totq@npJCQB|Y6s#M}N;Ss1GcHz54<%h%H{ZEvC+q=_tPA~w7r$5x5B%3_516?Vo zL8_*u)Avo_)UBklo_l$Q9QY&0)>GPuLJ7$^=imB!zm*U& zQCQ(`oxWW0?pvHs5vll^6IcP7r1veDhFXgaAC+8iq;W_?5?GO1F=a^rAd7TjM$!#j zH`)1fugJ~)hL@>JEK$U$$sOhSwv~5nWzqL)Q*VoenjX@FMY-q73HdQO=kC6d57_Br z-ye6^oKMsmhWzZB8;>3rWi~Q#$-|=Uag0}OiTMsp zSPDF=8@S{F9>>~n2?H6fc;k;R_wax*Y<**NT~XI=>@>D*+qP|<*tXT!wr$&HW1J)n z8Yd@4lQzA1zweGau70ku$NII`o_o$`Jy<|Xo_C?GR>OO2Sa=k$s1=Gq1i@g+`o)|ygz8G;4ofwWNNFK$cdtr~LbNO=DT8OJKm2Sf>)H_l`7LI>Bl?s(gWj9^fl*1$btZFB z8_&Q!H=FF_6P$c0S+``JcNVV#Z{s+x{Bt|48WLd=a*ad+tK!a9CrWt+Eipfg%* z8Nr#1Ii5w@uY&*<5%-HTF}yq*Jc^5>rny)_{|Er#`(R;nkGh+X?&Gum=qPMDnO{a1 zoA9N}m5vFgq0U1tV5tWuyUtgTVvc?A8lAR?EnHvVtUG|qqMNEk=b@;bbfb;bHv|dU zwzVU&IeTi5iAJJ#<5|Mpl^E!6z+l8K2yL{PWi&Rki?#b;8?^!JDgF;^S~=+I0;}Io z-~adkC8@?q$?8QSvx;JSd=$&0J6?*RxPk3^`^%n~WP*k1bhl8+AjNK#IK-PMG!F%G zAv?#m){K?rha5se%UKVB*8+qZk24tWy^q0Y-^e6gdfD;S0TLhY7cE?~fz(NKFDo*Q zb0vMsp{5*&&x` z7Pv{Y4CG#(xt41B8eWI&0u+~7<|E1_DbYJb3WJIu@m^(rZ6eG`j8+u} zb#rbV6PtiJ%%0S&(G5Girzo`6{+=&LXj$l%044GF`~zF5|C?O~V$vrDn{FKaVziCj zz$WqszZxRtnF|(; zoSr|&*EA|;w$H<=)r554X@bR(YB3EXm2ezm5%WkEH>p5(v&$HRD;*c1ZPty=d_-ld z!>6V8Xx^*|@T6s~zy5|7^*9NoC@uecatvS%HixP^14%Z@NkPCfLDJfJL2)lZ{_XhJ zjZDzoE0&UU>FEM>U<#)B*q9X$o{8fKms3G&!%tUTj%^&&&ePCJR25>wUAexlR^_e1 z=;(}a^WCs-aL+rk>Z-yqw3EKor-Ux9btVJ5c|1NsqF6~@fm>P3^a0Yv;L|5HQXJmw zDe)bLBeVo`cQVB16GTO#wjTjtFiIphcTz;%xQoid8C6J1{h@I+64SsS6`z8mP1ux= zUg0CHGSfTTBCw;za;7sQ{-MLI-z%MKgd0`dYl10~x7qhbe9Db=z--^ytOZ0ioYAX{Vu?*p05>}%TZ>?JIAoGi_oSOqwIsQA1OjUt^Kypa zJ81`kNr5dch@ihRe+nv|WL#NJxcW!);_g~`Jar(DYffvc zym~gs{6-|BV?250dXqFq+v2x^dyOZBEvpzJFh_m#!pY&dkUv)W2=e(Oalpl?BSG5m zMg6YS5V`tBDr9;J zBX0;y-6M4*T!yciW&AC%VA|xjBUXTPT8wg# zXIY1`usJ41!f1M03#2I{AZVSEG-zxXh!tgGMJWpLiyu`qgBj}DLKf&?R!P@f07~VA zWS%G%`ViYk8yJd`e=i>hz-}`;W4?V>|*&Cx8Hu3 zmW3B$hAt|hb42M%fdm8`b=pLyf5=#bC7PE0Om;JTdVaAxe zyM%czHCckmA0eje3UKHIksD%(n`K>ffpFRo?FDKU1hB0DXSXPQc1*3KPY1c^;k#lT zsit@2kr{f<3j_10^)8MzDJlI5u|K@}SI0GTH9w$15b{~Ka&!Xand_)Ha(U(>(IAUY z+0syTF6SIF5SEC*96mJ_F074ireX#KGsw<#ei8SF_}o&y$Zx1?^L_Dw$Ff%A zLql4_p=76r;-_AarUsi*jAOc+Iva#}_D?F(&*d9fv!1~0vL z-9brgMtIiO1uRv+e0u8??Uju0LSNk8MCd19!0nzgZpHf<05rrVII$0$@*ooVCBEUe zoOi8`p0H&njx-NoJOByjfCXg#@CtjPM(k5VFs6MmXo0(6P>>RuzkWT;@LRLd!XfvE z`5yN*{$7W;HPy=v;bV;Z9Ii#7aUU05e< z(!9863FVq^Y;vI!OMLVfwNgTr+BgmV)JmnYUJxEi+AKcEw*}@QFOZLZ*qyP@!l{?f zKFY-K>HeU{0nXfAt75|A^^=!F7eQgcaGUG{=yUcCcc&5XP?GP;*saORprKYO572dP zK&~D8;$|s=yJCc?@D^JkbBqf#Xc-2Uaug=JQWQ(BQ4*0MnC4_wdfvcv%h9#kBM6dl z>qirK;{J_4zjEU(huWzGgcag8QD~q@{8siA`ttm3K7EQ4ci0;{%qh1(&IMS{W zK8Jq|Lq9Sx$L%{?_*DI#dBzCV1%?L4{!}H!--32zp^0{I)V$vuU>_`y$Mf7a?=6Pb z2S*`~M^OQ7vBJi_G)L!`HMZWu>wdlN6mH#b7Qaw*u}<``p6i_9V5+k0z8v97fwx)R zVhtl;Q&^sEFkb>N`Uj`ufbD0}nFe7jKyDaO^@s*dZ?T(_?8Nsqt+MO>mTVHD!Vcu@ z4TUpj>D_@dH9H=b)F2)M6MyB_<+8URus6tK`?MTSfu6Z0$LxM@a{;rS(P(q?ZR`^2 zw&cl(0uvTz3K)Uukp>)#cjJlSV5FdR;uozKix)O_GW5NAm7Boq{o;gQVP=#BwLb$# zo3?M0%Uc3?fsT*!4CU!aG6GK;c|=x%AGL28Rc7;d-{>L_1Y7 zR`&8FmZI{MaajhT!~r~LB%0>*tuR3(>Ix#U4J)Zj@KZ;J`bff^?ZXItf%p#|1$l=$ zI!%CpiQVzkApA#}{eb)4Yq# znQJ)<2H9_OBJ%A&M$3+_?ld!k3xch)|G-3si2nNgECtf?3lP0| zivZBeKvkUVRRiac86)WpPAp#KQkUIHJO^;q-NQnpuMf}1KGls*KxD@++$&2}8rJ~w z#_{e3Sut{>#oxZKfKK448!A|52Zp^!snsAMXEOJ?d(d>H7P(RZg%MLl7cWWh^aqtM$Z>UcB*U8$(&3%oQT_1V&IE z+j)P^h^F!@9)P<99$^e=j0C5NIhTl-SLYCg?bS%%X)-66N@~9=r{9#tl_|curX${M z0l#D>(fMwpB-2)N#_nFoSf`j3D=?d%LQxh(_2T! z9S_mXGU>W(zOO2b7l&FP3}2g~NIT&CcxF9EV3%4T(HQEYIn56C{&7uhPQqL8h9;du7gI{?mg zPk=1Spk{@3t-XM5^~brkS{Q85CvsJCy?#hIu$rmt6Ed&_8;PLviJnT~Mtl=updRch(REhF({ciqJ)?{O3zP z=2$H&&>#_vO1$wD&w|ncvZKdc!s>h)>iZqr)*or{?oRg?X)PAl@W@DUDf+>^d%m03 zHx6ka#O&h0;C$=L@+Jpg(x{G5$Bh{2|@@Y6rKWNB^V9Z+ZbqJ^7FK0B6hA2&}CK5)9t}&0lM- zYg=k(l4pkoNbX^FgcuJ8)+dwnikUme${%i!7MW+c%w7lh=SEZ%Jx1bZi+s`x0|AF-tk;}mc zS#JTNxS4u_=Fx`y>V#!>@`pWv$qu2m!p5XOTs0lVE=jQ{y(r+Vv_=lFWxc2q_q9x+s3kYrQ{<0Eh0iKVStV6 zE?!v#VQ!|T1P7z(s!{W9z{Od?@1M#aSp+U}OLY>1?W-Pha*b4o z`rpe1+74QxsZ`c-7nYX%w%Rs55qX%?QvKYUj=C+wo}zP7cb=RzIx53tgUqIepTbre zDiTpbh*^W+-XM>j4FGbqHtkB7fz1l@#JpSOrfMz@uVtrka8P?w5UI-7RNeX;ju~o+ zH%INLREa(@ytc!gpjl|R%J`kkCBGe^d#U94n7t2$(pXETP9GknJ)ICrz@)xp46~X^ z&z^mo!vn`PLaTJaWJ(tq>h0|Ghn*?0&syQ004N6+ON^k{>YzB4tp_Lm7ME0mp~P!1 zwN`=@`KT=`3{e{(hGb6=gC00?>Vyu$VTDpA8A2a_HR@lJcj|M2_fAIYJcSBe_uQs7 z2ZwiyPlO~6!j!$}6lD;|dIi{%O2(&;UBYE{nvn+}4vfnDEcmRDwzMKv$S@U~aJ>b5 zBx&0V0zmiX|w;1bTTXlj~iC25oYYb=zI^EBkRzmY z^Fp?BC!cjLpKf?L=?ODd&5#zbQ?ru>@`=6qn1YmL@ED5-upg96D31#STU{$ zNE9j*QiaK%udNkEvO`4Po;BuDS=cH+&b-a`C7@zzu!(?awL>ov;!+^=$2vH^TmBmR z<~xu=7*NKz{c0X1m*-%kdl87ew3GS!4|gt8MQdQbP0F*;wX5C>+Lgqb$#upeOo2P} zC}C@EDhI}m@N>Tc!`r8FUAvKtL|-)Y9G$ut;UDl*VX(IWBkrsA2zR3s***=15NjLi zyO$h*R!%ZAcGtvqraGjmp87smX=6+`hS!bqOqwmBR^Q8M!lEnen>WhNzPaAbL~eAV zqX8PFwF{WSh&8X!cjl$hV_7C_ksL}%=QWGx66fo`a}?QmMgQRXOaH_Mjz_5*n|`r(#fk{r`HJc;t4v@%(D(Ix1SH4qWTfx#P z{K{_*w@xFLnVlU^Ly7kHPu9Hp@s$jTgrq8-@C9&@9jN7;b z>Mkgw_BkVCXnW#iA-H;}T46VRy)8Nqs(&^Eb~3g!eDpI6MqIXG;6oJ z54*F_r^YXl3|9`9c9VLQCV8Nl>J#ko3q~-qQvPi714fM^_hsbhmRGmU0>GTY#2+bF z&`9ML2D2r!Eo=&^07qs<_-QQGT;TD13PP-g*MpVYLc zYMmu9V_w@26C;ScV145&bh2qm=ZP)PWt4MIjZC> zHy!z=uuuZv=}cphcQ@o22GE^%Sjv3E!;|iMG)XM}wiF_w2q9Zo&myiW1p&36G9X6~ zq2JKZTNk8Oc#syR&GCM&J_rioHCKrx*d1<3c&zqa}b&dP!91wtSri9`3}Kltau8?pOp! zg!alYKY_y#0IQia7Dt5`=E_*^($d+JgXilEKZzM_=YSTtGuN%WXKWjZkisi>ZnyTC zW`~atTqyIHYt_R!FpVA|b|J*RTNAY&z0_Zpd^B`a|88X4x2ft>X~B4!(aG`6#u2?` z2hT{1rL+58C*_q_L>_1&|78Jp_DYkIgC5&*Kv#bzOp;g&hN*+q1-YK&DncedbxCJQ zSi@NZRos;!%ame>#HD=S1-Y9FG;PG8uUg5B=+bsT4Tf_vzO01Y++mqEx`_ZshEFM)@vT4v9FY^1 zt~mL2ExZm|?R@1W9H#83Y=hKn~(ofEVcKd)NL#YZ(VzzJuo$ZnAv>i50t6DuQ5nDXIvVfZurI8o?m0`MHh2bh0 zT?Sh==8)NpRg-E(!Q4fmXB>8!g5FA0>E-3ZZrP3?pIWFg{HZryLzFRKc~*7pDs_d#R>Gne@mfTxVbqx1EaUlPhN)`Yygr)w3otP9nS6SV_luP93JU z(!0qDT4C;WxXeY~TD?6Mp0&FXz;|l4u$rvAereQo3;0C+>eM_N#+JNo&9L+)6Cl{C z-I�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

      uQ*Vjs3fB`@U4i$t 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

      _~nE+~aS{D-%^-6lBxi1piq&>k7h(e{Q67V+-R7 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�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

      +#Yh>reK6(6QSb`l2y)1bJsIu;~WAR8_>>q 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%0A@E) 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 S)W_(Ky`_pf`Mf`WfBqjbjZ`WC From b09ca7b2af98ba5b131762ea3bc4b5e411624389 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 8 Nov 2024 20:09:08 +0100 Subject: [PATCH 32/50] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20copyright=20headers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../FriendlyFlix/App/FriendlyFlixApp.swift | 2 +- .../FriendlyFlix/App/RootView.swift | 2 +- .../Authentication/AccountScreen.swift | 2 +- .../Authentication/AuthenticationScreen.swift | 2 +- .../AuthenticationService.swift | 2 +- .../AuthenticationToolbarButton.swift | 2 +- .../Features/Details/MovieCardView.swift | 2 +- .../Features/Details/MovieDetailsView.swift | 2 +- .../Features/Home/DetailsSection.swift | 2 +- .../Features/Home/HomeScreen.swift | 2 +- .../Features/Home/MovieTeaserView.swift | 2 +- .../Features/Library/LibraryScreen.swift | 2 +- .../Features/MovieList/MovieListScreen.swift | 2 +- .../Features/Reviews/MovieReviewCard.swift | 2 +- .../Features/Reviews/StarRatingView.swift | 2 +- .../Features/Search/SearchScreen.swift | 2 +- .../FriendlyFlix/Model/Mockable.swift | 2 +- .../Model/Movie+DataConnect.swift | 2 +- .../FriendlyFlix/Model/Movie.swift | 2 +- .../Utilities/ButtonStyle+NoHighlight.swift | 2 +- .../FriendlyFlix/Utilities/Color+Hex.swift | 2 +- .../Utilities/String+Placeholder.swift | 2 +- .../String+StringInterpolation.swift | 2 +- .../Utilities/View+Extension.swift | 2 +- .../FriendlyFlix/Views/CardView.swift | 2 +- .../Views/GradienConfiguration.swift | 2 +- .../FriendlyFlix/Views/MovieListRowView.swift | 2 +- .../FriendlyFlix/Views/MovieListSection.swift | 2 +- .../FriendlyFlix/Views/MovieTileView.swift | 2 +- .../app/FriendlyFlixSDK/Package.swift | 67 +- .../app/FriendlyFlixSDK/README.md | 12 +- .../Sources/FriendlyFlixClient.swift | 99 +- .../Sources/FriendlyFlixKeys.swift | 362 +- .../Sources/FriendlyFlixOperations.swift | 4524 ++++++++++------- 34 files changed, 3202 insertions(+), 1920 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index a4f844d..b7f59ac 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift index e5d9411..4a3d33a 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/RootView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift index ae6a65e..2412352 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AccountScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index 03328e0..55a8e76 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index 63595cd..e48239c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift index b396b8d..f7bf15e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationToolbarButton.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index 0dec489..dede5e7 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift index faac4f0..198a275 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieDetailsView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift index a442733..9bf34d9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/DetailsSection.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index edce111..0fb171f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift index ea54e03..c09e500 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/MovieTeaserView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift index af9b28f..0c61581 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Library/LibraryScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift index f4b4596..573b736 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/MovieList/MovieListScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift index a688384..e8211e0 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/MovieReviewCard.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift index 682eb5d..789171e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Reviews/StarRatingView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift index 8474008..8db8e8e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Search/SearchScreen.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift index 0b4dc71..c5bca77 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Mockable.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift index ff6b48c..798faf5 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie+DataConnect.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift index 9ceff7e..81a06bd 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Model/Movie.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift index 56149f8..dbb0386 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/ButtonStyle+NoHighlight.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift index 9b5c20d..36e3804 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/Color+Hex.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift index 1c7b7af..9daeba9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+Placeholder.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift index 711140f..0bcf514 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/String+StringInterpolation.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift index d057f45..69356d8 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Utilities/View+Extension.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift index 2a1aa27..a670842 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/CardView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift index f203588..b0c025f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/GradienConfiguration.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift index 0c389ed..93e115e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListRowView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift index b065d28..a4b4921 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieListSection.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift index 36829b1..2e0b845 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Views/MovieTileView.swift @@ -1,4 +1,4 @@ -// Copyright © 2024 Google LLC. All rights reserved. +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index e0619f4..ea39816 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -1,33 +1,48 @@ // swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17), - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"] - ), - ], - dependencies: [ - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), - ], - path: "Sources" - ), - ] + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") + ], + path: "Sources" + ) + ] ) + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index fdce190..10b2114 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -366,7 +366,7 @@ DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -382,7 +382,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -398,7 +398,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -416,7 +416,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -434,7 +434,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -450,7 +450,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index a3406d9..d3a1566 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,67 +1,84 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. import Foundation import FirebaseCore import FirebaseDataConnect + + + + + + + public extension DataConnect { + static let friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect( - connectorConfig: FriendlyFlixConnector.connectorConfig, - callerSDKType: .generated - ) + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() + } public class FriendlyFlixConnector { + let dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig( - serviceId: "dataconnect", - location: "us-central1", - connector: "friendly-flix" - ) + public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + // init operations + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, - port: Int = DataConnect.EmulatorDefaults.port) { - dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) } // MARK: Operations +public let upsertUserMutation: UpsertUserMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addReviewMutation: AddReviewMutation +public let updateReviewMutation: UpdateReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let listMoviesQuery: ListMoviesQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let searchAllQuery: SearchAllQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery + - public let upsertUserMutation: UpsertUserMutation - public let addFavoritedMovieMutation: AddFavoritedMovieMutation - public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation - public let addReviewMutation: AddReviewMutation - public let updateReviewMutation: UpdateReviewMutation - public let deleteReviewMutation: DeleteReviewMutation - public let listMoviesQuery: ListMoviesQuery - public let getMovieByIdQuery: GetMovieByIdQuery - public let getActorByIdQuery: GetActorByIdQuery - public let getCurrentUserQuery: GetCurrentUserQuery - public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery - public let searchAllQuery: SearchAllQuery - public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery - public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 39d3051..59a8984 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -1,339 +1,459 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseDataConnect + + public struct ActorKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension ActorKey: Codable { +extension ActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension ActorKey: Equatable { +extension ActorKey : Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey: Hashable { +extension ActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension ActorKey: Sendable {} +extension ActorKey : Sendable {} + + public struct FavoriteMovieKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension FavoriteMovieKey: Codable { +extension FavoriteMovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension FavoriteMovieKey: Equatable { +extension FavoriteMovieKey : Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey: Hashable { +extension FavoriteMovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } -extension FavoriteMovieKey: Sendable {} +extension FavoriteMovieKey : Sendable {} + + public struct MovieActorKey { + public private(set) var movieId: UUID - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case movieId - - case actorId + + case movieId + + case actorId + } } -extension MovieActorKey: Codable { +extension MovieActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension MovieActorKey: Equatable { +extension MovieActorKey : Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey: Hashable { +extension MovieActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(actorId) + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + } } -extension MovieActorKey: Sendable {} +extension MovieActorKey : Sendable {} + + public struct MovieMetadataKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieMetadataKey: Codable { +extension MovieMetadataKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieMetadataKey: Equatable { +extension MovieMetadataKey : Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey: Hashable { +extension MovieMetadataKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension MovieMetadataKey: Sendable {} +extension MovieMetadataKey : Sendable {} + + public struct MovieKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieKey: Codable { +extension MovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieKey: Equatable { +extension MovieKey : Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey: Hashable { +extension MovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension MovieKey: Sendable {} +extension MovieKey : Sendable {} + + public struct ReviewKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension ReviewKey: Codable { +extension ReviewKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension ReviewKey: Equatable { +extension ReviewKey : Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey: Hashable { +extension ReviewKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } -extension ReviewKey: Sendable {} +extension ReviewKey : Sendable {} + + public struct UserKey { + public private(set) var id: String + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension UserKey: Codable { +extension UserKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension UserKey: Equatable { +extension UserKey : Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension UserKey: Hashable { +extension UserKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension UserKey: Sendable {} +extension UserKey : Sendable {} + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 46bc78b..d129860 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,18 +1,60 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseCore import FirebaseDataConnect + + + + + + + + + + + + + + + + + + + // MARK: Common Enums public enum OrderDirection: String, Codable, Sendable { - case ASC - case DESC -} + case ASC = "ASC" + case DESC = "DESC" + } // End enum definitions -public class UpsertUserMutation { + + + + + + + + +public class UpsertUserMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -21,70 +63,105 @@ public class UpsertUserMutation { public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - username: String + + + public var +username: String - public init(username: String) { - self.username = username + + + + + public init ( + +username: String + + + ) { + self.username = username + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.username == rhs.username + + return lhs.username == rhs.username + } - public func hash(into hasher: inout Hasher) { - hasher.combine(username) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} enum CodingKeys: String, CodingKey { + case username + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(username, forKey: .username, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - user_upsert: UserKey - } - public func ref(username: String) -> MutationRef< - UpsertUserMutation.Data, - UpsertUserMutation.Variables - > { - var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) - return ref as MutationRef + +public var +user_upsert: UserKey + } - @MainActor - public func execute(username: String) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username: username) + public func ref( + +username: String - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + - return try await ref.execute() - } + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } } -public class AddFavoritedMovieMutation { + + + + + +public class AddFavoritedMovieMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -93,77 +170,105 @@ public class AddFavoritedMovieMutation { public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - favorite_movie_upsert: FavoriteMovieKey - } - public func ref(movieId: UUID) -> MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > - } - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_upsert: FavoriteMovieKey - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedMovieMutation { + + + + + +public class DeleteFavoritedMovieMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -172,76 +277,105 @@ public class DeleteFavoritedMovieMutation { public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + - public init(movieId: UUID) { - self.movieId = movieId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - favorite_movie_delete: FavoriteMovieKey? - } - public func ref(movieId: UUID) - -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > - } - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_delete: FavoriteMovieKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class AddReviewMutation { + + + + + +public class AddReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -250,110 +384,149 @@ public class AddReviewMutation { public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_insert: ReviewKey - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_insert: ReviewKey - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return ref as MutationRef } + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + @MainActor - public func execute(movieId: UUID, + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws -> OperationResult { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class UpdateReviewMutation { +public class UpdateReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -362,111 +535,149 @@ public class UpdateReviewMutation { public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_update: ReviewKey? - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_update: ReviewKey? - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return ref as MutationRef } + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + return ref as MutationRef + } + @MainActor - public func execute(movieId: UUID, + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws - -> OperationResult { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteReviewMutation { +public class DeleteReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -475,70 +686,105 @@ public class DeleteReviewMutation { public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_delete: ReviewKey? - } - public func ref(movieId: UUID) -> MutationRef< - DeleteReviewMutation.Data, - DeleteReviewMutation.Variables - > { - var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) - return ref as MutationRef + +public var +review_delete: ReviewKey? + } - @MainActor - public func execute(movieId: UUID) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId: movieId) + public func ref( + +movieId: UUID - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + - return try await ref.execute() - } + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } } -public class ListMoviesQuery { + + + + + +public class ListMoviesQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -547,201 +793,272 @@ public class ListMoviesQuery { public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - orderByRating: OrderDirection? - - @OptionalVariable - public var - orderByReleaseYear: OrderDirection? + + @OptionalVariable + public var +orderByRating: OrderDirection? - @OptionalVariable - public var - limit: Int? + + @OptionalVariable + public var +orderByReleaseYear: OrderDirection? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - } + + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + +} enum CodingKeys: String, CodingKey { + case orderByRating - + case orderByReleaseYear - + case limit + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode( - orderByReleaseYear, - forKey: .orderByReleaseYear, - container: &container - ) + + if $orderByReleaseYear.isSet { + try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - tags: [String]? +public var +id: UUID - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +title: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case imageUrl - case releaseYear - case genre +public var +releaseYear: Int? - case rating - case tags - case description - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +tags: [String]? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } +public var +description: String? - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - ListMoviesQuery.Data, - ListMoviesQuery.Variables - > { - var variables = ListMoviesQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation } + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + @MainActor - public func execute(_ optionalVars: (@MainActor (inout ListMoviesQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() + public func execute( + + + + _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - } -} -public class GetMovieByIdQuery { + + +public class GetMovieByIdQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -750,396 +1067,580 @@ public class GetMovieByIdQuery { public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID - public init(id: UUID) { - self.id = id + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable, Sendable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } +public var +title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - } - } - public var - metadata: [MovieMetadataMetadata] +public var +imageUrl: String - public struct ActorMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +releaseYear: Int? - public var actorMainActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +genre: String? - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public var +rating: Double? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +description: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [ActorMainActors] - public struct ActorSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +tags: [String]? - public var - name: String - public var - imageUrl: String - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - return lhs.id == rhs.id - } +public struct MovieMetadataMetadata: Decodable, Sendable { + - enum CodingKeys: String, CodingKey { - case id - case name +public var +director: String? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + enum CodingKeys: String, CodingKey { + + case director + + } - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - public var - supportingActors: [ActorSupportingActors] - public struct ReviewReviews: Decodable, Sendable { - public var - id: UUID - public var - reviewText: String? - public var - reviewDate: LocalDate - public var - rating: Int? +public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +id: UUID - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +imageUrl: String - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var - user: User + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] - enum CodingKeys: String, CodingKey { - case id - case reviewText - case reviewDate - case rating - case user - } +public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +id: UUID - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +name: String - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviews: [ReviewReviews] - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +imageUrl: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] - enum CodingKeys: String, CodingKey { - case id - case title - case imageUrl - case releaseYear - case genre +public struct ReviewReviews: Decodable, Sendable { + - case rating - case description +public var +id: UUID - case tags - case metadata - case mainActors +public var +reviewText: String? - case supportingActors - case reviews - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +rating: Int? - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - mainActors = try codecHelper.decode( - [ActorMainActors].self, - forKey: .mainActors, - container: &container - ) +public var +id: String - supportingActors = try codecHelper.decode( - [ActorSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - } - } - public var - movie: Movie? - } +public var +username: String - public func ref(id: UUID) -> QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > { - var variables = GetMovieByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id: id) - - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } - let refCast = ref as! QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > - return try await refCast.execute() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + } } +public var +movie: Movie? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetActorByIdQuery{ -public class GetActorByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1148,258 +1649,383 @@ public class GetActorByIdQuery { public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + - public init(id: UUID) { - self.id = id + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Actor: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - - public var - name: String - public var - imageUrl: String - public struct MovieMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? +public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - tags: [String]? - public var - imageUrl: String +public var +id: UUID - public var movieMainActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public var +imageUrl: String - case tags - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +id: UUID - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [MovieMainActors] - public struct MovieSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +title: String - public var - title: String - public var - genre: String? - public var - tags: [String]? +public var +genre: String? - public var - imageUrl: String - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +tags: [String]? - public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case genre - case tags + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - case imageUrl - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - supportingActors: [MovieSupportingActors] +public var +id: UUID - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } +public var +title: String - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl +public var +genre: String? - case mainActors - case supportingActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +tags: [String]? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +imageUrl: String - mainActors = try codecHelper.decode( - [MovieMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [MovieSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - } - } + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - actor: Actor? + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + } +} +public var +supportingActors: [MovieSupportingActors] - public func ref(id: UUID) -> QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > { - var variables = GetActorByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id: id) - - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? - let refCast = ref as! QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetCurrentUserQuery { + + + + + +public class GetCurrentUserQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1408,334 +2034,466 @@ public class GetCurrentUserQuery { public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable, Sendable { - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String - public struct ReviewReviews: Decodable, Sendable { - public var - id: UUID - public var - rating: Int? - public var - reviewDate: LocalDate +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - reviewText: String? - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +id: String - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +username: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ReviewReviews: Decodable, Sendable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case reviewDate +public var +rating: Int? - case reviewText - case movie - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +reviewText: String? - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - reviews: [ReviewReviews] - public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - imageUrl: String +public var +id: UUID - public var - releaseYear: Int? - public var - rating: Double? - public var - description: String? +public var +title: String - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable, Sendable { - public var - director: String? + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case director - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - director = try codecHelper.decode( - String?.self, - forKey: .director, - container: &container - ) - } - } + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - public var - metadata: [MovieMetadataMetadata] + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + - case imageUrl - case releaseYear - case rating - case description +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case tags - case metadata - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +title: String - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +imageUrl: String - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +description: String? - enum CodingKeys: String, CodingKey { - case id - case username - case reviews +public var +tags: [String]? - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) +public struct MovieMetadataMetadata: Decodable, Sendable { + - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } - public var - user: User? +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + } - public func ref( - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute( - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? - let refCast = ref as! QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > - return try await refCast.execute() } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetIfFavoritedMovieQuery { + + + + + +public class GetIfFavoritedMovieQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1744,590 +2502,847 @@ public class GetIfFavoritedMovieQuery { public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct FavoriteMovie: Decodable, Sendable { - public var - movieId: UUID - enum CodingKeys: String, CodingKey { - case movieId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } - } - public var - favorite_movie: FavoriteMovie? - } +public struct FavoriteMovie: Decodable, Sendable { + - public func ref(movieId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - } +public var +movieId: UUID - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case movieId + } -} -public class SearchAllQuery { - let dataConnect: DataConnect + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } +} +public var +favorite_movie: FavoriteMovie? - public static let OperationName = "SearchAll" + } - public typealias Ref = QueryRefObservation + public func ref( + +movieId: UUID - public struct Variables: OperationVariable { - @OptionalVariable - public var - input: String? + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + - public var - minYear: Int + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } - public var - maxYear: Int + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - public var - minRating: Double - public var - maxRating: Double - public var - genre: String - public init(minYear: Int, - maxYear: Int, - minRating: Double, +public class SearchAllQuery{ - maxRating: Double, + let dataConnect: DataConnect - genre: String, + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + public static let OperationName = "SearchAll" - if let optionalVars { - optionalVars(&self) - } - } + public typealias Ref = QueryRefObservation - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(input) + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? - hasher.combine(minYear) + + + public var +minYear: Int - hasher.combine(maxYear) + + + public var +maxYear: Int - hasher.combine(minRating) + + + public var +minRating: Double - hasher.combine(maxRating) + + + public var +maxRating: Double - hasher.combine(genre) + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + enum CodingKeys: String, CodingKey { + case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct MovieMoviesMatchingTitle: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String +public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case genre - case rating - case imageUrl - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct MovieMoviesMatchingDescription: Decodable, Sendable, Hashable, Equatable, - Identifiable { - public var - id: UUID + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - title: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public static func == (lhs: MovieMoviesMatchingDescription, - rhs: MovieMoviesMatchingDescription) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +id: UUID - case title - case genre - case rating +public var +title: String - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - moviesMatchingDescription: [MovieMoviesMatchingDescription] - public struct ActorActorsMatchingName: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +imageUrl: String - public var - name: String - public var - imageUrl: String - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - id: id - ) - } + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] - public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +id: UUID - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - actorsMatchingName: [ActorActorsMatchingName] - public struct ReviewReviewsMatchingText: Decodable, Sendable { - public var - id: UUID +public var +name: String - public var - rating: Int? - public var - reviewText: String? - public var - reviewDate: LocalDate +public var +imageUrl: String - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct ReviewReviewsMatchingText: Decodable, Sendable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } +public var +id: UUID - public var - movie: Movie - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +rating: Int? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +reviewText: String? - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } - public var - user: User - enum CodingKeys: String, CodingKey { - case id - case rating +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case reviewText - case reviewDate +public var +id: UUID - case movie - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) + - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var - reviewsMatchingText: [ReviewReviewsMatchingText] + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + } +} +public var +movie: Movie - public func ref(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, - genre: String, +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchAllQuery.Data, - SearchAllQuery.Variables - > { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) - if let optionalVars { - optionalVars(&variables) - } +public var +id: String - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(minYear: Int, + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } - maxYear: Int, + - minRating: Double, + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } - maxRating: Double, + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - genre: String, + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] - _ optionalVars: (@MainActor (inout SearchAllQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) + } - if let optionalVars { - optionalVars(&variables) - } + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro - ) + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - } + @MainActor + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class ListMoviesByPartialTitleQuery { + + + + + +public class ListMoviesByPartialTitleQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2336,158 +3351,221 @@ public class ListMoviesByPartialTitleQuery { public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - searchTerm: String + + + public var +searchTerm: String - public init(searchTerm: String) { - self.searchTerm = searchTerm + + + + + public init ( + +searchTerm: String + + + ) { + self.searchTerm = searchTerm + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.searchTerm == rhs.searchTerm + + return lhs.searchTerm == rhs.searchTerm + } - public func hash(into hasher: inout Hasher) { - hasher.combine(searchTerm) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(searchTerm) + +} enum CodingKeys: String, CodingKey { + case searchTerm + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +title: String - enum CodingKeys: String, CodingKey { - case id - case title - case imageUrl +public var +imageUrl: String - case releaseYear - case genre - case rating +public var +releaseYear: Int? - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } +public var +description: String? - public var - movies: [Movie] - } - - public func ref(searchTerm: String) - -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > } - @MainActor - public func execute(searchTerm: String) async throws - -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) - - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +searchTerm: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +searchTerm: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetUserFavoriteMoviesQuery { + + + + + +public class GetUserFavoriteMoviesQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2496,168 +3574,220 @@ public class GetUserFavoriteMoviesQuery { public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable, Sendable { - public struct User: Decodable, Sendable { - public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - imageUrl: String - public var - releaseYear: Int? +public struct User: Decodable, Sendable { + - public var - rating: Double? - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case imageUrl - case releaseYear +public var +id: UUID - case rating - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +genre: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +imageUrl: String - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - enum CodingKeys: String, CodingKey { - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } +public var +description: String? - public var - user: User? - } - public func ref( - ) - -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > } - @MainActor - public func execute( - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - let refCast = ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > - return try await refCast.execute() + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + } } +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + + enum CodingKeys: String, CodingKey { + + case favoriteMovies + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + From c76186a6bfae14176d269fa335614fa806923f70 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 8 Nov 2024 20:14:34 +0100 Subject: [PATCH 33/50] Style Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../Sources/FriendlyFlixClient.swift | 86 +- .../Sources/FriendlyFlixKeys.swift | 348 +- .../Sources/FriendlyFlixOperations.swift | 4510 +++++++---------- 4 files changed, 1885 insertions(+), 3112 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index ea39816..bd7f410 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -18,31 +18,30 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") - ], - path: "Sources" - ) - ] -) + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"] + ), + ], + dependencies: [ + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), + ], + path: "Sources" + ), + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index d3a1566..7c7a7e4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -17,68 +17,64 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - public extension DataConnect { - static let friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) + let dc = DataConnect.dataConnect( + connectorConfig: FriendlyFlixConnector.connectorConfig, + callerSDKType: .generated + ) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - let dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "dataconnect", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) - + // init operations + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let upsertUserMutation: UpsertUserMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addReviewMutation: AddReviewMutation -public let updateReviewMutation: UpdateReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let listMoviesQuery: ListMoviesQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let searchAllQuery: SearchAllQuery -public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery -public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery - + public let upsertUserMutation: UpsertUserMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addReviewMutation: AddReviewMutation + public let updateReviewMutation: UpdateReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let listMoviesQuery: ListMoviesQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let searchAllQuery: SearchAllQuery + public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery + public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 59a8984..c364d01 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -16,444 +16,338 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension ActorKey : Sendable {} - - +extension ActorKey: Sendable {} public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension FavoriteMovieKey : Sendable {} - - +extension FavoriteMovieKey: Sendable {} public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } -extension MovieActorKey : Sendable {} - - +extension MovieActorKey: Sendable {} public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieMetadataKey : Sendable {} - - +extension MovieMetadataKey: Sendable {} public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieKey : Sendable {} - - +extension MovieKey: Sendable {} public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension ReviewKey : Sendable {} - - +extension ReviewKey: Sendable {} public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension UserKey : Sendable {} - - +extension UserKey: Sendable {} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index d129860..0cacb1f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -17,44 +17,16 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - - - - - - - - - - - - - // MARK: Common Enums public enum OrderDirection: String, Codable, Sendable { - case ASC = "ASC" - case DESC = "DESC" - } + case ASC + case DESC +} // End enum definitions - - - - - - - - -public class UpsertUserMutation{ - +public class UpsertUserMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -63,105 +35,70 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - + public var + username: String - - - - public init ( - -username: String - - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -170,105 +107,77 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -277,105 +186,76 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -384,149 +264,110 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_insert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_insert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class UpdateReviewMutation{ + return try await ref.execute() + } +} +public class UpdateReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -535,149 +376,111 @@ public class UpdateReviewMutation{ public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_update: ReviewKey? + } + public func ref(movieId: UUID, + rating: Int, -public var -review_update: ReviewKey? + reviewText: String) + -> MutationRef { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws + -> OperationResult { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -686,105 +489,70 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -793,272 +561,201 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -orderByRating: OrderDirection? + @OptionalVariable + public var + orderByRating: OrderDirection? - - @OptionalVariable - public var -orderByReleaseYear: OrderDirection? + @OptionalVariable + public var + orderByReleaseYear: OrderDirection? - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - -} + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case orderByRating - + case orderByReleaseYear - + case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + + if $orderByReleaseYear.isSet { + try codecHelper.encode( + orderByReleaseYear, + forKey: .orderByReleaseYear, + container: &container + ) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public var + genre: String? + public var + rating: Double? + public var + tags: [String]? -public var -title: String + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -imageUrl: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -releaseYear: Int? + case imageUrl + case releaseYear + case genre -public var -genre: String? + case rating + case tags + case description + } -public var -rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - + public var + movies: [Movie] } -} -public var -movies: [Movie] - } + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } @MainActor - public func execute( - - - - _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - + public func execute(_ optionalVars: (@MainActor (inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class GetMovieByIdQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class GetMovieByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1067,580 +764,396 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? -public var -title: String + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -imageUrl: String + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -releaseYear: Int? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -genre: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -description: String? + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [ActorMainActors] -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable, Sendable { - - - -public var -director: String? + public struct ActorSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String - + public var + imageUrl: String - - enum CodingKeys: String, CodingKey { - - case director - - } + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -id: UUID + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID -public var -name: String + public var + reviewText: String? + public var + reviewDate: LocalDate + public var + rating: Int? -public var -imageUrl: String + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var userKey: UserKey { + return UserKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case reviewText -public var -name: String + case reviewDate + case rating + case user + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] -public struct ReviewReviews: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -reviewText: String? + case imageUrl + case releaseYear + case genre -public var -reviewDate: LocalDate + case rating + case description + case tags -public var -rating: Int? + case metadata + case mainActors + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -username: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + public var + movie: Movie? } -} -public var -reviews: [ReviewReviews] + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1649,383 +1162,258 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Actor: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + tags: [String]? -public var -id: UUID + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -name: String + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -imageUrl: String + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -id: UUID + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [MovieMainActors] -public var -title: String + public struct MovieSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public var -genre: String? + public var + tags: [String]? + public var + imageUrl: String + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -tags: [String]? + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case genre - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + case tags - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + supportingActors: [MovieSupportingActors] + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -title: String + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -genre: String? + case imageUrl + case mainActors + case supportingActors + } -public var -tags: [String]? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -imageUrl: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetCurrentUserQuery{ - +public class GetCurrentUserQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2034,466 +1422,334 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String + public var + reviewDate: LocalDate + public var + reviewText: String? + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviews: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewDate -public var -reviewText: String? + case reviewText + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -id: UUID + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -title: String + public var + title: String + public var + genre: String? - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + imageUrl: String - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public var + releaseYear: Int? - + public var + rating: Double? - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + public var + description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public var + tags: [String]? - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + case title + case genre -public var -id: UUID + case imageUrl + case releaseYear + case rating -public var -title: String + case description + case tags + case metadata + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -rating: Double? + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } -public var -description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] -public var -tags: [String]? + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public struct MovieMetadataMetadata: Decodable, Sendable { - + case reviews + case favoriteMovies + } -public var -director: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - enum CodingKeys: String, CodingKey { - - case director - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - + public var + user: User? } -} -public var -metadata: [MovieMetadataMetadata] - - - public var movieKey: MovieKey { - return MovieKey( - - id: id + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - public var userKey: UserKey { - return UserKey( - - id: id + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetIfFavoritedMovieQuery{ +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2502,847 +1758,590 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct FavoriteMovie: Decodable, Sendable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable, Sendable { - - - -public var -movieId: UUID - + public var + favorite_movie: FavoriteMovie? + } - + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - enum CodingKeys: String, CodingKey { - - case movieId - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) + + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } } -public var -favorite_movie: FavoriteMovie? +public class SearchAllQuery { + let dataConnect: DataConnect + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } - public func ref( - -movieId: UUID + public static let OperationName = "SearchAll" - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - + public typealias Ref = QueryRefObservation - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? - @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double + public var + genre: String + public init(minYear: Int, -public class SearchAllQuery{ + maxYear: Int, - let dataConnect: DataConnect + minRating: Double, - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxRating: Double, - public static let OperationName = "SearchAll" + genre: String, - public typealias Ref = QueryRefObservation + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minYear: Int + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxYear: Int + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -minRating: Double + hasher.combine(minYear) - - - public var -maxRating: Double + hasher.combine(maxYear) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minRating) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct MovieMoviesMatchingTitle: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + imageUrl: String + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -genre: String? + case title + case genre + case rating -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -imageUrl: String + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] + public struct MovieMoviesMatchingDescription: Decodable, Sendable, Hashable, Equatable, + Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + rating: Double? + public var + imageUrl: String -public var -id: UUID + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -name: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -imageUrl: String + public var + actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable, Sendable { + public var + id: UUID - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var + rating: Int? - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviewsMatchingText: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewText: String? + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } -public var -reviewDate: LocalDate + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case reviewText + case reviewDate - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + case movie - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + case user + } - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviewsMatchingText: [ReviewReviewsMatchingText] + } -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public func ref(minYear: Int, + maxYear: Int, -public var -id: String + minRating: Double, + maxRating: Double, + genre: String, -public var -username: String + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) + if let optionalVars { + optionalVars(&variables) + } - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + @MainActor + public func execute(minYear: Int, - + maxYear: Int, - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + minRating: Double, - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + maxRating: Double, - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + genre: String, - } + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) - @MainActor - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } } - - - - - -public class ListMoviesByPartialTitleQuery{ - +public class ListMoviesByPartialTitleQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3351,221 +2350,158 @@ public class ListMoviesByPartialTitleQuery{ public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > public struct Variables: OperationVariable { - - - public var -searchTerm: String + public var + searchTerm: String - - - - - public init ( - -searchTerm: String - - - ) { - self.searchTerm = searchTerm - - - + public init(searchTerm: String) { + self.searchTerm = searchTerm } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.searchTerm == rhs.searchTerm - + return lhs.searchTerm == rhs.searchTerm } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(searchTerm) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(searchTerm) + } enum CodingKeys: String, CodingKey { - case searchTerm - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID - + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case imageUrl + case releaseYear -public var -releaseYear: Int? + case genre + case rating + case description + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + public func ref(searchTerm: String) + -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > } - public func ref( - -searchTerm: String - - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - @MainActor - public func execute( - -searchTerm: String - - ) async throws -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - + public func execute(searchTerm: String) async throws + -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) -public class GetUserFavoriteMoviesQuery{ + let refCast = ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > + return try await refCast.execute() + } +} +public class GetUserFavoriteMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3574,220 +2510,168 @@ public class GetUserFavoriteMoviesQuery{ public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable { + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + imageUrl: String -public struct User: Decodable, Sendable { - - - - - -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - - + public var + releaseYear: Int? + public var + rating: Double? + public var + description: String? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -title: String + case genre + case imageUrl + case releaseYear -public var -genre: String? + case rating + case description + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -releaseYear: Int? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -rating: Double? - - + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } -public var -description: String? + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movie: Movie + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] - + enum CodingKeys: String, CodingKey { + case favoriteMovies + } - - enum CodingKeys: String, CodingKey { - - case movie - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - + public var + user: User? } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - - enum CodingKeys: String, CodingKey { - - case favoriteMovies - + public func ref( + ) + -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - From b14d9926aa384c42275ce3f613708ba778e3bc6f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 8 Nov 2024 20:15:56 +0100 Subject: [PATCH 34/50] Trailing whitespaces Signed-off-by: Peter Friese --- Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 10b2114..fdce190 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -366,7 +366,7 @@ DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -382,7 +382,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -398,7 +398,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -416,7 +416,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -434,7 +434,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -450,7 +450,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` From ef9920d627ef93459d12080582fcced94725ffbe Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Sat, 9 Nov 2024 08:25:43 +0100 Subject: [PATCH 35/50] =?UTF-8?q?=F0=9F=9A=A8=20=20Let=E2=80=99s=20see=20i?= =?UTF-8?q?f=20the=20style=20check=20ignores=20this=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 67 +- .../app/FriendlyFlixSDK/README.md | 12 +- .../Sources/FriendlyFlixClient.swift | 99 +- .../Sources/FriendlyFlixKeys.swift | 362 +- .../Sources/FriendlyFlixOperations.swift | 4524 ++++++++++------- 5 files changed, 3118 insertions(+), 1946 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index bd7f410..52016e3 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -1,47 +1,34 @@ // swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17), - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"] - ), - ], - dependencies: [ - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), - ], - path: "Sources" - ), - ] + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17) + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"]), + ], + dependencies: [ + + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") + ], + path: "Sources" + ) + ] ) + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index fdce190..10b2114 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -366,7 +366,7 @@ DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -382,7 +382,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -398,7 +398,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -416,7 +416,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -434,7 +434,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -450,7 +450,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 7c7a7e4..800a4cb 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,80 +1,71 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. import Foundation import FirebaseCore import FirebaseDataConnect + + + + + + + public extension DataConnect { + static let friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect( - connectorConfig: FriendlyFlixConnector.connectorConfig, - callerSDKType: .generated - ) + let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) return FriendlyFlixConnector(dataConnect: dc) }() + } public class FriendlyFlixConnector { + let dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig( - serviceId: "dataconnect", - location: "us-central1", - connector: "friendly-flix" - ) + public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + // init operations + self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) + } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, - port: Int = DataConnect.EmulatorDefaults.port) { - dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { + self.dataConnect.useEmulator(host: host, port: port) } // MARK: Operations +public let upsertUserMutation: UpsertUserMutation +public let addFavoritedMovieMutation: AddFavoritedMovieMutation +public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation +public let addReviewMutation: AddReviewMutation +public let updateReviewMutation: UpdateReviewMutation +public let deleteReviewMutation: DeleteReviewMutation +public let listMoviesQuery: ListMoviesQuery +public let getMovieByIdQuery: GetMovieByIdQuery +public let getActorByIdQuery: GetActorByIdQuery +public let getCurrentUserQuery: GetCurrentUserQuery +public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery +public let searchAllQuery: SearchAllQuery +public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery +public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery + - public let upsertUserMutation: UpsertUserMutation - public let addFavoritedMovieMutation: AddFavoritedMovieMutation - public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation - public let addReviewMutation: AddReviewMutation - public let updateReviewMutation: UpdateReviewMutation - public let deleteReviewMutation: DeleteReviewMutation - public let listMoviesQuery: ListMoviesQuery - public let getMovieByIdQuery: GetMovieByIdQuery - public let getActorByIdQuery: GetActorByIdQuery - public let getCurrentUserQuery: GetCurrentUserQuery - public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery - public let searchAllQuery: SearchAllQuery - public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery - public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index c364d01..a331ec1 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -1,353 +1,445 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - import Foundation import FirebaseDataConnect + + public struct ActorKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension ActorKey: Codable { +extension ActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension ActorKey: Equatable { +extension ActorKey : Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey: Hashable { +extension ActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension ActorKey: Sendable {} +extension ActorKey : Sendable {} + + public struct FavoriteMovieKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension FavoriteMovieKey: Codable { +extension FavoriteMovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension FavoriteMovieKey: Equatable { +extension FavoriteMovieKey : Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey: Hashable { +extension FavoriteMovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } -extension FavoriteMovieKey: Sendable {} +extension FavoriteMovieKey : Sendable {} + + public struct MovieActorKey { + public private(set) var movieId: UUID - + public private(set) var actorId: UUID + enum CodingKeys: String, CodingKey { - case movieId - - case actorId + + case movieId + + case actorId + } } -extension MovieActorKey: Codable { +extension MovieActorKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + + + } } -extension MovieActorKey: Equatable { +extension MovieActorKey : Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { + if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey: Hashable { +extension MovieActorKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(actorId) + + hasher.combine(self.movieId) + + hasher.combine(self.actorId) + } } -extension MovieActorKey: Sendable {} +extension MovieActorKey : Sendable {} + + public struct MovieMetadataKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieMetadataKey: Codable { +extension MovieMetadataKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieMetadataKey: Equatable { +extension MovieMetadataKey : Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey: Hashable { +extension MovieMetadataKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension MovieMetadataKey: Sendable {} +extension MovieMetadataKey : Sendable {} + + public struct MovieKey { + public private(set) var id: UUID + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension MovieKey: Codable { +extension MovieKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension MovieKey: Equatable { +extension MovieKey : Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey: Hashable { +extension MovieKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension MovieKey: Sendable {} +extension MovieKey : Sendable {} + + public struct ReviewKey { + public private(set) var userId: String - + public private(set) var movieId: UUID + enum CodingKeys: String, CodingKey { - case userId - - case movieId + + case userId + + case movieId + } } -extension ReviewKey: Codable { +extension ReviewKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + + } } -extension ReviewKey: Equatable { +extension ReviewKey : Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { + if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey: Hashable { +extension ReviewKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(userId) - - hasher.combine(movieId) + + hasher.combine(self.userId) + + hasher.combine(self.movieId) + } } -extension ReviewKey: Sendable {} +extension ReviewKey : Sendable {} + + public struct UserKey { + public private(set) var id: String + enum CodingKeys: String, CodingKey { - case id + + case id + } } -extension UserKey: Codable { +extension UserKey : Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - try codecHelper.encode(id, forKey: .id, container: &container) - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + try codecHelper.encode(id, forKey: .id, container: &container) + + + } } -extension UserKey: Equatable { +extension UserKey : Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { + if lhs.id != rhs.id { return false } - + return true } } -extension UserKey: Hashable { +extension UserKey : Hashable { public func hash(into hasher: inout Hasher) { - hasher.combine(id) + + hasher.combine(self.id) + } } -extension UserKey: Sendable {} +extension UserKey : Sendable {} + + diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 0cacb1f..4c72460 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,32 +1,46 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - import Foundation import FirebaseCore import FirebaseDataConnect + + + + + + + + + + + + + + + + + + + // MARK: Common Enums public enum OrderDirection: String, Codable, Sendable { - case ASC - case DESC -} + case ASC = "ASC" + case DESC = "DESC" + } // End enum definitions -public class UpsertUserMutation { + + + + + + + + +public class UpsertUserMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -35,70 +49,105 @@ public class UpsertUserMutation { public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - username: String + + + public var +username: String - public init(username: String) { - self.username = username + + + + + public init ( + +username: String + + + ) { + self.username = username + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.username == rhs.username + + return lhs.username == rhs.username + } - public func hash(into hasher: inout Hasher) { - hasher.combine(username) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(username) + +} enum CodingKeys: String, CodingKey { + case username + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(username, forKey: .username, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - user_upsert: UserKey - } - public func ref(username: String) -> MutationRef< - UpsertUserMutation.Data, - UpsertUserMutation.Variables - > { - var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) - return ref as MutationRef + +public var +user_upsert: UserKey + } - @MainActor - public func execute(username: String) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username: username) + public func ref( + +username: String - let ref = dataConnect.mutation( - name: "UpsertUser", - variables: variables, - resultsDataType: UpsertUserMutation.Data.self - ) + ) -> MutationRef { + var variables = UpsertUserMutation.Variables(username:username) + - return try await ref.execute() - } + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +username: String + + ) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username:username) + + + let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) + + return try await ref.execute() + + } } -public class AddFavoritedMovieMutation { + + + + + +public class AddFavoritedMovieMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -107,77 +156,105 @@ public class AddFavoritedMovieMutation { public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - favorite_movie_upsert: FavoriteMovieKey - } - public func ref(movieId: UUID) -> MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - AddFavoritedMovieMutation.Data, - AddFavoritedMovieMutation.Variables - > - } - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - - let ref = dataConnect.mutation( - name: "AddFavoritedMovie", - variables: variables, - resultsDataType: AddFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_upsert: FavoriteMovieKey - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class DeleteFavoritedMovieMutation { + + + + + +public class DeleteFavoritedMovieMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -186,76 +263,105 @@ public class DeleteFavoritedMovieMutation { public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID + + + ) { + self.movieId = movieId + - public init(movieId: UUID) { - self.movieId = movieId + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - favorite_movie_delete: FavoriteMovieKey? - } - public func ref(movieId: UUID) - -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) - return ref as MutationRef< - DeleteFavoritedMovieMutation.Data, - DeleteFavoritedMovieMutation.Variables - > - } - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - - let ref = dataConnect.mutation( - name: "DeleteFavoritedMovie", - variables: variables, - resultsDataType: DeleteFavoritedMovieMutation.Data.self - ) +public var +favorite_movie_delete: FavoriteMovieKey? - return try await ref.execute() } + + public func ref( + +movieId: UUID + + ) -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) + + return try await ref.execute() + + } } -public class AddReviewMutation { + + + + + +public class AddReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -264,110 +370,149 @@ public class AddReviewMutation { public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_insert: ReviewKey - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_insert: ReviewKey - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return ref as MutationRef } + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + return ref as MutationRef + } + @MainActor - public func execute(movieId: UUID, + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws -> OperationResult { - var variables = AddReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "AddReview", - variables: variables, - resultsDataType: AddReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class UpdateReviewMutation { +public class UpdateReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -376,111 +521,149 @@ public class UpdateReviewMutation { public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID - public var - rating: Int + + + public var +rating: Int - public var - reviewText: String + + + public var +reviewText: String - public init(movieId: UUID, - rating: Int, + + + + public init ( + +movieId: UUID +, + +rating: Int +, + +reviewText: String - reviewText: String) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - } + + ) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText + - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + +} enum CodingKeys: String, CodingKey { + case movieId - + case rating - + case reviewText + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - + + + try codecHelper.encode(rating, forKey: .rating, container: &container) - + + + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_update: ReviewKey? - } - public func ref(movieId: UUID, - rating: Int, - reviewText: String) - -> MutationRef { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) +public var +review_update: ReviewKey? - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return ref as MutationRef } + public func ref( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) -> MutationRef { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + return ref as MutationRef + } + @MainActor - public func execute(movieId: UUID, + public func execute( + +movieId: UUID +, +rating: Int +, +reviewText: String + + ) async throws -> OperationResult { + var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) + + + let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) + + return try await ref.execute() + + } +} + - rating: Int, - reviewText: String) async throws - -> OperationResult { - var variables = UpdateReviewMutation.Variables( - movieId: movieId, - rating: rating, - reviewText: reviewText - ) - let ref = dataConnect.mutation( - name: "UpdateReview", - variables: variables, - resultsDataType: UpdateReviewMutation.Data.self - ) - return try await ref.execute() - } -} -public class DeleteReviewMutation { +public class DeleteReviewMutation{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -489,70 +672,105 @@ public class DeleteReviewMutation { public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public var - review_delete: ReviewKey? - } - public func ref(movieId: UUID) -> MutationRef< - DeleteReviewMutation.Data, - DeleteReviewMutation.Variables - > { - var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) - return ref as MutationRef + +public var +review_delete: ReviewKey? + } - @MainActor - public func execute(movieId: UUID) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId: movieId) + public func ref( + +movieId: UUID - let ref = dataConnect.mutation( - name: "DeleteReview", - variables: variables, - resultsDataType: DeleteReviewMutation.Data.self - ) + ) -> MutationRef { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + - return try await ref.execute() - } + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + return ref as MutationRef + } + + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId:movieId) + + + let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) + + return try await ref.execute() + + } } -public class ListMoviesQuery { + + + + + +public class ListMoviesQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -561,201 +779,272 @@ public class ListMoviesQuery { public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - @OptionalVariable - public var - orderByRating: OrderDirection? - - @OptionalVariable - public var - orderByReleaseYear: OrderDirection? + + @OptionalVariable + public var +orderByRating: OrderDirection? - @OptionalVariable - public var - limit: Int? + + @OptionalVariable + public var +orderByReleaseYear: OrderDirection? - public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { - if let optionalVars { - optionalVars(&self) - } + + @OptionalVariable + public var +limit: Int? + + + + + + public init ( + + + + _ optionalVars: ((inout Variables)->())? = nil + ) { + + + + if let optionalVars { + optionalVars(&self) + } + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - } + + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + +} enum CodingKeys: String, CodingKey { + case orderByRating - + case orderByReleaseYear - + case limit + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode( - orderByReleaseYear, - forKey: .orderByReleaseYear, - container: &container - ) + + if $orderByReleaseYear.isSet { + try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - tags: [String]? +public var +id: UUID - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +title: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case imageUrl - case releaseYear - case genre +public var +releaseYear: Int? - case rating - case tags - case description - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +tags: [String]? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } +public var +description: String? - public var - movies: [Movie] - } - public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - ListMoviesQuery.Data, - ListMoviesQuery.Variables - > { - var variables = ListMoviesQuery.Variables() + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - if let optionalVars { - optionalVars(&variables) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case tags + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation } + public func ref( + + + + _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + @MainActor - public func execute(_ optionalVars: (@MainActor (inout ListMoviesQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() + public func execute( + + + + _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - if let optionalVars { - optionalVars(&variables) - } - let ref = dataConnect.query( - name: "ListMovies", - variables: variables, - resultsDataType: ListMoviesQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - } -} -public class GetMovieByIdQuery { + + +public class GetMovieByIdQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -764,396 +1053,580 @@ public class GetMovieByIdQuery { public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID - public init(id: UUID) { - self.id = id + + + + + public init ( + +id: UUID + + + ) { + self.id = id + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable, Sendable { - public var - director: String? - enum CodingKeys: String, CodingKey { - case director - } +public var +title: String - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - } - } - public var - metadata: [MovieMetadataMetadata] +public var +imageUrl: String - public struct ActorMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - name: String - public var - imageUrl: String +public var +releaseYear: Int? - public var actorMainActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +genre: String? - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } +public var +rating: Double? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +description: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [ActorMainActors] - public struct ActorSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +tags: [String]? - public var - name: String - public var - imageUrl: String - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - return lhs.id == rhs.id - } +public struct MovieMetadataMetadata: Decodable, Sendable { + - enum CodingKeys: String, CodingKey { - case id - case name +public var +director: String? - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + enum CodingKeys: String, CodingKey { + + case director + + } - name = try codecHelper.decode(String.self, forKey: .name, container: &container) + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] - public var - supportingActors: [ActorSupportingActors] - public struct ReviewReviews: Decodable, Sendable { - public var - id: UUID - public var - reviewText: String? - public var - reviewDate: LocalDate - public var - rating: Int? +public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +id: UUID - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +imageUrl: String - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } + + public var actorMainActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var - user: User + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [ActorMainActors] - enum CodingKeys: String, CodingKey { - case id - case reviewText - case reviewDate - case rating - case user - } +public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +id: UUID - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) +public var +name: String - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } - public var - reviews: [ReviewReviews] - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } +public var +imageUrl: String - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } + + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + + id: id + ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +supportingActors: [ActorSupportingActors] - enum CodingKeys: String, CodingKey { - case id - case title - case imageUrl - case releaseYear - case genre +public struct ReviewReviews: Decodable, Sendable { + - case rating - case description +public var +id: UUID - case tags - case metadata - case mainActors +public var +reviewText: String? - case supportingActors - case reviews - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +rating: Int? - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - mainActors = try codecHelper.decode( - [ActorMainActors].self, - forKey: .mainActors, - container: &container - ) +public var +id: String - supportingActors = try codecHelper.decode( - [ActorSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) - } - } - public var - movie: Movie? - } +public var +username: String - public func ref(id: UUID) -> QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > { - var variables = GetMovieByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id: id) - - let ref = dataConnect.query( - name: "GetMovieById", - variables: variables, - resultsDataType: GetMovieByIdQuery.Data.self, - publisher: .observableMacro + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case reviewText + + case reviewDate + + case rating + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviews: [ReviewReviews] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) + } - let refCast = ref as! QueryRefObservation< - GetMovieByIdQuery.Data, - GetMovieByIdQuery.Variables - > - return try await refCast.execute() + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + case tags + + case metadata + + case mainActors + + case supportingActors + + case reviews + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + } } +public var +movie: Movie? + + } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + + + + + +public class GetActorByIdQuery{ -public class GetActorByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1162,258 +1635,383 @@ public class GetActorByIdQuery { public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - id: UUID + + + public var +id: UUID + + + + + + public init ( + +id: UUID + + + ) { + self.id = id + - public init(id: UUID) { - self.id = id + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.id == rhs.id + + return lhs.id == rhs.id + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} enum CodingKeys: String, CodingKey { + case id + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(id, forKey: .id, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Actor: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - - public var - name: String - public var - imageUrl: String - public struct MovieMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? +public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - tags: [String]? - public var - imageUrl: String +public var +id: UUID - public var movieMainActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - return lhs.id == rhs.id - } +public var +name: String - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public var +imageUrl: String - case tags - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +id: UUID - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - mainActors: [MovieMainActors] - public struct MovieSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +title: String - public var - title: String - public var - genre: String? - public var - tags: [String]? +public var +genre: String? - public var - imageUrl: String - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +tags: [String]? - public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +imageUrl: String - case genre - case tags + + public var movieMainActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - case imageUrl - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +mainActors: [MovieMainActors] - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - supportingActors: [MovieSupportingActors] +public var +id: UUID - public var actorKey: ActorKey { - return ActorKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Actor, rhs: Actor) -> Bool { - return lhs.id == rhs.id - } +public var +title: String - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl +public var +genre: String? - case mainActors - case supportingActors - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +tags: [String]? - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) +public var +imageUrl: String - mainActors = try codecHelper.decode( - [MovieMainActors].self, - forKey: .mainActors, - container: &container - ) - supportingActors = try codecHelper.decode( - [MovieSupportingActors].self, - forKey: .supportingActors, - container: &container - ) - } - } + + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - actor: Actor? + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case tags + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + } +} +public var +supportingActors: [MovieSupportingActors] - public func ref(id: UUID) -> QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > { - var variables = GetActorByIdQuery.Variables(id: id) - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro + + public var actorKey: ActorKey { + return ActorKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(id: UUID) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id: id) - - let ref = dataConnect.query( - name: "GetActorById", - variables: variables, - resultsDataType: GetActorByIdQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Actor, rhs: Actor) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + case mainActors + + case supportingActors + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) + + + self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) + + + } +} +public var +actor: Actor? - let refCast = ref as! QueryRefObservation< - GetActorByIdQuery.Data, - GetActorByIdQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +id: UUID + + ) -> QueryRefObservation { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +id: UUID + + ) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id:id) + + + let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetCurrentUserQuery { + + + + + +public class GetCurrentUserQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1422,334 +2020,466 @@ public class GetCurrentUserQuery { public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable, Sendable { - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String - public struct ReviewReviews: Decodable, Sendable { - public var - id: UUID - public var - rating: Int? - public var - reviewDate: LocalDate +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - reviewText: String? - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +id: String - public var - title: String - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +username: String - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public struct ReviewReviews: Decodable, Sendable { + - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } - public var - movie: Movie +public var +id: UUID - enum CodingKeys: String, CodingKey { - case id - case rating - case reviewDate +public var +rating: Int? - case reviewText - case movie - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) +public var +reviewText: String? - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - reviews: [ReviewReviews] - public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - genre: String? - public var - imageUrl: String +public var +id: UUID - public var - releaseYear: Int? - public var - rating: Double? - public var - description: String? +public var +title: String - public var - tags: [String]? - public struct MovieMetadataMetadata: Decodable, Sendable { - public var - director: String? + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - enum CodingKeys: String, CodingKey { - case director - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + - director = try codecHelper.decode( - String?.self, - forKey: .director, - container: &container - ) - } - } + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - public var - metadata: [MovieMetadataMetadata] + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewDate + + case reviewText + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +reviews: [ReviewReviews] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + - case imageUrl - case releaseYear - case rating - case description +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case tags - case metadata - } +public var +id: UUID - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +title: String - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) +public var +genre: String? - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) +public var +imageUrl: String - metadata = try codecHelper.decode( - [MovieMetadataMetadata].self, - forKey: .metadata, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +description: String? - enum CodingKeys: String, CodingKey { - case id - case username - case reviews +public var +tags: [String]? - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - reviews = try codecHelper.decode( - [ReviewReviews].self, - forKey: .reviews, - container: &container - ) +public struct MovieMetadataMetadata: Decodable, Sendable { + - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } - public var - user: User? +public var +director: String? + + + + + + enum CodingKeys: String, CodingKey { + + case director + } - public func ref( - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + + + } +} +public var +metadata: [MovieMetadataMetadata] + + + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute( - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - let ref = dataConnect.query( - name: "GetCurrentUser", - variables: variables, - resultsDataType: GetCurrentUserQuery.Data.self, - publisher: .observableMacro + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + case tags + + case metadata + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + + + self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + } +} +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + public var userKey: UserKey { + return UserKey( + + id: id ) + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case username + + case reviews + + case favoriteMovies + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? - let refCast = ref as! QueryRefObservation< - GetCurrentUserQuery.Data, - GetCurrentUserQuery.Variables - > - return try await refCast.execute() } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + + let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetIfFavoritedMovieQuery { + + + + + +public class GetIfFavoritedMovieQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1758,590 +2488,847 @@ public class GetIfFavoritedMovieQuery { public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - movieId: UUID + + + public var +movieId: UUID + + + + + + public init ( + +movieId: UUID - public init(movieId: UUID) { - self.movieId = movieId + + ) { + self.movieId = movieId + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.movieId == rhs.movieId + + return lhs.movieId == rhs.movieId + } - public func hash(into hasher: inout Hasher) { - hasher.combine(movieId) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(movieId) + +} enum CodingKeys: String, CodingKey { + case movieId + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct FavoriteMovie: Decodable, Sendable { - public var - movieId: UUID - enum CodingKeys: String, CodingKey { - case movieId - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - } - } - public var - favorite_movie: FavoriteMovie? - } +public struct FavoriteMovie: Decodable, Sendable { + - public func ref(movieId: UUID) - -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - return ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - } +public var +movieId: UUID - @MainActor - public func execute(movieId: UUID) async throws - -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - let ref = dataConnect.query( - name: "GetIfFavoritedMovie", - variables: variables, - resultsDataType: GetIfFavoritedMovieQuery.Data.self, - publisher: .observableMacro - ) - let refCast = ref as! QueryRefObservation< - GetIfFavoritedMovieQuery.Data, - GetIfFavoritedMovieQuery.Variables - > - return try await refCast.execute() + + + + enum CodingKeys: String, CodingKey { + + case movieId + } -} -public class SearchAllQuery { - let dataConnect: DataConnect + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect + + + self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + } +} +public var +favorite_movie: FavoriteMovie? - public static let OperationName = "SearchAll" + } - public typealias Ref = QueryRefObservation + public func ref( + +movieId: UUID - public struct Variables: OperationVariable { - @OptionalVariable - public var - input: String? + ) -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + - public var - minYear: Int + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } - public var - maxYear: Int + @MainActor + public func execute( + +movieId: UUID + + ) async throws -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) + + + let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} - public var - minRating: Double - public var - maxRating: Double - public var - genre: String - public init(minYear: Int, - maxYear: Int, - minRating: Double, +public class SearchAllQuery{ - maxRating: Double, + let dataConnect: DataConnect - genre: String, + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect + } - _ optionalVars: ((inout Variables) -> Void)? = nil) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre + public static let OperationName = "SearchAll" - if let optionalVars { - optionalVars(&self) - } - } + public typealias Ref = QueryRefObservation - public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(input) + public struct Variables: OperationVariable { + + @OptionalVariable + public var +input: String? - hasher.combine(minYear) + + + public var +minYear: Int - hasher.combine(maxYear) + + + public var +maxYear: Int - hasher.combine(minRating) + + + public var +minRating: Double - hasher.combine(maxRating) + + + public var +maxRating: Double - hasher.combine(genre) + + + public var +genre: String + + + + + + public init ( + +minYear: Int +, + +maxYear: Int +, + +minRating: Double +, + +maxRating: Double +, + +genre: String + + + + , + _ optionalVars: ((inout Variables)->())? = nil + ) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre + + + + if let optionalVars { + optionalVars(&self) + } + } + public static func == (lhs: Variables, rhs: Variables) -> Bool { + + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + + } + + +public func hash(into hasher: inout Hasher) { + + hasher.combine(input) + + hasher.combine(minYear) + + hasher.combine(maxYear) + + hasher.combine(minRating) + + hasher.combine(maxRating) + + hasher.combine(genre) + +} + enum CodingKeys: String, CodingKey { + case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - + + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - + + + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - + + + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - + + + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - + + + try codecHelper.encode(genre, forKey: .genre, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct MovieMoviesMatchingTitle: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String +public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public var +id: UUID - public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title +public var +title: String - case genre - case rating - case imageUrl - } +public var +genre: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } +public var +imageUrl: String - public var - moviesMatchingTitle: [MovieMoviesMatchingTitle] - public struct MovieMoviesMatchingDescription: Decodable, Sendable, Hashable, Equatable, - Identifiable { - public var - id: UUID + + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + + id: id + ) + } - public var - title: String + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingTitle: [MovieMoviesMatchingTitle] - public var - genre: String? - public var - rating: Double? - public var - imageUrl: String - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public static func == (lhs: MovieMoviesMatchingDescription, - rhs: MovieMoviesMatchingDescription) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id +public var +id: UUID - case title - case genre - case rating +public var +title: String - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +rating: Double? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - moviesMatchingDescription: [MovieMoviesMatchingDescription] - public struct ActorActorsMatchingName: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID +public var +imageUrl: String - public var - name: String - public var - imageUrl: String - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - id: id - ) - } + + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + + id: id + ) + } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case rating + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +moviesMatchingDescription: [MovieMoviesMatchingDescription] - public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case name - case imageUrl - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - name = try codecHelper.decode(String.self, forKey: .name, container: &container) +public var +id: UUID - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - } - } - public var - actorsMatchingName: [ActorActorsMatchingName] - public struct ReviewReviewsMatchingText: Decodable, Sendable { - public var - id: UUID +public var +name: String - public var - rating: Int? - public var - reviewText: String? - public var - reviewDate: LocalDate +public var +imageUrl: String - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String + + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + + id: id + ) + } - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case name + + case imageUrl + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + } +} +public var +actorsMatchingName: [ActorActorsMatchingName] - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public struct ReviewReviewsMatchingText: Decodable, Sendable { + - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - } - } +public var +id: UUID - public var - movie: Movie - public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: String - public var - username: String +public var +rating: Int? - public var userKey: UserKey { - return UserKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: User, rhs: User) -> Bool { - return lhs.id == rhs.id - } +public var +reviewText: String? - enum CodingKeys: String, CodingKey { - case id - case username - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +reviewDate: LocalDate - id = try codecHelper.decode(String.self, forKey: .id, container: &container) - username = try codecHelper.decode(String.self, forKey: .username, container: &container) - } - } - public var - user: User - enum CodingKeys: String, CodingKey { - case id - case rating +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case reviewText - case reviewDate +public var +id: UUID - case movie - case user - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + public var movieKey: MovieKey { + return MovieKey( + + id: id + ) + } - reviewText = try codecHelper.decode( - String?.self, - forKey: .reviewText, - container: &container - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } - reviewDate = try codecHelper.decode( - LocalDate.self, - forKey: .reviewDate, - container: &container - ) + - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + enum CodingKeys: String, CodingKey { + + case id + + case title + + } - user = try codecHelper.decode(User.self, forKey: .user, container: &container) - } - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public var - reviewsMatchingText: [ReviewReviewsMatchingText] + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + } +} +public var +movie: Movie - public func ref(minYear: Int, - maxYear: Int, - minRating: Double, - maxRating: Double, - genre: String, +public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) - -> QueryRefObservation< - SearchAllQuery.Data, - SearchAllQuery.Variables - > { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) - if let optionalVars { - optionalVars(&variables) - } +public var +id: String - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro + + +public var +username: String + + + + public var userKey: UserKey { + return UserKey( + + id: id ) - return ref as! QueryRefObservation } - @MainActor - public func execute(minYear: Int, + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: User, rhs: User) -> Bool { + + return lhs.id == rhs.id + + } - maxYear: Int, + - minRating: Double, + + enum CodingKeys: String, CodingKey { + + case id + + case username + + } - maxRating: Double, + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - genre: String, + + + self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) + + + + self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) + + + } +} +public var +user: User + + + + + + enum CodingKeys: String, CodingKey { + + case id + + case rating + + case reviewText + + case reviewDate + + case movie + + case user + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + + + + self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) + + + + self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) + + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + + + self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) + + + } +} +public var +reviewsMatchingText: [ReviewReviewsMatchingText] - _ optionalVars: (@MainActor (inout SearchAllQuery.Variables) -> Void)? = - nil) async throws -> OperationResult { - var variables = SearchAllQuery.Variables( - minYear: minYear, - maxYear: maxYear, - minRating: minRating, - maxRating: maxRating, - genre: genre - ) + } - if let optionalVars { - optionalVars(&variables) - } + public func ref( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil + ) -> QueryRefObservation { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + - let ref = dataConnect.query( - name: "SearchAll", - variables: variables, - resultsDataType: SearchAllQuery.Data.self, - publisher: .observableMacro - ) + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - } + @MainActor + public func execute( + +minYear: Int +, +maxYear: Int +, +minRating: Double +, +maxRating: Double +, +genre: String + + + , + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil + ) async throws -> OperationResult { + var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) + + if let optionalVars { + optionalVars(&variables) + } + + + let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class ListMoviesByPartialTitleQuery { + + + + + +public class ListMoviesByPartialTitleQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2350,158 +3337,221 @@ public class ListMoviesByPartialTitleQuery { public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - public var - searchTerm: String + + + public var +searchTerm: String - public init(searchTerm: String) { - self.searchTerm = searchTerm + + + + + public init ( + +searchTerm: String + + + ) { + self.searchTerm = searchTerm + + + } public static func == (lhs: Variables, rhs: Variables) -> Bool { - return lhs.searchTerm == rhs.searchTerm + + return lhs.searchTerm == rhs.searchTerm + } - public func hash(into hasher: inout Hasher) { - hasher.combine(searchTerm) - } + +public func hash(into hasher: inout Hasher) { + + hasher.combine(searchTerm) + +} enum CodingKeys: String, CodingKey { + case searchTerm + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - + + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) + + } + } public struct Data: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - imageUrl: String - public var - releaseYear: Int? - public var - genre: String? +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - public var - rating: Double? - public var - description: String? +public var +id: UUID - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } +public var +title: String - enum CodingKeys: String, CodingKey { - case id - case title - case imageUrl +public var +imageUrl: String - case releaseYear - case genre - case rating +public var +releaseYear: Int? - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) +public var +genre: String? - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) +public var +rating: Double? - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } +public var +description: String? - public var - movies: [Movie] - } - - public func ref(searchTerm: String) - -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > } - @MainActor - public func execute(searchTerm: String) async throws - -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) - - let ref = dataConnect.query( - name: "ListMoviesByPartialTitle", - variables: variables, - resultsDataType: ListMoviesByPartialTitleQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case imageUrl + + case releaseYear + + case genre + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movies: [Movie] - let refCast = ref as! QueryRefObservation< - ListMoviesByPartialTitleQuery.Data, - ListMoviesByPartialTitleQuery.Variables - > - return try await refCast.execute() } + + public func ref( + +searchTerm: String + + ) -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + +searchTerm: String + + ) async throws -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) + + + let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } } -public class GetUserFavoriteMoviesQuery { + + + + + +public class GetUserFavoriteMoviesQuery{ + let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2510,168 +3560,220 @@ public class GetUserFavoriteMoviesQuery { public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > + public typealias Ref = QueryRefObservation - public struct Variables: OperationVariable {} + public struct Variables: OperationVariable { + + + + } public struct Data: Decodable, Sendable { - public struct User: Decodable, Sendable { - public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { - public var - id: UUID - public var - title: String - public var - genre: String? - public var - imageUrl: String - public var - releaseYear: Int? +public struct User: Decodable, Sendable { + - public var - rating: Double? - public var - description: String? - public var movieKey: MovieKey { - return MovieKey( - id: id - ) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } +public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + - public static func == (lhs: Movie, rhs: Movie) -> Bool { - return lhs.id == rhs.id - } - enum CodingKeys: String, CodingKey { - case id - case title - case genre +public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { + - case imageUrl - case releaseYear +public var +id: UUID - case rating - case description - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() +public var +title: String - id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - title = try codecHelper.decode(String.self, forKey: .title, container: &container) - genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) +public var +genre: String? - imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - releaseYear = try codecHelper.decode( - Int?.self, - forKey: .releaseYear, - container: &container - ) - rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) +public var +imageUrl: String - description = try codecHelper.decode( - String?.self, - forKey: .description, - container: &container - ) - } - } - public var - movie: Movie - enum CodingKeys: String, CodingKey { - case movie - } +public var +releaseYear: Int? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - } - } - public var - favoriteMovies: [FavoriteMovieFavoriteMovies] +public var +rating: Double? - enum CodingKeys: String, CodingKey { - case favoriteMovies - } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - favoriteMovies = try codecHelper.decode( - [FavoriteMovieFavoriteMovies].self, - forKey: .favoriteMovies, - container: &container - ) - } - } +public var +description: String? - public var - user: User? - } - public func ref( - ) - -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro + + public var movieKey: MovieKey { + return MovieKey( + + id: id ) - return ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > } - @MainActor - public func execute( - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - let ref = dataConnect.query( - name: "GetUserFavoriteMovies", - variables: variables, - resultsDataType: GetUserFavoriteMoviesQuery.Data.self, - publisher: .observableMacro - ) + +public func hash(into hasher: inout Hasher) { + + hasher.combine(id) + +} +public static func == (lhs: Movie, rhs: Movie) -> Bool { + + return lhs.id == rhs.id + + } + + + + + enum CodingKeys: String, CodingKey { + + case id + + case title + + case genre + + case imageUrl + + case releaseYear + + case rating + + case description + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + + self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + + + + self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) + + + + self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + + + + self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + + + + self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + + + + self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + + + + self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) + + + } +} +public var +movie: Movie + + + + + + enum CodingKeys: String, CodingKey { + + case movie + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - let refCast = ref as! QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > - return try await refCast.execute() + + + self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + + } } +public var +favoriteMovies: [FavoriteMovieFavoriteMovies] + + + + + + enum CodingKeys: String, CodingKey { + + case favoriteMovies + + } + + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + + self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) + + + } +} +public var +user: User? + + } + + public func ref( + + ) -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + return ref as! QueryRefObservation + } + + @MainActor + public func execute( + + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + + let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) + + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + + } +} + + From 41493e5b1b21b1070e57c19c3931fb75960ba34f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Sat, 9 Nov 2024 08:32:47 +0100 Subject: [PATCH 36/50] Formatting Signed-off-by: Peter Friese --- .../app/FriendlyFlixSDK/Package.swift | 53 +- .../app/FriendlyFlixSDK/README.md | 12 +- .../Sources/FriendlyFlixClient.swift | 86 +- .../Sources/FriendlyFlixKeys.swift | 348 +- .../Sources/FriendlyFlixOperations.swift | 4510 +++++++---------- 5 files changed, 1891 insertions(+), 3118 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index 52016e3..e0619f4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -4,31 +4,30 @@ import PackageDescription let package = Package( - name: "FriendlyFlixSDK", - platforms: [ - .iOS(.v17), - .macOS(.v14), - .watchOS(.v10), - .tvOS(.v17) - ], - products: [ - .library( - name: "FriendlyFlixSDK", - targets: ["FriendlyFlixSDK"]), - ], - dependencies: [ - - .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), - - ], - targets: [ - .target( - name: "FriendlyFlixSDK", - dependencies: [ - .product(name:"FirebaseDataConnect", package:"data-connect-ios-sdk") - ], - path: "Sources" - ) - ] -) + name: "FriendlyFlixSDK", + platforms: [ + .iOS(.v17), + .macOS(.v14), + .watchOS(.v10), + .tvOS(.v17), + ], + products: [ + .library( + name: "FriendlyFlixSDK", + targets: ["FriendlyFlixSDK"] + ), + ], + dependencies: [ + .package(url: "https://github.com/firebase/data-connect-ios-sdk", from: "11.3.0-beta"), + ], + targets: [ + .target( + name: "FriendlyFlixSDK", + dependencies: [ + .product(name: "FirebaseDataConnect", package: "data-connect-ios-sdk"), + ], + path: "Sources" + ), + ] +) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md index 10b2114..fdce190 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/README.md @@ -366,7 +366,7 @@ DataConnect.friendlyFlixConnector.getUserFavoriteMoviesQuery.execute(...) let username: String = ... ``` - + ### One-shot execute ``` @@ -382,7 +382,7 @@ DataConnect.friendlyFlixConnector.upsertUserMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -398,7 +398,7 @@ DataConnect.friendlyFlixConnector.addFavoritedMovieMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` @@ -416,7 +416,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -434,7 +434,7 @@ let movieId: UUID = ... let rating: Int = ... let reviewText: String = ... ``` - + ### One-shot execute ``` @@ -450,7 +450,7 @@ DataConnect.friendlyFlixConnector.updateReviewMutation.execute(...) let movieId: UUID = ... ``` - + ### One-shot execute ``` diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index 800a4cb..a3406d9 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -4,68 +4,64 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - public extension DataConnect { - static let friendlyFlixConnector: FriendlyFlixConnector = { - let dc = DataConnect.dataConnect(connectorConfig: FriendlyFlixConnector.connectorConfig, callerSDKType: .generated) + let dc = DataConnect.dataConnect( + connectorConfig: FriendlyFlixConnector.connectorConfig, + callerSDKType: .generated + ) return FriendlyFlixConnector(dataConnect: dc) }() - } public class FriendlyFlixConnector { - let dataConnect: DataConnect - public static let connectorConfig = ConnectorConfig(serviceId: "dataconnect", location: "us-central1", connector: "friendly-flix") + public static let connectorConfig = ConnectorConfig( + serviceId: "dataconnect", + location: "us-central1", + connector: "friendly-flix" + ) init(dataConnect: DataConnect) { self.dataConnect = dataConnect - // init operations - self.upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) - self.addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) - self.deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) - self.addReviewMutation = AddReviewMutation(dataConnect: dataConnect) - self.updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) - self.deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) - self.listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) - self.getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) - self.getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) - self.getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) - self.getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) - self.searchAllQuery = SearchAllQuery(dataConnect: dataConnect) - self.listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) - self.getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) - + // init operations + upsertUserMutation = UpsertUserMutation(dataConnect: dataConnect) + addFavoritedMovieMutation = AddFavoritedMovieMutation(dataConnect: dataConnect) + deleteFavoritedMovieMutation = DeleteFavoritedMovieMutation(dataConnect: dataConnect) + addReviewMutation = AddReviewMutation(dataConnect: dataConnect) + updateReviewMutation = UpdateReviewMutation(dataConnect: dataConnect) + deleteReviewMutation = DeleteReviewMutation(dataConnect: dataConnect) + listMoviesQuery = ListMoviesQuery(dataConnect: dataConnect) + getMovieByIdQuery = GetMovieByIdQuery(dataConnect: dataConnect) + getActorByIdQuery = GetActorByIdQuery(dataConnect: dataConnect) + getCurrentUserQuery = GetCurrentUserQuery(dataConnect: dataConnect) + getIfFavoritedMovieQuery = GetIfFavoritedMovieQuery(dataConnect: dataConnect) + searchAllQuery = SearchAllQuery(dataConnect: dataConnect) + listMoviesByPartialTitleQuery = ListMoviesByPartialTitleQuery(dataConnect: dataConnect) + getUserFavoriteMoviesQuery = GetUserFavoriteMoviesQuery(dataConnect: dataConnect) } - public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, port: Int = DataConnect.EmulatorDefaults.port) { - self.dataConnect.useEmulator(host: host, port: port) + public func useEmulator(host: String = DataConnect.EmulatorDefaults.host, + port: Int = DataConnect.EmulatorDefaults.port) { + dataConnect.useEmulator(host: host, port: port) } // MARK: Operations -public let upsertUserMutation: UpsertUserMutation -public let addFavoritedMovieMutation: AddFavoritedMovieMutation -public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation -public let addReviewMutation: AddReviewMutation -public let updateReviewMutation: UpdateReviewMutation -public let deleteReviewMutation: DeleteReviewMutation -public let listMoviesQuery: ListMoviesQuery -public let getMovieByIdQuery: GetMovieByIdQuery -public let getActorByIdQuery: GetActorByIdQuery -public let getCurrentUserQuery: GetCurrentUserQuery -public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery -public let searchAllQuery: SearchAllQuery -public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery -public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery - + public let upsertUserMutation: UpsertUserMutation + public let addFavoritedMovieMutation: AddFavoritedMovieMutation + public let deleteFavoritedMovieMutation: DeleteFavoritedMovieMutation + public let addReviewMutation: AddReviewMutation + public let updateReviewMutation: UpdateReviewMutation + public let deleteReviewMutation: DeleteReviewMutation + public let listMoviesQuery: ListMoviesQuery + public let getMovieByIdQuery: GetMovieByIdQuery + public let getActorByIdQuery: GetActorByIdQuery + public let getCurrentUserQuery: GetCurrentUserQuery + public let getIfFavoritedMovieQuery: GetIfFavoritedMovieQuery + public let searchAllQuery: SearchAllQuery + public let listMoviesByPartialTitleQuery: ListMoviesByPartialTitleQuery + public let getUserFavoriteMoviesQuery: GetUserFavoriteMoviesQuery } diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index a331ec1..39d3051 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -2,444 +2,338 @@ import Foundation import FirebaseDataConnect - - public struct ActorKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension ActorKey : Codable { +extension ActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension ActorKey : Equatable { +extension ActorKey: Equatable { public static func == (lhs: ActorKey, rhs: ActorKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension ActorKey : Hashable { +extension ActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension ActorKey : Sendable {} - - +extension ActorKey: Sendable {} public struct FavoriteMovieKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension FavoriteMovieKey : Codable { +extension FavoriteMovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension FavoriteMovieKey : Equatable { +extension FavoriteMovieKey: Equatable { public static func == (lhs: FavoriteMovieKey, rhs: FavoriteMovieKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension FavoriteMovieKey : Hashable { +extension FavoriteMovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension FavoriteMovieKey : Sendable {} - - +extension FavoriteMovieKey: Sendable {} public struct MovieActorKey { - public private(set) var movieId: UUID - + public private(set) var actorId: UUID - enum CodingKeys: String, CodingKey { - - case movieId - - case actorId - + case movieId + + case actorId } } -extension MovieActorKey : Codable { +extension MovieActorKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - self.actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) - + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + + actorId = try codecHelper.decode(UUID.self, forKey: .actorId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - - try codecHelper.encode(actorId, forKey: .actorId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + + try codecHelper.encode(actorId, forKey: .actorId, container: &container) + } } -extension MovieActorKey : Equatable { +extension MovieActorKey: Equatable { public static func == (lhs: MovieActorKey, rhs: MovieActorKey) -> Bool { - if lhs.movieId != rhs.movieId { return false } - + if lhs.actorId != rhs.actorId { return false } - + return true } } -extension MovieActorKey : Hashable { +extension MovieActorKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.movieId) - - hasher.combine(self.actorId) - + hasher.combine(movieId) + + hasher.combine(actorId) } } -extension MovieActorKey : Sendable {} - - +extension MovieActorKey: Sendable {} public struct MovieMetadataKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieMetadataKey : Codable { +extension MovieMetadataKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieMetadataKey : Equatable { +extension MovieMetadataKey: Equatable { public static func == (lhs: MovieMetadataKey, rhs: MovieMetadataKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieMetadataKey : Hashable { +extension MovieMetadataKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieMetadataKey : Sendable {} - - +extension MovieMetadataKey: Sendable {} public struct MovieKey { - public private(set) var id: UUID - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension MovieKey : Codable { +extension MovieKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension MovieKey : Equatable { +extension MovieKey: Equatable { public static func == (lhs: MovieKey, rhs: MovieKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension MovieKey : Hashable { +extension MovieKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension MovieKey : Sendable {} - - +extension MovieKey: Sendable {} public struct ReviewKey { - public private(set) var userId: String - + public private(set) var movieId: UUID - enum CodingKeys: String, CodingKey { - - case userId - - case movieId - + case userId + + case movieId } } -extension ReviewKey : Codable { +extension ReviewKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - + userId = try codecHelper.decode(String.self, forKey: .userId, container: &container) + + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(userId, forKey: .userId, container: &container) - - - - try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(userId, forKey: .userId, container: &container) + + try codecHelper.encode(movieId, forKey: .movieId, container: &container) + } } -extension ReviewKey : Equatable { +extension ReviewKey: Equatable { public static func == (lhs: ReviewKey, rhs: ReviewKey) -> Bool { - if lhs.userId != rhs.userId { return false } - + if lhs.movieId != rhs.movieId { return false } - + return true } } -extension ReviewKey : Hashable { +extension ReviewKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.userId) - - hasher.combine(self.movieId) - + hasher.combine(userId) + + hasher.combine(movieId) } } -extension ReviewKey : Sendable {} - - +extension ReviewKey: Sendable {} public struct UserKey { - public private(set) var id: String - enum CodingKeys: String, CodingKey { - - case id - + case id } } -extension UserKey : Codable { +extension UserKey: Codable { public init(from decoder: any Decoder) throws { var container = try decoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) } public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - try codecHelper.encode(id, forKey: .id, container: &container) - - - } + var container = encoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + + try codecHelper.encode(id, forKey: .id, container: &container) + } } -extension UserKey : Equatable { +extension UserKey: Equatable { public static func == (lhs: UserKey, rhs: UserKey) -> Bool { - if lhs.id != rhs.id { return false } - + return true } } -extension UserKey : Hashable { +extension UserKey: Hashable { public func hash(into hasher: inout Hasher) { - - hasher.combine(self.id) - + hasher.combine(id) } } -extension UserKey : Sendable {} - - +extension UserKey: Sendable {} diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 4c72460..46bc78b 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -3,44 +3,16 @@ import Foundation import FirebaseCore import FirebaseDataConnect - - - - - - - - - - - - - - - - - - - // MARK: Common Enums public enum OrderDirection: String, Codable, Sendable { - case ASC = "ASC" - case DESC = "DESC" - } + case ASC + case DESC +} // End enum definitions - - - - - - - - -public class UpsertUserMutation{ - +public class UpsertUserMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -49,105 +21,70 @@ public class UpsertUserMutation{ public static let OperationName = "UpsertUser" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -username: String - + public var + username: String - - - - public init ( - -username: String - - - ) { - self.username = username - - - + public init(username: String) { + self.username = username } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.username == rhs.username - + return lhs.username == rhs.username } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(username) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(username) + } enum CodingKeys: String, CodingKey { - case username - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(username, forKey: .username, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -user_upsert: UserKey - + public var + user_upsert: UserKey } - public func ref( - -username: String - - ) -> MutationRef { - var variables = UpsertUserMutation.Variables(username:username) - + public func ref(username: String) -> MutationRef< + UpsertUserMutation.Data, + UpsertUserMutation.Variables + > { + var variables = UpsertUserMutation.Variables(username: username) - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -username: String - - ) async throws -> OperationResult { - var variables = UpsertUserMutation.Variables(username:username) - - - let ref = dataConnect.mutation(name: "UpsertUser", variables: variables, resultsDataType:UpsertUserMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(username: String) async throws -> OperationResult { + var variables = UpsertUserMutation.Variables(username: username) + let ref = dataConnect.mutation( + name: "UpsertUser", + variables: variables, + resultsDataType: UpsertUserMutation.Data.self + ) -public class AddFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class AddFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -156,105 +93,77 @@ public class AddFavoritedMovieMutation{ public static let OperationName = "AddFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - + public var + movieId: UUID - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_upsert: FavoriteMovieKey - + public var + favorite_movie_upsert: FavoriteMovieKey } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + AddFavoritedMovieMutation.Data, + AddFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = AddFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "AddFavoritedMovie", variables: variables, resultsDataType:AddFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = AddFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "AddFavoritedMovie", + variables: variables, + resultsDataType: AddFavoritedMovieMutation.Data.self + ) -public class DeleteFavoritedMovieMutation{ + return try await ref.execute() + } +} +public class DeleteFavoritedMovieMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -263,105 +172,76 @@ public class DeleteFavoritedMovieMutation{ public static let OperationName = "DeleteFavoritedMovie" - public typealias Ref = MutationRef + public typealias Ref = MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID + public var + movieId: UUID - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - - - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -favorite_movie_delete: FavoriteMovieKey? - + public var + favorite_movie_delete: FavoriteMovieKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) + -> MutationRef { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) + return ref as MutationRef< + DeleteFavoritedMovieMutation.Data, + DeleteFavoritedMovieMutation.Variables + > + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteFavoritedMovieMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteFavoritedMovie", variables: variables, resultsDataType:DeleteFavoritedMovieMutation.Data.self) - - return try await ref.execute() - - } -} - - - - - + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = DeleteFavoritedMovieMutation.Variables(movieId: movieId) + + let ref = dataConnect.mutation( + name: "DeleteFavoritedMovie", + variables: variables, + resultsDataType: DeleteFavoritedMovieMutation.Data.self + ) -public class AddReviewMutation{ + return try await ref.execute() + } +} +public class AddReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -370,149 +250,110 @@ public class AddReviewMutation{ public static let OperationName = "AddReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_insert: ReviewKey + } + public func ref(movieId: UUID, + rating: Int, -public var -review_insert: ReviewKey + reviewText: String) + -> MutationRef { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = AddReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "AddReview", variables: variables, resultsDataType:AddReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws -> OperationResult { + var variables = AddReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "AddReview", + variables: variables, + resultsDataType: AddReviewMutation.Data.self + ) -public class UpdateReviewMutation{ + return try await ref.execute() + } +} +public class UpdateReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -521,149 +362,111 @@ public class UpdateReviewMutation{ public static let OperationName = "UpdateReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - public var -rating: Int + public var + movieId: UUID - - - public var -reviewText: String + public var + rating: Int + public var + reviewText: String - - - - public init ( - -movieId: UUID -, - -rating: Int -, - -reviewText: String + public init(movieId: UUID, - - ) { - self.movieId = movieId - self.rating = rating - self.reviewText = reviewText - + rating: Int, - + reviewText: String) { + self.movieId = movieId + self.rating = rating + self.reviewText = reviewText } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId && - lhs.rating == rhs.rating && - lhs.reviewText == rhs.reviewText - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - - hasher.combine(rating) - - hasher.combine(reviewText) - -} + return lhs.movieId == rhs.movieId && + lhs.rating == rhs.rating && + lhs.reviewText == rhs.reviewText + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + + hasher.combine(rating) + + hasher.combine(reviewText) + } enum CodingKeys: String, CodingKey { - case movieId - + case rating - + case reviewText - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - - + try codecHelper.encode(rating, forKey: .rating, container: &container) - - - + try codecHelper.encode(reviewText, forKey: .reviewText, container: &container) - - } - } public struct Data: Decodable, Sendable { + public var + review_update: ReviewKey? + } + public func ref(movieId: UUID, + rating: Int, -public var -review_update: ReviewKey? + reviewText: String) + -> MutationRef { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) + return ref as MutationRef } - public func ref( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) -> MutationRef { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - return ref as MutationRef - } - @MainActor - public func execute( - -movieId: UUID -, -rating: Int -, -reviewText: String - - ) async throws -> OperationResult { - var variables = UpdateReviewMutation.Variables(movieId:movieId,rating:rating,reviewText:reviewText) - - - let ref = dataConnect.mutation(name: "UpdateReview", variables: variables, resultsDataType:UpdateReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - + public func execute(movieId: UUID, + rating: Int, + reviewText: String) async throws + -> OperationResult { + var variables = UpdateReviewMutation.Variables( + movieId: movieId, + rating: rating, + reviewText: reviewText + ) + let ref = dataConnect.mutation( + name: "UpdateReview", + variables: variables, + resultsDataType: UpdateReviewMutation.Data.self + ) -public class DeleteReviewMutation{ + return try await ref.execute() + } +} +public class DeleteReviewMutation { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -672,105 +475,70 @@ public class DeleteReviewMutation{ public static let OperationName = "DeleteReview" - public typealias Ref = MutationRef + public typealias Ref = MutationRef public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { - - - -public var -review_delete: ReviewKey? - + public var + review_delete: ReviewKey? } - public func ref( - -movieId: UUID - - ) -> MutationRef { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - + public func ref(movieId: UUID) -> MutationRef< + DeleteReviewMutation.Data, + DeleteReviewMutation.Variables + > { + var variables = DeleteReviewMutation.Variables(movieId: movieId) - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - return ref as MutationRef - } + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) + return ref as MutationRef + } @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = DeleteReviewMutation.Variables(movieId:movieId) - - - let ref = dataConnect.mutation(name: "DeleteReview", variables: variables, resultsDataType:DeleteReviewMutation.Data.self) - - return try await ref.execute() - - } -} - - - - + public func execute(movieId: UUID) async throws -> OperationResult { + var variables = DeleteReviewMutation.Variables(movieId: movieId) + let ref = dataConnect.mutation( + name: "DeleteReview", + variables: variables, + resultsDataType: DeleteReviewMutation.Data.self + ) -public class ListMoviesQuery{ + return try await ref.execute() + } +} +public class ListMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -779,272 +547,201 @@ public class ListMoviesQuery{ public static let OperationName = "ListMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - @OptionalVariable - public var -orderByRating: OrderDirection? + @OptionalVariable + public var + orderByRating: OrderDirection? - - @OptionalVariable - public var -orderByReleaseYear: OrderDirection? + @OptionalVariable + public var + orderByReleaseYear: OrderDirection? - - @OptionalVariable - public var -limit: Int? - - - - - - public init ( - - - - _ optionalVars: ((inout Variables)->())? = nil - ) { - - - - if let optionalVars { - optionalVars(&self) - } - + @OptionalVariable + public var + limit: Int? + + public init(_ optionalVars: ((inout Variables) -> Void)? = nil) { + if let optionalVars { + optionalVars(&self) + } } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.orderByRating == rhs.orderByRating && - lhs.orderByReleaseYear == rhs.orderByReleaseYear && - lhs.limit == rhs.limit - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(orderByRating) - - hasher.combine(orderByReleaseYear) - - hasher.combine(limit) - -} + return lhs.orderByRating == rhs.orderByRating && + lhs.orderByReleaseYear == rhs.orderByReleaseYear && + lhs.limit == rhs.limit + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(orderByRating) + + hasher.combine(orderByReleaseYear) + + hasher.combine(limit) + } enum CodingKeys: String, CodingKey { - case orderByRating - + case orderByReleaseYear - + case limit - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $orderByRating.isSet { - try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) + + if $orderByRating.isSet { + try codecHelper.encode(orderByRating, forKey: .orderByRating, container: &container) } - - if $orderByReleaseYear.isSet { - try codecHelper.encode(orderByReleaseYear, forKey: .orderByReleaseYear, container: &container) + + if $orderByReleaseYear.isSet { + try codecHelper.encode( + orderByReleaseYear, + forKey: .orderByReleaseYear, + container: &container + ) } - - if $limit.isSet { - try codecHelper.encode(limit, forKey: .limit, container: &container) + + if $limit.isSet { + try codecHelper.encode(limit, forKey: .limit, container: &container) } - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID + public var + genre: String? + public var + rating: Double? + public var + tags: [String]? -public var -title: String + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -imageUrl: String + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -releaseYear: Int? + case imageUrl + case releaseYear + case genre -public var -genre: String? + case rating + case tags + case description + } -public var -rating: Double? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -tags: [String]? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case tags - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - + public var + movies: [Movie] } -} -public var -movies: [Movie] - } + public func ref(_ optionalVars: ((inout ListMoviesQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + ListMoviesQuery.Data, + ListMoviesQuery.Variables + > { + var variables = ListMoviesQuery.Variables() - public func ref( - - - - _ optionalVars: ((inout ListMoviesQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation + } @MainActor - public func execute( - - - - _ optionalVars: (@MainActor (inout ListMoviesQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = ListMoviesQuery.Variables() - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "ListMovies", variables: variables, resultsDataType:ListMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - + public func execute(_ optionalVars: (@MainActor (inout ListMoviesQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = ListMoviesQuery.Variables() + if let optionalVars { + optionalVars(&variables) + } + let ref = dataConnect.query( + name: "ListMovies", + variables: variables, + resultsDataType: ListMoviesQuery.Data.self, + publisher: .observableMacro + ) -public class GetMovieByIdQuery{ + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } +} +public class GetMovieByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1053,580 +750,396 @@ public class GetMovieByIdQuery{ public static let OperationName = "GetMovieById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID + public var + description: String? + public var + tags: [String]? + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? -public var -title: String + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode(String?.self, forKey: .director, container: &container) + } + } -public var -imageUrl: String + public var + metadata: [MovieMetadataMetadata] + public struct ActorMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String -public var -releaseYear: Int? + public var + imageUrl: String + public var actorMainActorsKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -genre: String? + public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -description: String? + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [ActorMainActors] -public var -tags: [String]? - - - - - -public struct MovieMetadataMetadata: Decodable, Sendable { - - - -public var -director: String? + public struct ActorSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String - + public var + imageUrl: String - - enum CodingKeys: String, CodingKey { - - case director - - } + public var actorSupportingActorsKey: ActorKey { + return ActorKey( + id: id + ) + } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - - } -} -public var -metadata: [MovieMetadataMetadata] + public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -id: UUID + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + supportingActors: [ActorSupportingActors] + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID -public var -name: String + public var + reviewText: String? + public var + reviewDate: LocalDate + public var + rating: Int? -public var -imageUrl: String + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String - - public var actorMainActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var userKey: UserKey { + return UserKey( + id: id + ) + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorMainActors, rhs: ActorMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [ActorMainActors] + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct ActorSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case reviewText -public var -name: String + case reviewDate + case rating + case user + } -public var -imageUrl: String + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - public var actorSupportingActorsKey: ActorKey { - return ActorKey( - - id: id - ) - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorSupportingActors, rhs: ActorSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -supportingActors: [ActorSupportingActors] + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviews: [ReviewReviews] -public struct ReviewReviews: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -reviewText: String? + case imageUrl + case releaseYear + case genre -public var -reviewDate: LocalDate + case rating + case description + case tags -public var -rating: Int? + case metadata + case mainActors + case supportingActors + case reviews + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -id: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -username: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) - - public var userKey: UserKey { - return UserKey( - - id: id - ) - } + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) - + mainActors = try codecHelper.decode( + [ActorMainActors].self, + forKey: .mainActors, + container: &container + ) - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + supportingActors = try codecHelper.decode( + [ActorSupportingActors].self, + forKey: .supportingActors, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) + } + } - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case reviewText - - case reviewDate - - case rating - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - + public var + movie: Movie? } -} -public var -reviews: [ReviewReviews] + public func ref(id: UUID) -> QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > { + var variables = GetMovieByIdQuery.Variables(id: id) - - public var movieKey: MovieKey { - return MovieKey( - - id: id + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - case tags - - case metadata - - case mainActors - - case supportingActors - - case reviews - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - self.mainActors = try codecHelper.decode([ActorMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([ActorSupportingActors].self, forKey: .supportingActors, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - } -} -public var -movie: Movie? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetMovieByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetMovieById", + variables: variables, + resultsDataType: GetMovieByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetMovieByIdQuery.Data, + GetMovieByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetMovieByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetMovieById", variables: variables, resultsDataType:GetMovieByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetActorByIdQuery{ - +public class GetActorByIdQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -1635,383 +1148,258 @@ public class GetActorByIdQuery{ public static let OperationName = "GetActorById" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation public struct Variables: OperationVariable { - - - public var -id: UUID - + public var + id: UUID - - - - public init ( - -id: UUID - - - ) { - self.id = id - - - + public init(id: UUID) { + self.id = id } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.id == rhs.id - + return lhs.id == rhs.id } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } enum CodingKeys: String, CodingKey { - case id - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(id, forKey: .id, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Actor: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + + public var + name: String + public var + imageUrl: String + public struct MovieMainActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String -public struct Actor: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + tags: [String]? -public var -id: UUID + public var + imageUrl: String + public var movieMainActorsKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -name: String + public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -imageUrl: String + case genre + case tags + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public struct MovieMainActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -id: UUID + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + mainActors: [MovieMainActors] -public var -title: String + public struct MovieSupportingActors: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public var -genre: String? + public var + tags: [String]? + public var + imageUrl: String + public var movieSupportingActorsKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -tags: [String]? + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case genre - - public var movieMainActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + case tags - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMainActors, rhs: MovieMainActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -mainActors: [MovieMainActors] + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public struct MovieSupportingActors: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -id: UUID + public var + supportingActors: [MovieSupportingActors] + public var actorKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -title: String + public static func == (lhs: Actor, rhs: Actor) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case name -public var -genre: String? + case imageUrl + case mainActors + case supportingActors + } -public var -tags: [String]? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) -public var -imageUrl: String + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + mainActors = try codecHelper.decode( + [MovieMainActors].self, + forKey: .mainActors, + container: &container + ) - - public var movieSupportingActorsKey: MovieKey { - return MovieKey( - - id: id - ) - } + supportingActors = try codecHelper.decode( + [MovieSupportingActors].self, + forKey: .supportingActors, + container: &container + ) + } + } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieSupportingActors, rhs: MovieSupportingActors) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case tags - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - + public var + actor: Actor? } -} -public var -supportingActors: [MovieSupportingActors] + public func ref(id: UUID) -> QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > { + var variables = GetActorByIdQuery.Variables(id: id) - - public var actorKey: ActorKey { - return ActorKey( - - id: id + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Actor, rhs: Actor) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - case mainActors - - case supportingActors - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - self.mainActors = try codecHelper.decode([MovieMainActors].self, forKey: .mainActors, container: &container) - - - self.supportingActors = try codecHelper.decode([MovieSupportingActors].self, forKey: .supportingActors, container: &container) - - - } -} -public var -actor: Actor? + @MainActor + public func execute(id: UUID) async throws -> OperationResult { + var variables = GetActorByIdQuery.Variables(id: id) + + let ref = dataConnect.query( + name: "GetActorById", + variables: variables, + resultsDataType: GetActorByIdQuery.Data.self, + publisher: .observableMacro + ) + let refCast = ref as! QueryRefObservation< + GetActorByIdQuery.Data, + GetActorByIdQuery.Variables + > + return try await refCast.execute() } - - public func ref( - -id: UUID - - ) -> QueryRefObservation { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - -id: UUID - - ) async throws -> OperationResult { - var variables = GetActorByIdQuery.Variables(id:id) - - - let ref = dataConnect.query(name: "GetActorById", variables: variables, resultsDataType:GetActorByIdQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } } - - - - - -public class GetCurrentUserQuery{ - +public class GetCurrentUserQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2020,466 +1408,334 @@ public class GetCurrentUserQuery{ public static let OperationName = "GetCurrentUser" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public struct ReviewReviews: Decodable, Sendable { + public var + id: UUID + public var + rating: Int? -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: String - - - -public var -username: String + public var + reviewDate: LocalDate + public var + reviewText: String? + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviews: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewDate: LocalDate + enum CodingKeys: String, CodingKey { + case id + case rating + case reviewDate -public var -reviewText: String? + case reviewText + case movie + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) -public var -id: UUID + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + reviews: [ReviewReviews] + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID -public var -title: String + public var + title: String + public var + genre: String? - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + imageUrl: String - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + public var + releaseYear: Int? - + public var + rating: Double? - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + public var + description: String? - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + public var + tags: [String]? - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewDate - - case reviewText - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -reviews: [ReviewReviews] + public struct MovieMetadataMetadata: Decodable, Sendable { + public var + director: String? + enum CodingKeys: String, CodingKey { + case director + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + director = try codecHelper.decode( + String?.self, + forKey: .director, + container: &container + ) + } + } + public var + metadata: [MovieMetadataMetadata] -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + case title + case genre -public var -id: UUID + case imageUrl + case releaseYear + case rating -public var -title: String + case description + case tags + case metadata + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -imageUrl: String + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) -public var -releaseYear: Int? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) -public var -rating: Double? + metadata = try codecHelper.decode( + [MovieMetadataMetadata].self, + forKey: .metadata, + container: &container + ) + } + } + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } -public var -description: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] -public var -tags: [String]? + public var userKey: UserKey { + return UserKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username -public struct MovieMetadataMetadata: Decodable, Sendable { - + case reviews + case favoriteMovies + } -public var -director: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(String.self, forKey: .id, container: &container) - + username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - enum CodingKeys: String, CodingKey { - - case director - - } + reviews = try codecHelper.decode( + [ReviewReviews].self, + forKey: .reviews, + container: &container + ) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.director = try codecHelper.decode(String?.self, forKey: .director, container: &container) - - + public var + user: User? } -} -public var -metadata: [MovieMetadataMetadata] - - - public var movieKey: MovieKey { - return MovieKey( - - id: id + public func ref( + ) -> QueryRefObservation { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - case tags - - case metadata - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - self.tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) - - - self.metadata = try codecHelper.decode([MovieMetadataMetadata].self, forKey: .metadata, container: &container) - - - } -} -public var -movie: Movie - - - - - - enum CodingKeys: String, CodingKey { - - case movie - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - public var userKey: UserKey { - return UserKey( - - id: id + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetCurrentUserQuery.Variables() + + let ref = dataConnect.query( + name: "GetCurrentUser", + variables: variables, + resultsDataType: GetCurrentUserQuery.Data.self, + publisher: .observableMacro ) - } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case username - - case reviews - - case favoriteMovies - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - self.reviews = try codecHelper.decode([ReviewReviews].self, forKey: .reviews, container: &container) - - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetCurrentUserQuery.Data, + GetCurrentUserQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetCurrentUserQuery.Variables() - - - let ref = dataConnect.query(name: "GetCurrentUser", variables: variables, resultsDataType:GetCurrentUserQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - - -public class GetIfFavoritedMovieQuery{ +public class GetIfFavoritedMovieQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -2488,847 +1744,590 @@ public class GetIfFavoritedMovieQuery{ public static let OperationName = "GetIfFavoritedMovie" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > public struct Variables: OperationVariable { - - - public var -movieId: UUID - - - - - - public init ( - -movieId: UUID - - - ) { - self.movieId = movieId - + public var + movieId: UUID - + public init(movieId: UUID) { + self.movieId = movieId } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.movieId == rhs.movieId - + return lhs.movieId == rhs.movieId } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(movieId) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(movieId) + } enum CodingKeys: String, CodingKey { - case movieId - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(movieId, forKey: .movieId, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct FavoriteMovie: Decodable, Sendable { + public var + movieId: UUID + enum CodingKeys: String, CodingKey { + case movieId + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) + } + } -public struct FavoriteMovie: Decodable, Sendable { - - - -public var -movieId: UUID - + public var + favorite_movie: FavoriteMovie? + } - + public func ref(movieId: UUID) + -> QueryRefObservation { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) - - enum CodingKeys: String, CodingKey { - - case movieId - + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute(movieId: UUID) async throws + -> OperationResult { + var variables = GetIfFavoritedMovieQuery.Variables(movieId: movieId) + + let ref = dataConnect.query( + name: "GetIfFavoritedMovie", + variables: variables, + resultsDataType: GetIfFavoritedMovieQuery.Data.self, + publisher: .observableMacro + ) - - - self.movieId = try codecHelper.decode(UUID.self, forKey: .movieId, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetIfFavoritedMovieQuery.Data, + GetIfFavoritedMovieQuery.Variables + > + return try await refCast.execute() } } -public var -favorite_movie: FavoriteMovie? +public class SearchAllQuery { + let dataConnect: DataConnect + + init(dataConnect: DataConnect) { + self.dataConnect = dataConnect } - public func ref( - -movieId: UUID + public static let OperationName = "SearchAll" - ) -> QueryRefObservation { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - + public typealias Ref = QueryRefObservation - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + public struct Variables: OperationVariable { + @OptionalVariable + public var + input: String? - @MainActor - public func execute( - -movieId: UUID - - ) async throws -> OperationResult { - var variables = GetIfFavoritedMovieQuery.Variables(movieId:movieId) - - - let ref = dataConnect.query(name: "GetIfFavoritedMovie", variables: variables, resultsDataType:GetIfFavoritedMovieQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} + public var + minYear: Int + public var + maxYear: Int + public var + minRating: Double + public var + maxRating: Double + public var + genre: String + public init(minYear: Int, -public class SearchAllQuery{ + maxYear: Int, - let dataConnect: DataConnect + minRating: Double, - init(dataConnect: DataConnect) { - self.dataConnect = dataConnect - } + maxRating: Double, - public static let OperationName = "SearchAll" + genre: String, - public typealias Ref = QueryRefObservation + _ optionalVars: ((inout Variables) -> Void)? = nil) { + self.minYear = minYear + self.maxYear = maxYear + self.minRating = minRating + self.maxRating = maxRating + self.genre = genre - public struct Variables: OperationVariable { - - @OptionalVariable - public var -input: String? + if let optionalVars { + optionalVars(&self) + } + } - - - public var -minYear: Int + public static func == (lhs: Variables, rhs: Variables) -> Bool { + return lhs.input == rhs.input && + lhs.minYear == rhs.minYear && + lhs.maxYear == rhs.maxYear && + lhs.minRating == rhs.minRating && + lhs.maxRating == rhs.maxRating && + lhs.genre == rhs.genre + } - - - public var -maxYear: Int + public func hash(into hasher: inout Hasher) { + hasher.combine(input) - - - public var -minRating: Double + hasher.combine(minYear) - - - public var -maxRating: Double + hasher.combine(maxYear) - - - public var -genre: String - - - - - - public init ( - -minYear: Int -, - -maxYear: Int -, - -minRating: Double -, - -maxRating: Double -, - -genre: String - - - - , - _ optionalVars: ((inout Variables)->())? = nil - ) { - self.minYear = minYear - self.maxYear = maxYear - self.minRating = minRating - self.maxRating = maxRating - self.genre = genre - - - - if let optionalVars { - optionalVars(&self) - } - - } + hasher.combine(minRating) - public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.input == rhs.input && - lhs.minYear == rhs.minYear && - lhs.maxYear == rhs.maxYear && - lhs.minRating == rhs.minRating && - lhs.maxRating == rhs.maxRating && - lhs.genre == rhs.genre - - } - - -public func hash(into hasher: inout Hasher) { - - hasher.combine(input) - - hasher.combine(minYear) - - hasher.combine(maxYear) - - hasher.combine(minRating) - - hasher.combine(maxRating) - - hasher.combine(genre) - -} + hasher.combine(maxRating) + + hasher.combine(genre) + } enum CodingKeys: String, CodingKey { - case input - + case minYear - + case maxYear - + case minRating - + case maxRating - + case genre - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - if $input.isSet { - try codecHelper.encode(input, forKey: .input, container: &container) + + if $input.isSet { + try codecHelper.encode(input, forKey: .input, container: &container) } - - + try codecHelper.encode(minYear, forKey: .minYear, container: &container) - - - + try codecHelper.encode(maxYear, forKey: .maxYear, container: &container) - - - + try codecHelper.encode(minRating, forKey: .minRating, container: &container) - - - + try codecHelper.encode(maxRating, forKey: .maxRating, container: &container) - - - + try codecHelper.encode(genre, forKey: .genre, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct MovieMoviesMatchingTitle: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + rating: Double? -public struct MovieMoviesMatchingTitle: Decodable, Sendable ,Hashable, Equatable, Identifiable { - - - -public var -id: UUID - + public var + imageUrl: String + public var movieMoviesMatchingTitleKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -genre: String? + case title + case genre + case rating -public var -rating: Double? + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) -public var -imageUrl: String + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - public var movieMoviesMatchingTitleKey: MovieKey { - return MovieKey( - - id: id - ) - } + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingTitle, rhs: MovieMoviesMatchingTitle) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingTitle: [MovieMoviesMatchingTitle] + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } + public var + moviesMatchingTitle: [MovieMoviesMatchingTitle] + public struct MovieMoviesMatchingDescription: Decodable, Sendable, Hashable, Equatable, + Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? -public struct MovieMoviesMatchingDescription: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + rating: Double? + public var + imageUrl: String -public var -id: UUID + public var movieMoviesMatchingDescriptionKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: MovieMoviesMatchingDescription, + rhs: MovieMoviesMatchingDescription) -> Bool { + return lhs.id == rhs.id + } -public var -title: String + enum CodingKeys: String, CodingKey { + case id + case title + case genre -public var -genre: String? + case rating + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Double? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -imageUrl: String + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } - - public var movieMoviesMatchingDescriptionKey: MovieKey { - return MovieKey( - - id: id - ) - } + public var + moviesMatchingDescription: [MovieMoviesMatchingDescription] - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: MovieMoviesMatchingDescription, rhs: MovieMoviesMatchingDescription) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case rating - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -moviesMatchingDescription: [MovieMoviesMatchingDescription] + public struct ActorActorsMatchingName: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + name: String + public var + imageUrl: String + public var actorActorsMatchingNameKey: ActorKey { + return ActorKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public struct ActorActorsMatchingName: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -id: UUID + case name + case imageUrl + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -name: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + name = try codecHelper.decode(String.self, forKey: .name, container: &container) + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + } + } -public var -imageUrl: String + public var + actorsMatchingName: [ActorActorsMatchingName] + public struct ReviewReviewsMatchingText: Decodable, Sendable { + public var + id: UUID - - public var actorActorsMatchingNameKey: ActorKey { - return ActorKey( - - id: id - ) - } + public var + rating: Int? - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: ActorActorsMatchingName, rhs: ActorActorsMatchingName) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case name - - case imageUrl - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.name = try codecHelper.decode(String.self, forKey: .name, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - } -} -public var -actorsMatchingName: [ActorActorsMatchingName] + public var + reviewText: String? + public var + reviewDate: LocalDate + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public struct ReviewReviewsMatchingText: Decodable, Sendable { - + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } -public var -id: UUID + enum CodingKeys: String, CodingKey { + case id + case title + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -rating: Int? + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + } + } + public var + movie: Movie -public var -reviewText: String? + public struct User: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: String + public var + username: String + public var userKey: UserKey { + return UserKey( + id: id + ) + } -public var -reviewDate: LocalDate + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: User, rhs: User) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case username + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + id = try codecHelper.decode(String.self, forKey: .id, container: &container) + username = try codecHelper.decode(String.self, forKey: .username, container: &container) + } + } -public var -id: UUID + public var + user: User + enum CodingKeys: String, CodingKey { + case id + case rating -public var -title: String + case reviewText + case reviewDate - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + case movie - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } + case user + } - + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - - enum CodingKeys: String, CodingKey { - - case id - - case title - - } + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - } -} -public var -movie: Movie + reviewText = try codecHelper.decode( + String?.self, + forKey: .reviewText, + container: &container + ) + reviewDate = try codecHelper.decode( + LocalDate.self, + forKey: .reviewDate, + container: &container + ) + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + user = try codecHelper.decode(User.self, forKey: .user, container: &container) + } + } + public var + reviewsMatchingText: [ReviewReviewsMatchingText] + } -public struct User: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public func ref(minYear: Int, + maxYear: Int, -public var -id: String + minRating: Double, + maxRating: Double, + genre: String, -public var -username: String + _ optionalVars: ((inout SearchAllQuery.Variables) -> Void)? = nil) + -> QueryRefObservation< + SearchAllQuery.Data, + SearchAllQuery.Variables + > { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) + if let optionalVars { + optionalVars(&variables) + } - - public var userKey: UserKey { - return UserKey( - - id: id + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro ) + return ref as! QueryRefObservation } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: User, rhs: User) -> Bool { - - return lhs.id == rhs.id - - } + @MainActor + public func execute(minYear: Int, - + maxYear: Int, - - enum CodingKeys: String, CodingKey { - - case id - - case username - - } + minRating: Double, - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + maxRating: Double, - - - self.id = try codecHelper.decode(String.self, forKey: .id, container: &container) - - - - self.username = try codecHelper.decode(String.self, forKey: .username, container: &container) - - - } -} -public var -user: User - - - - - - enum CodingKeys: String, CodingKey { - - case id - - case rating - - case reviewText - - case reviewDate - - case movie - - case user - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.rating = try codecHelper.decode(Int?.self, forKey: .rating, container: &container) - - - - self.reviewText = try codecHelper.decode(String?.self, forKey: .reviewText, container: &container) - - - - self.reviewDate = try codecHelper.decode(LocalDate.self, forKey: .reviewDate, container: &container) - - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - - - self.user = try codecHelper.decode(User.self, forKey: .user, container: &container) - - - } -} -public var -reviewsMatchingText: [ReviewReviewsMatchingText] + genre: String, - } + _ optionalVars: (@MainActor (inout SearchAllQuery.Variables) -> Void)? = + nil) async throws -> OperationResult { + var variables = SearchAllQuery.Variables( + minYear: minYear, + maxYear: maxYear, + minRating: minRating, + maxRating: maxRating, + genre: genre + ) - public func ref( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: ((inout SearchAllQuery.Variables)->())? = nil - ) -> QueryRefObservation { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - + if let optionalVars { + optionalVars(&variables) + } - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } + let ref = dataConnect.query( + name: "SearchAll", + variables: variables, + resultsDataType: SearchAllQuery.Data.self, + publisher: .observableMacro + ) - @MainActor - public func execute( - -minYear: Int -, -maxYear: Int -, -minRating: Double -, -maxRating: Double -, -genre: String - - - , - _ optionalVars: (@MainActor (inout SearchAllQuery.Variables)->())? = nil - ) async throws -> OperationResult { - var variables = SearchAllQuery.Variables(minYear:minYear,maxYear:maxYear,minRating:minRating,maxRating:maxRating,genre:genre) - - if let optionalVars { - optionalVars(&variables) - } - - - let ref = dataConnect.query(name: "SearchAll", variables: variables, resultsDataType:SearchAllQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } + let refCast = ref as! QueryRefObservation + return try await refCast.execute() + } } - - - - - -public class ListMoviesByPartialTitleQuery{ - +public class ListMoviesByPartialTitleQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3337,221 +2336,158 @@ public class ListMoviesByPartialTitleQuery{ public static let OperationName = "ListMoviesByPartialTitle" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > public struct Variables: OperationVariable { - - - public var -searchTerm: String + public var + searchTerm: String - - - - - public init ( - -searchTerm: String - - - ) { - self.searchTerm = searchTerm - - - + public init(searchTerm: String) { + self.searchTerm = searchTerm } public static func == (lhs: Variables, rhs: Variables) -> Bool { - - return lhs.searchTerm == rhs.searchTerm - + return lhs.searchTerm == rhs.searchTerm } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(searchTerm) - -} + public func hash(into hasher: inout Hasher) { + hasher.combine(searchTerm) + } enum CodingKeys: String, CodingKey { - case searchTerm - } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) let codecHelper = CodecHelper() - - + try codecHelper.encode(searchTerm, forKey: .searchTerm, container: &container) - - } - } public struct Data: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + imageUrl: String + public var + releaseYear: Int? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var + genre: String? + public var + rating: Double? -public var -id: UUID - + public var + description: String? + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } -public var -title: String + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id -public var -imageUrl: String + case title + case imageUrl + case releaseYear -public var -releaseYear: Int? + case genre + case rating + case description + } -public var -genre: String? + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) -public var -rating: Double? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -description: String? + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) + public var + movies: [Movie] } - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case imageUrl - - case releaseYear - - case genre - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movies: [Movie] + public func ref(searchTerm: String) + -> QueryRefObservation { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > } - public func ref( - -searchTerm: String - - ) -> QueryRefObservation { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - @MainActor - public func execute( - -searchTerm: String - - ) async throws -> OperationResult { - var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm:searchTerm) - - - let ref = dataConnect.query(name: "ListMoviesByPartialTitle", variables: variables, resultsDataType:ListMoviesByPartialTitleQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - - - - + public func execute(searchTerm: String) async throws + -> OperationResult { + var variables = ListMoviesByPartialTitleQuery.Variables(searchTerm: searchTerm) + + let ref = dataConnect.query( + name: "ListMoviesByPartialTitle", + variables: variables, + resultsDataType: ListMoviesByPartialTitleQuery.Data.self, + publisher: .observableMacro + ) -public class GetUserFavoriteMoviesQuery{ + let refCast = ref as! QueryRefObservation< + ListMoviesByPartialTitleQuery.Data, + ListMoviesByPartialTitleQuery.Variables + > + return try await refCast.execute() + } +} +public class GetUserFavoriteMoviesQuery { let dataConnect: DataConnect init(dataConnect: DataConnect) { @@ -3560,220 +2496,168 @@ public class GetUserFavoriteMoviesQuery{ public static let OperationName = "GetUserFavoriteMovies" - public typealias Ref = QueryRefObservation + public typealias Ref = QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > - public struct Variables: OperationVariable { - - - - } + public struct Variables: OperationVariable {} public struct Data: Decodable, Sendable { + public struct User: Decodable, Sendable { + public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { + public struct Movie: Decodable, Sendable, Hashable, Equatable, Identifiable { + public var + id: UUID + public var + title: String + public var + genre: String? + public var + imageUrl: String -public struct User: Decodable, Sendable { - - - - - -public struct FavoriteMovieFavoriteMovies: Decodable, Sendable { - - + public var + releaseYear: Int? + public var + rating: Double? + public var + description: String? -public struct Movie: Decodable, Sendable ,Hashable, Equatable, Identifiable { - + public var movieKey: MovieKey { + return MovieKey( + id: id + ) + } + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } -public var -id: UUID + public static func == (lhs: Movie, rhs: Movie) -> Bool { + return lhs.id == rhs.id + } + enum CodingKeys: String, CodingKey { + case id + case title -public var -title: String + case genre + case imageUrl + case releaseYear -public var -genre: String? + case rating + case description + } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() -public var -imageUrl: String + id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) + title = try codecHelper.decode(String.self, forKey: .title, container: &container) + genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) -public var -releaseYear: Int? + imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) + releaseYear = try codecHelper.decode( + Int?.self, + forKey: .releaseYear, + container: &container + ) + rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) -public var -rating: Double? - - + description = try codecHelper.decode( + String?.self, + forKey: .description, + container: &container + ) + } + } -public var -description: String? + public var + movie: Movie + enum CodingKeys: String, CodingKey { + case movie + } - - public var movieKey: MovieKey { - return MovieKey( - - id: id - ) - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - -public func hash(into hasher: inout Hasher) { - - hasher.combine(id) - -} -public static func == (lhs: Movie, rhs: Movie) -> Bool { - - return lhs.id == rhs.id - - } - - - - - enum CodingKeys: String, CodingKey { - - case id - - case title - - case genre - - case imageUrl - - case releaseYear - - case rating - - case description - - } - - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() - - - - self.id = try codecHelper.decode(UUID.self, forKey: .id, container: &container) - - - - self.title = try codecHelper.decode(String.self, forKey: .title, container: &container) - - - - self.genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - - - - self.imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) - - - - self.releaseYear = try codecHelper.decode(Int?.self, forKey: .releaseYear, container: &container) - - - - self.rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - - - - self.description = try codecHelper.decode(String?.self, forKey: .description, container: &container) - - - } -} -public var -movie: Movie + movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) + } + } + public var + favoriteMovies: [FavoriteMovieFavoriteMovies] - + enum CodingKeys: String, CodingKey { + case favoriteMovies + } - - enum CodingKeys: String, CodingKey { - - case movie - - } + public init(from decoder: any Decoder) throws { + var container = try decoder.container(keyedBy: CodingKeys.self) + let codecHelper = CodecHelper() - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + favoriteMovies = try codecHelper.decode( + [FavoriteMovieFavoriteMovies].self, + forKey: .favoriteMovies, + container: &container + ) + } + } - - - self.movie = try codecHelper.decode(Movie.self, forKey: .movie, container: &container) - - + public var + user: User? } -} -public var -favoriteMovies: [FavoriteMovieFavoriteMovies] - - - - - enum CodingKeys: String, CodingKey { - - case favoriteMovies - + public func ref( + ) + -> QueryRefObservation { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) + return ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > } - public init(from decoder: any Decoder) throws { - var container = try decoder.container(keyedBy: CodingKeys.self) - let codecHelper = CodecHelper() + @MainActor + public func execute( + ) async throws -> OperationResult { + var variables = GetUserFavoriteMoviesQuery.Variables() + + let ref = dataConnect.query( + name: "GetUserFavoriteMovies", + variables: variables, + resultsDataType: GetUserFavoriteMoviesQuery.Data.self, + publisher: .observableMacro + ) - - self.favoriteMovies = try codecHelper.decode([FavoriteMovieFavoriteMovies].self, forKey: .favoriteMovies, container: &container) - - + let refCast = ref as! QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > + return try await refCast.execute() } } -public var -user: User? - - } - - public func ref( - - ) -> QueryRefObservation { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - return ref as! QueryRefObservation - } - - @MainActor - public func execute( - - ) async throws -> OperationResult { - var variables = GetUserFavoriteMoviesQuery.Variables() - - - let ref = dataConnect.query(name: "GetUserFavoriteMovies", variables: variables, resultsDataType:GetUserFavoriteMoviesQuery.Data.self, publisher: .observableMacro) - - let refCast = ref as! QueryRefObservation - return try await refCast.execute() - - } -} - - From 870562f5b53193fd8b58dc403ba04ad44eb78551 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Sat, 9 Nov 2024 08:34:36 +0100 Subject: [PATCH 37/50] Copyright Signed-off-by: Peter Friese --- .../FriendlyFlix/app/FriendlyFlixSDK/Package.swift | 14 ++++++++++++++ .../Sources/FriendlyFlixClient.swift | 13 +++++++++++++ .../FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift | 14 ++++++++++++++ .../Sources/FriendlyFlixOperations.swift | 14 ++++++++++++++ 4 files changed, 55 insertions(+) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift index e0619f4..bd7f410 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Package.swift @@ -1,6 +1,20 @@ // swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import PackageDescription let package = Package( diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift index a3406d9..7c7a7e4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixClient.swift @@ -1,3 +1,16 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. import Foundation diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift index 39d3051..c364d01 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixKeys.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseDataConnect diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 46bc78b..0cacb1f 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseCore From 487de6b6359101cfa879b7490734a9168bd8e7b5 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 19 Nov 2024 17:37:23 +0100 Subject: [PATCH 38/50] Clean up Firebase config Signed-off-by: Peter Friese --- Examples/FriendlyFlix/firebase.json | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/Examples/FriendlyFlix/firebase.json b/Examples/FriendlyFlix/firebase.json index c46f2c5..662cd4e 100644 --- a/Examples/FriendlyFlix/firebase.json +++ b/Examples/FriendlyFlix/firebase.json @@ -3,29 +3,12 @@ "auth": { "port": 9099 }, - "hosting": { - "port": 5000 - }, "dataconnect": { "port": 9399 }, - "ui": { - "enabled": true - }, "singleProjectMode": true }, "dataconnect": { "source": "./dataconnect" - }, - "hosting": { - "source": "app", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "frameworksBackend": { - "region": "us-central1" - } } } From 3f5a1407b56355082084b297bd99d47ed12e931f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Tue, 19 Nov 2024 17:40:19 +0100 Subject: [PATCH 39/50] Cleanup Signed-off-by: Peter Friese --- .../FriendlyFlix/App/FriendlyFlixApp.swift | 17 ----------------- .../Authentication/AuthenticationScreen.swift | 6 ++++-- .../Authentication/AuthenticationService.swift | 4 ++++ .../Features/Details/MovieCardView.swift | 5 +++-- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index b7f59ac..695fac5 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -20,30 +20,13 @@ import SwiftUI @main struct FriendlyFlixApp: App { - private func loadRocketSimConnect() { - #if DEBUG - guard Bundle( - path: "/Applications/RocketSim.app/Contents/Frameworks/RocketSimConnectLinker.nocache.framework" - )? - .load() == true else { - print("Failed to load linker framework") - return - } - print("RocketSim Connect successfully linked") - #endif - } - var authenticationService: AuthenticationService? init() { - loadRocketSimConnect() FirebaseApp.configure() authenticationService = AuthenticationService() authenticationService?.onSignUp { user in - print( - "User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")" - ) let userName = String(user.email?.split(separator: "@").first ?? "(unknown)") Task { try await DataConnect.friendlyFlixConnector.upsertUserMutation.execute(username: userName) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index 55a8e76..61cf4a4 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -14,6 +14,7 @@ import AuthenticationServices import SwiftUI +import os private enum FocusableField: Hashable { case email @@ -27,6 +28,7 @@ private enum AuthenticationFlow { } struct AuthenticationScreen: View { + private let logger = Logger(subsystem: "FriendlyFlix", category: "auth") @Environment(AuthenticationService.self) var authenticationService @Environment(\.colorScheme) private var colorScheme @Environment(\.dismiss) private var dismiss @@ -61,7 +63,7 @@ struct AuthenticationScreen: View { try await authenticationService.signInWithEmailPassword(email: email, password: password) dismiss() } catch { - print(error.localizedDescription) + logger.error("Error when signing in with email / password: \(error.localizedDescription)") errorMessage = error.localizedDescription } } @@ -74,7 +76,7 @@ struct AuthenticationScreen: View { errorMessage = "" dismiss() } catch { - print(error.localizedDescription) + logger.error("Error when signing up with email / password: \(error.localizedDescription)") errorMessage = error.localizedDescription } } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index e48239c..24392fa 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -15,6 +15,7 @@ import FirebaseAuth import Foundation import Observation +import os enum AuthenticationState { case unauthenticated @@ -24,6 +25,8 @@ enum AuthenticationState { @Observable class AuthenticationService { + private let logger = Logger(subsystem: "FriendlyFlix", category: "auth") + var presentingAuthenticationDialog = false var presentingAccountDialog = false @@ -57,6 +60,7 @@ class AuthenticationService { try await Auth.auth().createUser(withEmail: email, password: password) if let onSignUp, let user = Auth.auth().currentUser { + logger.debug("User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")") onSignUp(user) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index dede5e7..3fa7d90 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -16,8 +16,10 @@ import FirebaseDataConnect import FriendlyFlixSDK import NukeUI import SwiftUI +import os struct MovieCardView: View { + private let logger = Logger(subsystem: "FriendlyFlix", category: "moviecard") @Environment(\.dismiss) private var dismiss private var connector = DataConnect.friendlyFlixConnector @@ -32,7 +34,6 @@ struct MovieCardView: View { } // MARK: - Favourite handling - private let isFavouriteRef: QueryRefObservation< GetIfFavoritedMovieQuery.Data, GetIfFavoritedMovieQuery.Variables @@ -132,7 +133,7 @@ extension MovieCardView { do { let _ = try await isFavouriteRef.execute() } catch { - print(error) + logger.error("Error when trying to fetch favourite status: \(error.localizedDescription)") } } } From 59b0d1a87a8681f30cc7668dab5f6a98702125fb Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 11:07:16 +0100 Subject: [PATCH 40/50] Add mock plist file Signed-off-by: Peter Friese --- .../FriendlyFlix/GoogleService-Info.plist | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist new file mode 100644 index 0000000..183d7ca --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyAzlj4APqi5S58nFtE52Da0fYBOHA2MhaY + GCM_SENDER_ID + 123456789000 + PLIST_VERSION + 1 + BUNDLE_ID + com.google.firebase.samples.FriendlyFlix + PROJECT_ID + pfr-fdc-friendlyflix-dev-01 + STORAGE_BUCKET + mockproject-1234 + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:123456789000:ios:f1bf012572b04063 + + \ No newline at end of file From e8587324a2f468deec196aa8b2695746f7188716 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 12:49:36 +0100 Subject: [PATCH 41/50] Simplify local setup flow Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 73 ++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index e3b182c..b28ef2f 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -7,12 +7,18 @@ This quickstart is a movie tracker app to demonstrate the use of Firebase Data C For more information about Firebase Data Connect visit [the docs](https://firebase.google.com/docs/data-connect/). -## Getting Started -Follow these steps to get up and running with Firebase Data Connect. For more detailed instructions, -check out the [official documentation](https://firebase.google.com/docs/data-connect/quickstart). +## Getting Started (local development) -### 0. Prerequisites +Follow these steps to get up and running with Firebase Data Connect locally (i.e., without setting up a production SQL instance). At the end of this guide, you will find instructions for connecting to a production SQL instance. + +For more detailed instructions, +check out the [official documentation](https://firebase.google.com/docs/data-connect/quickstart-local). + +### Prerequisites + +To use this quickstart, you'll need the following: +- A computer running macOS - Latest version of [Xcode](https://developer.apple.com/xcode/) - Latest version of [Visual Studio Code](https://code.visualstudio.com/) - The [Firebase Data Connect VS Code Extension](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.firebase-dataconnect-vscode) @@ -21,38 +27,16 @@ check out the [official documentation](https://firebase.google.com/docs/data-con 1. If you haven't already, create a Firebase project. * In the [Firebase console](https://console.firebase.google.com), click - **Add project**, then follow the on-screen instructions. + **Create a project**, then follow the on-screen instructions. -2. Upgrade your project to the Blaze plan. This lets you create a Cloud SQL - for PostgreSQL instance. - > Note: Though you set up billing in your Blaze upgrade, you won't be - charged for usage of Firebase Data Connect or the - [default Cloud SQL for PostgreSQL configuration](https://firebase.google.com/docs/data-connect/#pricing) during the preview. - -3. Navigate to the [Data Connect section](https://console.firebase.google.com/u/0/project/_/dataconnect) - of the Firebase console, click on the "Get Started" button and follow the setup workflow: - - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. - - Select the option to create a new Cloud SQL instance and fill in the following fields: - - Service ID: `dataconnect` - - Cloud SQL Instance ID: `fdc-sql` - - Database name: `fdcdb` -4. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance - can be managed in the [Cloud Console](https://console.cloud.google.com/sql). - -5. If you haven’t already, add an iOS app to your Firebase project, using `com.google.firebase.samples.FriendlyFlix` as the bundle ID. - Click **Download GoogleService-Info.plist** to obtain your Firebase config file. - -### 2. Cloning the repository +### 2. Get the code for the FriendlyFLix quickstart app 1. Clone this repository to your local machine: ```sh git clone https://github.com/firebase/data-connect-ios-sdk.git ``` -2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the - `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist` directory. - ### 3. Open in Visual Studio Code (VS Code) 1. Open the `data-connect-ios-sdk/Examples/FriendlyFlix` directory in VS Code. @@ -68,6 +52,37 @@ In VS Code, open the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dat If you’d like to confirm that the data was correctly inserted, open `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/movie-connector/queries.gql` and run the `ListMovies` query. -### 5. Running the app +### 5. Run the app Press the Run button in Xcode to run the sample app on the iOS Simulator. + +# Connect to a production instance of CloudSQL + +### 1. Connect to your Firebase project + +1. If you haven’t already, add an iOS app to your Firebase project, using `com.google.firebase.samples.FriendlyFlix` as the bundle ID. + Click **Download GoogleService-Info.plist** to obtain your Firebase config file. + +2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the + `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist` directory, replacing the existing `GoogleService-Info.plist` (which contains dummy values). + +### 2. Upgrade your Firebase project to Blaze + +1. Upgrade your project to the Blaze plan. This lets you create a Cloud SQL + for PostgreSQL instance. + + > Note: Though you set up billing in your Blaze upgrade, you won't be + charged for usage of Firebase Data Connect or the + [default Cloud SQL for PostgreSQL configuration](https://firebase.google.com/docs/data-connect/#pricing) during the preview. + +### 3. Provision a PostgreSQL database + +1. Navigate to the [Data Connect section](https://console.firebase.google.com/u/0/project/_/dataconnect) + of the Firebase console, click on the "Get Started" button and follow the setup workflow: + - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. + - Select the option to create a new Cloud SQL instance and fill in the following fields: + - Service ID: `dataconnect` + - Cloud SQL Instance ID: `fdc-sql` + - Database name: `fdcdb` +1. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance + can be managed in the [Cloud Console](https://console.cloud.google.com/sql). \ No newline at end of file From ab7aee8f1e9fcfa71fed789eda6b64f68a961631 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 12:50:16 +0100 Subject: [PATCH 42/50] Use local emulator Signed-off-by: Peter Friese --- .../xcshareddata/xcschemes/FriendlyFlix.xcscheme | 6 ++++++ .../FriendlyFlix/App/FriendlyFlixApp.swift | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme index 3e0042c..03f5735 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj/xcshareddata/xcschemes/FriendlyFlix.xcscheme @@ -50,6 +50,12 @@ ReferencedContainer = "container:FriendlyFlix.xcodeproj"> + + + + Date: Wed, 20 Nov 2024 12:51:01 +0100 Subject: [PATCH 43/50] Display hint when no data is available Signed-off-by: Peter Friese --- .../Features/Home/HomeScreen.swift | 127 +++++++++++------- 1 file changed, 79 insertions(+), 48 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift index 0fb171f..30ca555 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Home/HomeScreen.swift @@ -36,33 +36,47 @@ struct HomeScreen: View { ) } + let heroMoviesRef: QueryRefObservation private var heroMovies: [Movie] { - connector.listMoviesQuery - .ref { optionalVars in - optionalVars.limit = 3 - optionalVars.orderByReleaseYear = .DESC - } + heroMoviesRef .data?.movies.map(Movie.init) ?? [] } + let topMoviesRef: QueryRefObservation private var topMovies: [Movie] { - connector.listMoviesQuery - .ref { optionalVars in - optionalVars.limit = 5 - optionalVars.orderByRating = .DESC - } - .data?.movies.map(Movie.init) ?? [] + topMoviesRef.data?.movies.map(Movie.init) ?? [] } - let watchListRef: QueryRefObservation< - GetUserFavoriteMoviesQuery.Data, - GetUserFavoriteMoviesQuery.Variables - > + let watchListRef: + QueryRefObservation< + GetUserFavoriteMoviesQuery.Data, + GetUserFavoriteMoviesQuery.Variables + > private var watchList: [Movie] { watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? [] } + private var isEmpty: Bool { + heroMovies.count == 0 + } + + private func refresh() async { + async let _ = heroMoviesRef.execute() + async let _ = topMoviesRef.execute() + async let _ = watchListRef.execute() + } + init() { + heroMoviesRef = connector.listMoviesQuery + .ref { optionalVars in + optionalVars.limit = 3 + optionalVars.orderByReleaseYear = .DESC + } + topMoviesRef = connector.listMoviesQuery + .ref { optionalVars in + optionalVars.limit = 5 + optionalVars.orderByRating = .DESC + } watchListRef = connector.getUserFavoriteMoviesQuery.ref() } } @@ -71,45 +85,62 @@ extension HomeScreen { var body: some View { NavigationStack { ScrollView { - TabView { - ForEach(heroMovies) { movie in - NavigationLink(value: movie) { - MovieTeaserView( - title: movie.title, - subtitle: movie.description, - imageUrl: movie.imageUrl - ) - .matchedTransitionSource(id: movie.id, in: namespace) + if isEmpty { + GeometryReader { geometry in + ContentUnavailableView { + Label("No movies available", systemImage: "rectangle.on.rectangle.slash") + } description: { + VStack { + Text("Follow the instructions in the README.md file to get started.") + } } - .buttonStyle(.noHighlight) + .frame(width: geometry.size.width, height: geometry.size.height) } - } - .frame(height: 600) - .navigationDestination(for: Movie.self) { movie in - MovieCardView(showDetails: true, movie: movie) - .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) - } - .tabViewStyle(.page(indexDisplayMode: .always)) + .frame(height: UIScreen.main.bounds.height) + } else { + TabView { + ForEach(heroMovies) { movie in + NavigationLink(value: movie) { + MovieTeaserView( + title: movie.title, + subtitle: movie.description, + imageUrl: movie.imageUrl + ) + .matchedTransitionSource(id: movie.id, in: namespace) + } + .buttonStyle(.noHighlight) + } + } + .frame(height: 600) + .navigationDestination(for: Movie.self) { movie in + MovieCardView(showDetails: true, movie: movie) + .navigationTransition(.zoom(sourceID: movie.id, in: namespace)) + } + .tabViewStyle(.page(indexDisplayMode: .always)) - Group { - MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) - if isSignedIn { - MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) - .onAppear { - Task { - try await watchListRef.execute() + Group { + MovieListSection(namespace: namespace, title: "Top Movies", movies: topMovies) + if isSignedIn { + MovieListSection(namespace: namespace, title: "Watch List", movies: watchList) + .onAppear { + Task { + try await watchListRef.execute() + } } - } + } } + .navigationDestination(for: [Movie].self) { movies in + MovieListScreen(namespace: namespace, movies: movies) + } + .navigationDestination(for: SectionedMovie.self) { sectionedMovie in + MovieCardView(showDetails: true, movie: sectionedMovie.movie) + .navigationTransition(.zoom(sourceID: sectionedMovie.id, in: namespace)) + } + .padding() } - .navigationDestination(for: [Movie].self) { movies in - MovieListScreen(namespace: namespace, movies: movies) - } - .navigationDestination(for: SectionedMovie.self) { sectionedMovie in - MovieCardView(showDetails: true, movie: sectionedMovie.movie) - .navigationTransition(.zoom(sourceID: sectionedMovie.id, in: namespace)) - } - .padding() + } + .refreshable { + await refresh() } .navigationTitle("Home") .toolbar { From e67c5ca1aa0ed3281fe1a25373229b807663947f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 12:54:07 +0100 Subject: [PATCH 44/50] Add instructions for connecting to the production project Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index b28ef2f..ecc8d3b 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -85,4 +85,10 @@ Press the Run button in Xcode to run the sample app on the iOS Simulator. - Cloud SQL Instance ID: `fdc-sql` - Database name: `fdcdb` 1. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance - can be managed in the [Cloud Console](https://console.cloud.google.com/sql). \ No newline at end of file + can be managed in the [Cloud Console](https://console.cloud.google.com/sql). + + +### 4. Run the app + +1. In Xcode, select Product > Schemed > Edit Scheme, and then disable the check box labeled "useEmulator" to use your production project instead. +2. Press the Run button in Xcode to run the sample app on the iOS Simulator. From 849259bfa187efff4e36a6dd78c84cdeb6755c4c Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 12:57:12 +0100 Subject: [PATCH 45/50] Code style Signed-off-by: Peter Friese --- .../FriendlyFlix/App/FriendlyFlixApp.swift | 6 ++--- .../Authentication/AuthenticationScreen.swift | 2 +- .../AuthenticationService.swift | 5 +++- .../Features/Details/MovieCardView.swift | 3 ++- .../Sources/FriendlyFlixOperations.swift | 24 ++++--------------- 5 files changed, 15 insertions(+), 25 deletions(-) diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift index b2406f9..82a2f8d 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/App/FriendlyFlixApp.swift @@ -16,8 +16,8 @@ import Firebase import FirebaseAuth import FirebaseDataConnect import FriendlyFlixSDK -import SwiftUI import os +import SwiftUI @main struct FriendlyFlixApp: App { @@ -29,7 +29,7 @@ struct FriendlyFlixApp: App { /// To use the local emulator, go to the active scheme, and add `-useEmulator YES` /// to the _Arguments Passed On Launch_ section. public var useEmulator: Bool { - let value = UserDefaults.standard.bool(forKey: "useEmulator") + let value = UserDefaults.standard.bool(forKey: "useEmulator") logger.log("Using the emulator: \(value == true ? "YES" : "NO")") return value } @@ -38,7 +38,7 @@ struct FriendlyFlixApp: App { FirebaseApp.configure() if useEmulator { DataConnect.friendlyFlixConnector.useEmulator(port: 9399) - Auth.auth().useEmulator(withHost: "localhost", port:9099) + Auth.auth().useEmulator(withHost: "localhost", port: 9099) } authenticationService = AuthenticationService() diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift index 61cf4a4..f05a680 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationScreen.swift @@ -13,8 +13,8 @@ // limitations under the License. import AuthenticationServices -import SwiftUI import os +import SwiftUI private enum FocusableField: Hashable { case email diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift index 24392fa..dfac15c 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Authentication/AuthenticationService.swift @@ -60,7 +60,10 @@ class AuthenticationService { try await Auth.auth().createUser(withEmail: email, password: password) if let onSignUp, let user = Auth.auth().currentUser { - logger.debug("User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")") + logger + .debug( + "User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")" + ) onSignUp(user) } diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift index 3fa7d90..7bd55c8 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Features/Details/MovieCardView.swift @@ -15,8 +15,8 @@ import FirebaseDataConnect import FriendlyFlixSDK import NukeUI -import SwiftUI import os +import SwiftUI struct MovieCardView: View { private let logger = Logger(subsystem: "FriendlyFlix", category: "moviecard") @@ -34,6 +34,7 @@ struct MovieCardView: View { } // MARK: - Favourite handling + private let isFavouriteRef: QueryRefObservation< GetIfFavoritedMovieQuery.Data, GetIfFavoritedMovieQuery.Variables diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 0cacb1f..7e90093 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,17 +1,3 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - import Foundation import FirebaseCore @@ -700,7 +686,7 @@ public class ListMoviesQuery { rating = try codecHelper.decode(Double?.self, forKey: .rating, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + tags = try codecHelper.decode([String]?.self, forKey: .tags, container: &container) description = try codecHelper.decode( String?.self, @@ -1087,7 +1073,7 @@ public class GetMovieByIdQuery { container: &container ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + tags = try codecHelper.decode([String]?.self, forKey: .tags, container: &container) metadata = try codecHelper.decode( [MovieMetadataMetadata].self, @@ -1255,7 +1241,7 @@ public class GetActorByIdQuery { genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + tags = try codecHelper.decode([String]?.self, forKey: .tags, container: &container) imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) } @@ -1316,7 +1302,7 @@ public class GetActorByIdQuery { genre = try codecHelper.decode(String?.self, forKey: .genre, container: &container) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + tags = try codecHelper.decode([String]?.self, forKey: .tags, container: &container) imageUrl = try codecHelper.decode(String.self, forKey: .imageUrl, container: &container) } @@ -1638,7 +1624,7 @@ public class GetCurrentUserQuery { container: &container ) - tags = try codecHelper.decode([String].self, forKey: .tags, container: &container) + tags = try codecHelper.decode([String]?.self, forKey: .tags, container: &container) metadata = try codecHelper.decode( [MovieMetadataMetadata].self, From db879da1c3b71e3f98019aa14b70b9023829a321 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 13:04:24 +0100 Subject: [PATCH 46/50] Added missing copyright header Signed-off-by: Peter Friese --- .../Sources/FriendlyFlixOperations.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift index 7e90093..d04415e 100644 --- a/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift +++ b/Examples/FriendlyFlix/app/FriendlyFlixSDK/Sources/FriendlyFlixOperations.swift @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation import FirebaseCore From e16e9b68d2217b4eb8ccc4bc481bce97cb61dea7 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 13:06:09 +0100 Subject: [PATCH 47/50] Change order to items to match console Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index ecc8d3b..0be589f 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -81,9 +81,9 @@ Press the Run button in Xcode to run the sample app on the iOS Simulator. of the Firebase console, click on the "Get Started" button and follow the setup workflow: - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. - Select the option to create a new Cloud SQL instance and fill in the following fields: - - Service ID: `dataconnect` - Cloud SQL Instance ID: `fdc-sql` - - Database name: `fdcdb` + - Database name: `fdcdb` + - Service ID: `dataconnect` 1. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance can be managed in the [Cloud Console](https://console.cloud.google.com/sql). From c75f65f7a4f241a7ff620e7f714d51ddf8d5d25f Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Wed, 20 Nov 2024 13:07:54 +0100 Subject: [PATCH 48/50] Fix trailing whitespace Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index 0be589f..f6d3348 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -82,7 +82,7 @@ Press the Run button in Xcode to run the sample app on the iOS Simulator. - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. - Select the option to create a new Cloud SQL instance and fill in the following fields: - Cloud SQL Instance ID: `fdc-sql` - - Database name: `fdcdb` + - Database name: `fdcdb` - Service ID: `dataconnect` 1. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance can be managed in the [Cloud Console](https://console.cloud.google.com/sql). From 9223babeebcb3cc0babcadc1b5d79b35d6c212f3 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 22 Nov 2024 17:54:30 +0100 Subject: [PATCH 49/50] Ignore GoogleService-Info.plist file to prevent accidentally checking it in Signed-off-by: Peter Friese --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 292489e..465dbf4 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,4 @@ xcodebuild.log Package.resolved GoogleService-Info.plist +/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist From 8048a92b30a55308e60838bf6b96a0dbd6660eb7 Mon Sep 17 00:00:00 2001 From: Peter Friese Date: Fri, 22 Nov 2024 18:36:22 +0100 Subject: [PATCH 50/50] Update README Signed-off-by: Peter Friese --- Examples/FriendlyFlix/README.md | 66 +++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/Examples/FriendlyFlix/README.md b/Examples/FriendlyFlix/README.md index f6d3348..66a19eb 100644 --- a/Examples/FriendlyFlix/README.md +++ b/Examples/FriendlyFlix/README.md @@ -8,6 +8,15 @@ This quickstart is a movie tracker app to demonstrate the use of Firebase Data C For more information about Firebase Data Connect visit [the docs](https://firebase.google.com/docs/data-connect/). +## Prerequisites + +To use this quickstart, you'll need the following: +- A computer running macOS +- The latest version of [Xcode](https://developer.apple.com/xcode/) +- The latest version of [Visual Studio Code](https://code.visualstudio.com/) +- The [Firebase Data Connect VS Code Extension](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.firebase-dataconnect-vscode) +- The latest version of the [Firebase CLI](https://firebase.google.com/docs/cli#update-cli) + ## Getting Started (local development) Follow these steps to get up and running with Firebase Data Connect locally (i.e., without setting up a production SQL instance). At the end of this guide, you will find instructions for connecting to a production SQL instance. @@ -15,14 +24,6 @@ Follow these steps to get up and running with Firebase Data Connect locally (i.e For more detailed instructions, check out the [official documentation](https://firebase.google.com/docs/data-connect/quickstart-local). -### Prerequisites - -To use this quickstart, you'll need the following: -- A computer running macOS -- Latest version of [Xcode](https://developer.apple.com/xcode/) -- Latest version of [Visual Studio Code](https://code.visualstudio.com/) -- The [Firebase Data Connect VS Code Extension](https://marketplace.visualstudio.com/items?itemName=GoogleCloudTools.firebase-dataconnect-vscode) - ### 1. Connect to your Firebase project 1. If you haven't already, create a Firebase project. @@ -54,14 +55,18 @@ open `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/movie-connector/que ### 5. Run the app -Press the Run button in Xcode to run the sample app on the iOS Simulator. +1. Open `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj` in Xcode +2. Press the Run button in Xcode to run the sample app on the iOS Simulator. + +## Connect to a production instance of CloudSQL -# Connect to a production instance of CloudSQL +Once you've sucessfully run the app locally, you can set up a production instance of CloudSQL and deploy your Firebase Data Connect schema. ### 1. Connect to your Firebase project -1. If you haven’t already, add an iOS app to your Firebase project, using `com.google.firebase.samples.FriendlyFlix` as the bundle ID. - Click **Download GoogleService-Info.plist** to obtain your Firebase config file. +1. If you haven’t already, add an iOS app to your Firebase project + * In the [Firebase console](https://console.firebase.google.com), click on **+ Add app** to add your project, using `com.google.firebase.samples.FriendlyFlix` as the bundle ID. + * Click **Download GoogleService-Info.plist** to obtain your Firebase config file. 2. Move the `GoogleService-Info.plist` config file (downloaded in the previous step) into the root folder of the sample app in the `data-connect-ios-sdk/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/GoogleService-Info.plist` directory, replacing the existing `GoogleService-Info.plist` (which contains dummy values). @@ -75,20 +80,43 @@ Press the Run button in Xcode to run the sample app on the iOS Simulator. charged for usage of Firebase Data Connect or the [default Cloud SQL for PostgreSQL configuration](https://firebase.google.com/docs/data-connect/#pricing) during the preview. -### 3. Provision a PostgreSQL database +### 3. Enable Firebase Authentication + +To be able to sign in to the application, you need to enable Firebase Authentication for your Firebase project. + +1. In the Firebase console, navigate to the [Authentication section](https://console.firebase.google.com/project/_/authentication) +2. Click on **Get started** to enable Firebase Authentication +3. Click on **Email/Password**, then click on **Enable**, and then **Save** to enable Email/Password authentication for your project + +### 4. Provision a PostgreSQL database 1. Navigate to the [Data Connect section](https://console.firebase.google.com/u/0/project/_/dataconnect) - of the Firebase console, click on the "Get Started" button and follow the setup workflow: - - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. - - Select the option to create a new Cloud SQL instance and fill in the following fields: + of the Firebase console, click on the **Get started** button and follow the setup workflow: + + - Select **Create new Cloud SQL instance** + - Select a location for your Cloud SQL for PostgreSQL database (this sample uses `us-central1`). If you choose a different location, you'll also need to change the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/dataconnect.yaml` file. + - Fill in the following fields for the **data source**: - Cloud SQL Instance ID: `fdc-sql` - Database name: `fdcdb` - Service ID: `dataconnect` -1. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance +2. Allow some time for the Cloud SQL instance to be provisioned. After it's provisioned, the instance can be managed in the [Cloud Console](https://console.cloud.google.com/sql). +### 5. Deploy your schema to production + +1. Open the `data-connect-ios-sdk/Examples/FriendlyFlix` directory in VS Code. +2. Click on the Firebase Data Connect icon on the VS Code sidebar to load the Extension. + a. Sign in with your Google Account if you haven't already. + b. Ensure the project you created in the previous section is selected. +4. Click on "Deploy to Production" + +### 6. Populate your database + +1. Open the `data-connect-ios-sdk/Examples/FriendlyFlix/dataconnect/data_seed.gql` file +2. Click on the **Run (Production - Project: your-project-name)** button to populate your database + -### 4. Run the app +### 6. Run the app -1. In Xcode, select Product > Schemed > Edit Scheme, and then disable the check box labeled "useEmulator" to use your production project instead. +1. In Xcode, select **Product > Schemed > Edit Scheme**, and then disable the check box labeled "useEmulator" to use your production project instead. 2. Press the Run button in Xcode to run the sample app on the iOS Simulator.

    XQiGN+QI-6%2UX%xq5g;8Qvr? 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 z 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̛Z0+nc6SfYlHfS@p}I5d?DOm_`StD{{V9R=joqy z!0!v>?%jjB<6-v&`1V|Xao;-!bc^M4!bZb?g=FSqL%McM=PjGrZTnXBWI&Y_zl`}D$qc-l&K+5}98 zLe72qAjQyt&!;DA(x47~5(bX4vZI09dzWxH#>t6|OYr?RhG)%twolIcyR~yAPuk#P zcFrFr`QB%9P20A7XdFx)zf*=!%M;{Mh1~YPh{|TiGcyOj*W=xzBE@?j$2)90ugG5; z^$Rh6d_HlOoYNyEme{?;J4`#rb^icP=l-182H0)!Jg&o+h4TK#-QghFXqUpNHIS;@ ze>$<7nNpLqD8M%ZwHu)%vG&eOljU8Zpy$xw9I}Jsq7~!uZsPsEc-m6RnObD|S7~3G zcMMy0g`)n~0oI~5Y7wM61cHQvs?SEG{kj)8^3CFTO6V4;n`7It8FkM#;CUOj@iJz# z0e)bmKSl$$X!#_^;95L-t`=2|74jE|U$Ib&8OdrH#>>CzcaQhKr=WkFqqg~+Klp2j z>(_;P?k49mG^F2}TD?ut9p>s(AFw}VC?1QVG!3UUBqOLA1a-2DU6A_x^$QnTA(>J5 z+punP1cqPaEj&iQZKhm^WgFzHJP^gQ{^bCs>l7>V1b%@KFR2`*#dGqCznz#KadfmJASyeWy(cZEBOI4KjDB3d8bsM zMc%&O;0r1#8~g9qOrAiy{ILGtqXE<9nMeM6dw^?NlwYwvEe=zTMQ9W_4!}Dfm@f~D z*>$dc&l6PrSls?dLjM4|eJXNQA@uv-Ejoq{+=j^1!QcS_2~(szmxyn!ms)mp;-C9} zaX_<*st;%KOC2eGO3Xuau%L8heUww8v`V2u$9e=BDH~S|r;sI?2QcIiRR9MKE1guw zl$0~NsxM&e@%Z;>?ER(Maxj=@KQ!;hu+d8%k91Y02mWInF!v>8bWLoFba8f z&Wgiqr4$Z9%WOZTPGemLB$BE*{{X`i>-z7Y5Bo;HkjB)l!yU zo%|l37^%;~@?W#ug-36yiG)_zC5q7xh$D?E@tgVz5f@rM$Z*Ad?60l-PyYa`xQIX9 z%dgX9{{ZQMi;uuDF|zfAj3g>(;%dwNzh5{eSHy&v_}2#7As31lBVjZ;S5;Z@1cJW7 zbHwjoZiplegQMws{{Ypq$#w&DH~{CFAh%InWMeyQZGhwQ8Ef?Cci?J(p|V& z3ncMk!E&vPMHJ)xmG`V#lb0s(xI;jruI3bX9^?v;UiJ60Lr^E^j)6((loe6wfpl&j zMj@E%k7n&D-uvHbz}Z<+$>cvgx9|JSVLw`=v0|7f6SQ{D)!Q+!*{3{2P-om(5LC$s zBlyNwakVuvz8xP+`oWko{&C#qrHtViPCaBvYcVtH>>0Z4a>i^P_k4|;W1ujU{BYYM zD^<9MW~K3RMX_nZ(QxsmE_6G_8s|h6uJ~lm8FY>&UMb@=yQ5k1@o!EUFeA$!vbGjh zH_SUEq{GL0s)s$#G+(+?95;&(3m$NowAnc|n{M+Uu0#S!d6T~y@KiJ`apHhI$0lz0 z6aJj}BZcI`0e2KN$nBHaAI*-vWvKE}MtqP3+jdNfWZ`!{`Iy4LutbE5-q|$B$jJ8f zr;+->?YZ5_tB-=BycMj+64tH75;T{FMJ^^|8i0--A$cCKG2tBCuETyu8zeokdiaNT z$?j68XUe|&h6&=m7ykgHzG4$%eV648t9AOri2a|l$GX=8%DvPs4nX-EX5sd4hy10a z-|9V+9x?7K-+=7>^WvW=#!oIK*?WI+Im;Yux5kML;a+xhZ*b(l?hHj)UYFo_sO;!nN=o$eTd>vjj?_xe!T?*(^UKo7Mh(*^V)^k z>-9?~xX0nc3ji>`a>-F)@m}{|iT;z%HfoKWaw&n^vBAduGx#+Q{Mk5B`k#~HSK@!8 zIru7uy~85X$nH5`FsuA?;olngr#$ z0Zy6gnUP8`3;T*_t4)*3A__1h0;g(=z^i*5V;z-sVa#urT&T_m`8z#g#~57V%^hBZ zIeydfUgO&Pk9(Faz-*4%IES~9pCB(1>}yb@uvT3uAn&AjMhTeyl75sUU%6+iI|94s zLV+fDB(xWP{{Tmdf2I7GzrJ>cm2xMP?j)$LNJpfq@kMNGU#!ClSM@c^_Yc#?eHU!! zE!WH@Kh&_B{{X-Z_1#=gx#xwm200aFa#Dy8vi|_;ogc@-Z@>gXRe~bYWqz8`U{Wn^ z%}OBC4HSZyD*pWvt6IgMGOmihkqy95IDbXSISqO#2HD z{aHO{(2M0BA7fVNprcB3EERzu$4N~s7&q8-8;1pUE}VAEl~RYtG3e+5QAEK$%W0Gc z@{r84Ks^_t$(h+)(2qe_maBP5Us^3C9BIe;5VS<%jXAS_KuB-Vb!vR4Aq@|_Dgw)H z+lwx1I%MPtfU4OUxd+9I1eTY|7v-~}{9Jjd{Eyu5+sFFMd|xOZN+w26Ogn20AiZ{L#MF!oZWyORarpffnQwLpu$`fhTwkM(M9o) z!hH4!esFTD$3XOMjIj^-*45R@-IlM-%CT|!OW7ygepNi&lyQ%Uf~2)q72RiyCiQMq zZ`MBNY`*o_zBJiE<$*8VWSp$;+~rx8Oark1{1?9-#ooIYadLbZ`92E=5{)en-7g}_ zW}=bDM^h%zf9vxe(tbzr{_)$dKjabfVl4S_(~WDBl!W*eF8o7^NWJadbghkRAajl#~O=HCf_jO82R z?!BSd@TCwcsDEp%kn6oSFM8N#U=>-9qy0MgcN6kH)9Xd6@2`aGAN4^Mi5zE;bh)`U zu~f>d(SYMG*3#*3ix<~F+1qFWf(TDq1d;#_{DXSZopaIH{Al!?wXOdE^P{Ji@z5{} z(Dt8?PoTYHfY}iYIRQmo{E;>KY4T6UuiBln!SV2slD2u`MELB*mTIoJ>beDS=Zg%i zZN=+DO*dWHU30sNsn`9@bX^RN`LU-RYgS<`s3?EgJ|v>eLE*B;^sf;q-8-ImO`L2} zokmODe^5IH7cKJ5dXsu)GjL5v0_ZA}%(K<2a!Jw>^2bFnuB49Rm48v$Y4cx@xqd3y zB^RUwRgSixXmn_)JIuQYG7#l*8n2Ibk|WZ5I0pNw1mEA->>c$!HS!tdT@CTsN@h%9 zQ!S(WDgNoQ>*U7k4;v>hI~%pjbIZxf82mm}+VDS2{zchW2O`wM&O`gu?%3j~9`A^O zoixlwRy}Zvpe<~g>{Yo^$puPX@?B<=%E$eH?kRWSS=Ypi+;Ap-Et@r9FO@elUyozY zH|3p^5^fCU;d0fu5bKEpp+T**m2Lvhi`JJf6NA z2ROeV_>XdaPuh2l8+<>!W#{(0;P+~xcb?Oh*cpnucGk!`==lU}R2?e?GprIalCc|N z3w2Q{m2?cO2DYLjj@wF9^5`f$UtYESO%-w821)mBVDCyWS+Y!EjZW^uPIqC9kFkRq2|vv*w6dM++7ZYZG@aPTULOl*1cZy%PO71$0x2l^kbVrJ(Mj>E@1~WnTHUx#T=N$rE9=mE&$+fdoD7#)2T>aRyK05~F6=~q#m`y1UnZ=5FspRz})cK$b!1^w^zX-oX8E6_wZjyE%f5{c*8bPNr1WmmMYaLXa~sq)q1 z@mah2r8~AGw_mMlQ{{{Q0H9-ndQ?_WlVZ$Ukx-=*#Hn=2n4b8_^UGDzbuCKq|ilNRcn`_?n=g z*x+zC?yrFZkjHgD7IZ zk*zOWLHv#J2a=g`6ZQ|jN=a4(x4(USRagG0_=dj?o=;g5x9)OPI3P46AJlj9d}{%X z{Dpgi7GN~|xbN1_S(vLtLHa~EIy6q7d->gj_Gz@FfR~9ia8ao`_KU^r(&G@I5G){OA z^eh=pi3fV($^sFfJ^JalwO#-#eoo4_5`Xy23F25Ee7$tj-;a@UBUASfpNcl$@sy+ZwxIg<8$>Z`?C7sq8F>Aoc^$_qeh%G=`7hD#9q+cD z@7?oo{{VB5@_af}57VstZ;1Yw=XdJjg?wu~)q55!J`M2PjNa}`Wg@qA?kD8^$GH4+ z;~lHDyYcVeB+LH*T<R0zQa?U_W z507Ty_U`$GZsJeuUHIg;aGWu7d!&~rTOK!Y8-9>gvU?AIsL&@WE2Trhw#CDc5gzly zlN#ZoxnLE4QmK<(=lXL@nUrVA+ONu|yqr)+v5(hsl@mL;f`mB9qpK)?EdKzLX|9(Y zXlmnX$+F!}$R@>s^ftyl-}b*A&+N6sof9gFNZh+S4U)dJ=Uk{%gD}hJ@pa^Od|bBO zabPkk)6ohCTz|?C+=lr=^p)e4GO0!1zTV-xjxNt9e7Q9rB(mhNTeMbnlORsxghyYli0$&o z6dOJP(g$iVRvK-2dS(bf+K}H>=|Iy_lagqo1o0|Jf^=Ad?Xw`9`4axRv8{QkfM|{g zRz7Yo%ZJyA=%kFk<;SgVl7K~B6&eK@7$PdE0f9YyW3*G`9rL$g=#EtciQyx7(l}+f z%~u_NRQr?mKZjBRiTl3wRmYcI#)3~AV637u`hleZ$`XJT1`SXYs%d5vuV16x$}ilz zw`06Z<98Sg_)0l1S+K;4%)ho;<5spmyD#Ob`w!KA!nt1@#_lnP3--q#mC~ux{(i)c zTmv}UG0{FgBZ~vanIRiM5bk)B)e54mPR8F|9wCq)Mak$WW#q4-J)`TFS8^Bi22*d0O_4N%J$KThl^_qXJrO4%)d)>->e$n= zklH`-*TsHO-F^+-((rQF@3g9R%+A%_J8Jii(5l#MN1k7}r;f9TDBtcWJ4uz)1S8XR znv>6wj%-d|B@l|w<^KQ>uf?-b@oH<@>&fx%Y>Ft2xu77r{3%v{D(p&Jaye>LloS1B zmj3|Wt?IdW*pxvF6LciHezaAu+nf8_0g#Sk`L$6$K-NjumCh)e|tAgDK{n=jW*^PoAy?49l+-Zy&M_(ZFCEnPLE+7)ysQbR>iDc5(2| z{;UW7XY1fL5dB5$4BwAC4yto=CJ zBv`PimYM=c=&vq&9=g7ovUz`4Z<+15G|i`RAKesyhP-Sw;%E)2N(b|r= zt428Y#(p_4CF9p_?ik-O`2IV2Tgroh>8>&Xo#e{$s8>fvN^>Q-2iCiHf6l=8w|c^g z1x<+~;|U>xkY0NNi&4$;DLEE~_8)vSSbHzkpBeEdjH$wjP4f}ui3=!mYdKYw5Xul| zRi4WfJ;yed{{T#SW3MPf(vDS>*COx5OHy;bBX>Mn;#tCrka4Sx-XFL33=ZX{Hp3$y zI$tkejt`1cJG$#5wa)RrGWLv^{ExI};deY?67e{B_@56s89xuq_^*F6t#JIkvncmQ z%-6>|Pj){#^N z)D$!IuotXss7oIrFNw>{n^%Tpr6|g*9dz9WVxQ#xbj(ab@c{49A3l7J@P0G!tS3LX z@0lxH$NfUe$%oJTuWId(QQJFzWX8r(@R=Wx4#$e~FWI{eQ|8v6CGdCd{{Y*24s!(U zeZ3ET`5it_@=N@ayZ5gD0Cdsr7S=SNg(l>nJeYX^pj7f8Cz&a{c+)8}%H$++F(u`k zyZ37toxkIq{{Rn>!0xgDg#^0-OEVuueLFVSYyEmz7vsIE{{UhMRsNFQ2+}hm4`c9~ zE!2kD7eSb|m!QXu6Ojc89e)-$IgI?gAS5UE?issv^sG%;M8=!&cfFlfg+SA@9&1UA ztchT)mT*_mf6?4~OR)Tp8N5kJcLWUhqIVo2Jc~UE;Fp#K zA;~_zOFmgRgZ^>)?|HP&%W1z9DV1~uChE)z`;q9NHZ{Jxhqaun?-G@zI=9mmTK~9AqlY+Ah&!QGJ zX*DMEV#=hI{UPl`5;^_yvmBjsz%qasZ9)J7vxffw2mB#^3aZ~=zwRFj z3VvDf1HVTxwbcT?MS`Ly-){c^sWFRuS)O)!AK##UfIOlU`XueSIC~IB6X*tA1`_~| zJ0@axK|77_&~J?Vle>Hex~-u8Od1Xqo;P#B&%&Q}?FXN3Vxi(}@+DOgt{Z+zdGZsT z9hj?vD_l%mjBK1<=NVrcAaSlg%f2I#@qFNecEr2yA1~sT68RTmXFzq9hE1C#Z`Ll> zp8o)rjHjfYTblS6$24YLezD0R-g^X4t1R#X9+5#(Px;?LzmSFpfM2rc6mB37@&fu$ z{{Zkct?&R3t5ACBQ24^B^nG=P3CV|}{{WqIzbIe+mER=w`J8&3d3Mg!<_CxDq8Y7f z$jv6q(?D1xaV;Cg_OKLiRQEM!?s>>65spn7ZIIJ1>@oxSRbo<(zfe66l@SEKpVdx} zzyi0#`~EtiE-KD??b$!+zbow-N6?OP^`01a3xErqhb41hvI<$LrwSu{jIk;m!vz@W zy8U6so<@IR&&DR)@d{SRPbL0ERZH>6Mnk_c8T{9Uh+BMW6ZyX8JF$d$M?9i;KGjnA1*dbadRU=ak5l2%;$xT z*e#e;#60Zdx}kC-Lb%|Xn|~QEq^Pj^HfDH(3q_9=~rWo zj)B&GEQQ;#eX@hayM@PNuV#W$b11W^qENY9yo%=K8YDnwDvQ^0>>bmx{@8a^62)Q3Y2;U?(DIb{luwX8E-q;A z7|*HPEHlT-B}{M8&f`3r0@dy?I8)E0dpCagUwg;~SULD|?LFVGn9^Sy`DbqVEDN67 zaGjsLuj(E=@IHI-3fq-2GH{&J8}!F5`xkreJ-)RGkK8jJY{*4iphi%CJ$Cup61H_B zQ56cJ$j!MIA((%P4GD960TubH*sG!EO$YB1`@{SftL;Y9u<)B#2@<|8e2u?%~{{V}1-3Jcqnn$Y~i*;6BO5^D=pc8Cpr;USx7%6b( zur9mU<-TaH2{S-F@&^?qXQUpQdLtdqykY^7ZYoPP)FvhyXt8t5u9dWEr0nTSH57ou z(FfO&bvEL6uTR@tKXSrp?DETpKC;tSvgtw4W7nRQ^7D2eFbmcdr2hc9RYKumU$<`> z{V42z{{Rmotgrm}T5YQmHOYq*W%LHeOG5Q3XZ&OF(>zoc@jK}0x-1=MG=HNL)0$Vu zFy8+FsXOLqB)`U^fJubYu{_SWp02380_-mMltp2;x9OAhad7=F1hUz8&s@rVx5t$rISy&i0< zIZ%l-_E_^S`;bvEtHcFgC=2~cg<{3omPk1x^y*^#-;cd;7NfCpN0ps+y*smnWkRI? z08XnlnpOV*$pd{#G|9@6@nc&7Fuj`xAF=lS-`j~}SU_@7OlV`|<>qF~7ZNB9ui*Ij z@w5DjRB)q8SF!y^`rbF^@Efo$!0(b^Pxm=Jp@CE1AgaUcXHLZs-ahXH1ZXt-q%(ha zKG~R=SHg6TKxkyuLuO_0nSGd#0df@O9FW`u{{U7yV?#f;_oPNe%0n!KcUi>H`yCfh z5b3@D0EJ+Mh}O^NuO!2)IVt1|H$%kWdmtb3fnV-P+0X`r5J`1b8URhU3i8-f>An&- z^52T6LKtPZD{tH3{^4?*L!QGg&uu$=Lp(zm#xcr|4u`VbQ~(s{w!l%g0YLVHYesbT zHW-F;q6a;l9-~;~A;-zl1RZtpzma!8fp;*{b4&{TX*hQt-<^XF>)K{1hU1HLwaurB zK0YdaO>z<_6jIZ_0$X>*#_t#z7&&lz;X3lX$Hj9#GxILPitdk%e3WcVoaR6L7dsm= zfDTik>iG?75tZCt#Vp)s`m(ZK_1ch4NH_xb|CpIU4@IA3Y z27vq!%|zmM3b8HLCz10prnCM)>U#NKuhOrPf1ji}$FUfFwPvc#`$+R^cXP=nid3PM$4Kh%=9@E@gzWjgVnekJQ`B-X}Z!$(~rz?ccizX{gtfXKTX?rjF zi`rkgd_OAVB5#$2b<3Ko@#jyeD7#*?Qd0%@RXmuKC7qo#(jbJHK5+XF>~E^&IPERl z+WtXYpDXorSMmgK6o3gV(rvY0fFQ8=r*}+t%D~NI`#h7*6wh2tZ;y6<-Yy@w(v5tS ze+#QEwkXa~bH z@#L2e-2OG*`#*B4Qr*2)SWv<3GWk!$KV{vW7xz7}AYbEze6!)b!{eRf>zNdO)!awQ zv+^=e!Em#idHt^!Cl5NG1?_o#>-6*HU$%hr;&)S<+b{9%>y6&K9tU$zqIW2*d1U0; z(@FAWgg{hPgR?B>FnyjS@)!4vX^hnaktwf$;Wz*NugV*TdqS-7&s5bKvbb zIZxgD`~0)yxgRI*o$usX38c!XOj*g+EH70aS`7o+yLWi*Ihfd37#7RTesmb&R8gFQ z-p`fo3FG8=+h7F`uZi|KckcI<+TSG;FCz)x0`Sl6SU(c^7h=!tRZo%r{T?}P9q36s zXuvkiiUO5w9sSIqJd8K0CyvF<@1spa-N>Vs@!zegYQ-xr5+?i2B{ zT;$Xhd|uq$rxz-H$NuxoXIx!`rFjtNiBZ*R2;iq>waI*LIIi^HjWaqoHEt?^E|6F; z4(!tW^^sR$I4L4i+ezA><4q6Roc%VRn`?8qy;u1c16AI~gBo%b4o6Dmbjm6RkFm*-XGtyXvKQP0MRX zWF|p0B^YS$qEGurwm!$`vJ799+{m{70B1wUD7j`hlPV|7y`AlkAX))hql*016?+_* z!;M?I;q&YD)}Q?rKzRzM?fOO4((#6JL;iDc}22{-gI;cG@8AJ^EfG3pp-Kjcnq| zzhV3HN2?;dCBD8%+b7<8KXbq+sai|-IH_dv#Z``&H?X>6%uM^%g#rOe$gm)N`dJ@4 zU3JE(zyKUU!$oU_4Pkaw#uXxBWbrE3Mc-m`0Dd#2<~@8 z$BTQan+7evm@B`)yWwfNsL6v4fKW;2wLXa@jQ;?)A-i~OUx{2#h~AD$gHk34E%XJE&=cFddC4y>w}?70u+O1za6`CH`_{Zrn=5VlE&J?~hHV=*_!yZT!pJN*ln=2Z%kA!&v=iU(ya_;=7 zb^D5y=$8pH2aWv&Yq_#ESyC-63#qJ?gMI*CN8(xQgWoZ%^eGm99S_X$jwgQ0^mJUF zzec;N=XTEP@yBv22L0|IQ)|Urg7}nui^mrtsH+0xzuR+;GOY2b7(2On<)4*yN_=a- z<@UB8#FZ}xo3yVSVp}n7zCup$kc^A#371@%4N>+el?SWbbU~3h= zCQAYma^iupJ5lbv=LfUk5yJLKtNe?yp3RwDH^?-TQ;hof=3;kTaXSQD>?PIAzLc7#h~y zvmyJ0&uIANnib6}8`re|0HOSEx%d9@3m}JRfWYlDfpVD^$f2WDwXa9N?fXJSk%`T> zB$s}T{ymY0l%*?`D22|4#BDWm+1{+sx}3h;d%c_E{{S)Vzaw$S1H0?BcT@V0+wri! zQGPv>lo_z|uo?2P{{Twwlkx85kt@HCAG>Bc6!`p4WBFgnJ}pQUjfeWjY66v2MP4R^ z9f)Nlr#CFc%bp{*wmRnj06PT7D8p1iCS>Bpx1{MJ&gLVCW*++NjUSwTp;x=1<=DP8 zBMevgpK!+RUH9ex06)uf`y6DZA8UU1F6P;@@7?yp9Q>VWla6~%8Hecae9cbu7bm%Q zbjQg(`vN_;yAIun-Dlizk!M86?AU4DGCPDBxS8S7_`Q59zmCE39^K#5Dw3=u!8*OE znU~zMtf8APCX~AOI=fgkb;r>U&F-_xT$wN!zsD)n-)C!YOuwY zB>7@Zk*InbaRv#Yhz3CjjE@M(IF9ydUSgNh1%deJvm$3J~$MI}F+u6o8 zUKTKwpY)Mb{8zgUB^A4h0<4J}kk(Bw;0jTuM)t^njDle9F=&4r)(+NrMpkXhwy?tMu&Lm9+ZN4bsd~ zI}M@_zOVLLuGP=21)J~3;?p*rI+)!YC%z-vev3{?^2&igfML0E*4sQ-wHL3;(Nobe{E3YfKzX**q{|`@TayF21~WvJ z=B|JerBRZN&)aeK>#uQCJ47sc@ll9booi){BvP#NQT9+bJseIBNI&DF{KTs_3j?Nq zg7(k!Z;hd7Im*moXEDRBW=;~jC^c}UzDwSdxO|7?o$(WnHX8od4HUmKtHOLyPJtt=Ji6gLvZYQr81zfXH+Nk8Y!2+4D80@T z$&CL1b)242KnMAvOA{{?M%htJNZU`>&pRS^Ka^)iOb#YN85r;U%lJ@z@;y+q@_8T0 z0H`9qPi&-rUY25vrJaEM^rwjr$3%X5WZ*gT=pX>K@alY&Oh1WayrF+ zIO16N!gJcgZz;Ne5|y`09F;A?}|A?jW600mlj~1{Za~mvZfPFWcyUmO)NE zTmIur6maSoQ=crCi5qfDWJ?DwScT>-`+BXUvA}xL^b_SHwl)1)NiWKA-bLxs$KoLzZL~~8D{r>>;&5>ve4XHZNR|Uqv(fm-ADxq|*))O!8qFsM4Fui=u zwfa-vzxQlq>lxN~7<$Dne{CS$Qz7x6z^B5JT}?Z5sM(l};A=mWH(l|8?%lzEvHk5v z=FH4RKn*f^b&l2*i9k6!XbSfE!!5=ln@a3Y6!T6rDKhx;w~Np6Ze7Rr*>CEv5Vh;$ zo%1i_J@>cwJaejJ*fytJ4E$_f>47tBJmvku2F{(P(aWHOwtB?Knx!M#yK$iOUf(|W z)=$d&a4z$H_lg)oUuiw2^3sM0#gXPy$P~C>391KaubGxwB#up5V?xq#D1sG&WMt&W z2Nq_f$!X6MD<`&Ou4XPrD^HZ>y~8^{y7wR5Wz)@)W}plVi(uw2bBeP(NRv&hzv+#E zjJn3Ph5VTHX&Z2x)r|Os?04=MUm(Y)ZK~pA-Cg^4leoGco}(;wk8q>gU4AtyQ^a1e9PdS{{Sh+ zG|R+!csrMP&+i}f1NRJfo_}t@$ivGYr`?w~zJ8v3*BGY?OS>Gt)1BTk@7;bo@z0&$ z5+ zJcryr)CGBfTc9SygkY?Ff|R3i`t1Pdsul4Q?|akKA+Qr5dIS%%GIJ$(^pyg&UT#Y% zUII$rR;Mlie;?@LEdD{=EomuF*?&s+8E{QW?c-o)HFwDJn$OC_kTL#Qg^`W%Th}8M zaoFc!g`euv`F>W!FXCa9nNg(Q54!(Rlt3St_D>@|V~3DWDRTVm+P>@y^+i-#f=^#5!R|)AVwnh$fUIDDlQ! z)4V5S_}_c(h^BY&3_M29wDG%M1`~~%a>%buR$u{&0N#oAQBkYJot5f(Rdsa?UH07u zY0_?75bdd%hWl~{f&TzA)ZTX3Vjn<$lJ_iJ&dJ?7CR)8uYPrgi$GBxdV?Ns`h@bKewusqjZnG62fZnuO)aC)q(tw4`9$0PlKC3( zF2}?64Yp-3=r^%O;mGW9{BjjuV@LXr$Qj=~# zb%T{VCx-l3AF1oHcg*jD=T5S3FKw~mNlP;VxG?TrydmxMVdSvO#&S&ssNky(rJrhv z)^OmePV14H;?wZtQziLq&-Hk?`D!JD&A(wDU=MCNFE7Ag6N@`(zxmn^N~*+<`Sf-a zjw9LV>qNHo{(4ADh^D#*RP z+9wtsWYaUyyD^%jJd)94Ip>L(<5`Nh-AB*91^cjjuW0c;a3tnpOZN|zr-u@tuobh0 za*_^rsicz5T>$cIpKG6yic*pyOaVaH=`=#X7G*o@3c=}_knEuqHq393y}K4mK^60U z=nlc(rkVK|x!327p5eT?{{SiN{j0RT2V}qrKl$H1B^J zTxY*1LWpk<^!(?-pk>3gNymK)5lG<&vhd+qO$hH+_*lK4MpzBg!I^PMdv*vq$K<<_;by=)QH6t7aDV8m$*Y-z{_vE&DE!OhFA9wagXWecf}S8Vx) zE>CjC?HDSF*kqmzTm14~ADs58*YT_uNk7INd(Uo)YtwT13sy1_oB*#WYKL9a_`mhAPsU=mZ71 zxJ`v&_Fmy8%J54S7|?5Du+fTlD6?yGDthJkP)na=bj6b&8D3!yi>qMc(5s3ot~YfsN!t5#C+=}0lcaLJSavekYSN>K(zR$GLZJHd2mYjv75>23*Y7n!7d~sQcKfISNvkONfEz)YUOR-8P z3I%$SS7nb_^B=v%@v?HGvao!npTn?lkLG>HElAD}``f3FYsrquW2yav6h6_ypRgsg zII%qZZOg_6)p|7G!PT^-v^rp=j-7~8zAja`k^Kn!bzl5+2*m7z(X~v*_;c3OTo~Pd z^#B<3tp#$R@%n<#`aY>lzmZ;Fl)^>Y3@mq5@g`N8dsVi3Q-qq`1i+WQdTn=d28HqcbRK8l~9F2GDEo|@S&HgGl~G*7`QrUtEw{wV0OOV=9D{; z3#}DJd1!n4r_=^lJV8=O>-6`(uVVREWX`GKjP7u=23zG~Q})Bb+a(fwZA+{kcktS_ z(c5`irnuHkW72Krm&p4izCGS@`))*uGCQ9~l-KO1P3weF^b_9@bOJ9IPq!^>?a8mR zqEGo^zlCz6&;j(lUCuEWT00Yn?YEwh(q%#EvM_L}%W(%Sio%_+~4lJnd zH?l$P`H5-%(=8Rl4H4LT=6}Jnm6ur^s{a5=OlD%&6AwSLWEAbLbnTB3m`yyj+?4&O zJQG)yQZyrrKkCt1e7NgMe`Os64yTDbakI1`NcIl^c?Mv>GN;%4^!!BTXZ9qLPrrK~ zpU6aaZA}R+{fBN2d!_&jviC(jeD2;aggz$y*EbtNtK58YN6HYz7}7fMC@o4>(MLP0 zV$E?g@C>;ZH3YxP5m)4$??kI6YyI|&^9bQXzU|gP-t$_45A!fcB2^A3GA!?Y+n+61~sk zUEj0c9}g?H)?$tkD$6`$lL@~CLRCx@w>Yt2z=DlPaP1G=Jj>?D$TEb!DEN4t(*rlT zL(PR8g=dF!d@q^&?<*g$NA}qL<1SH;UBlz}oy+DO%NOHN=i0kcPYyQ!07|EJ?uQEp zHCZHemz~@3rzY)vvkVB~hZC1sxxLp9H@Npc&6siX68BMV+kAhPe0?5zTgVS8M7>g| zj2GuHl^X6xxgPD=A168;-?es6mEaG)499WDZ`3~ZY$W*i%Dy!< z7Vix#8W&($1B1;~Rm`{%#fxcr^>e_t0 zHXChU%OkM;mg=#i=<%e9Cl39-9lN|^cN`Bp=OWV+H^|TN{4ipzZrzkt&-!ngFg|zM zE=XxenPkuP591T~kIVa}1lyNw^_hUVSFd%;YAR`*X}U#3d=DT#6m=F(;MUF=@y zJCpZ3vs+_Mr$%$){bBZO&f$sN^D(BU9|B^PIUV~CE8*$d@*o#G66(;UFMOR+O!^Fip$Hz_xV6dg52bd<5L9d%+ z(f(WVyn>~cbTEOQnSJl^$By5H0SQVTr%pbZHRw8n8ntSGapX6~bBM8iThjYHx$j?; z_6-o}LRX4!*q-QVAjfo1r(YiKxnCvtw`cBn=1%R5F}sVbcv@_1%)kQWv7Oq_Nwr*T zhxvELBl0fI0fzED&lix#HcXi}j?-z;cC4ywgZ^|i(93EPEYFk|~`<^7R z*aTzOz?sfnfB*&S<1t%zuH4kHNsA$FzE|=bFOqzRSi(ayFblefv zc_A%#B0wH3ePv)JDX)g$ty3OeGz4d%gA>Brp$mxvknq8Ls*keQ zEFAU5$nIG`xl%ME+0fa<9xOcRWf1O)a(_yGcGN)*%vePj z7RLQI`AnlJE($X-+jWilZ}LoBq2;zV6;*T|Ulgmu8w)qRHSnZA`B4)C9}q_u3Nnr} z1u$)R^KxEj20kTj&)V_)z_0kn#^+Jlvs<+H#Lo1+vEj!qeda2yF6)mzQL>LJ;5>5s zeh+AasmbmY`<&P=Br+i`CzZ~an%XX#Q5K@T2g>nHK0VxpNI@nP-|6>i&sz@UW5$_S z!}hbqCl@Cow??gG%s66XE(dMO$V3A9ui?i6iY2x7p^DJ84Dm2QVAZ>qNMp5cmwP1T z_MZbhZ;ng9Z!QOY?-SU+eYLZXdga-2JAZHaCuqs4v*vfKU*m zY<1dP_VlMTN`c9ElAEfk>T@6@`*kFlCRE~MoWHhljgg(%`>r)Oa>>HCij)0A`IJ6W zFOG>!EpZjm+SquwITKubg{qmWSFN)l1wc@C8?~pIK0%AEy|6s9Kb{-W()B#-mWs|K zqcp_oVTVkd#KdL_<+v93cj?v#$P>7;cNS~H-ZPJb`bF9MeR1fxPn!GR41UesSBYF% zc?i&Ic1-jpjzyhRc=~?HpQGT0F?IyCm$LU+vR2TOqK+*r{{Yk8+mz1h4B4~ogs=K7 z+jBBej!sc`Va>bWZvOyE?|s9y@MU~!>Ro(-)6VYHe-&a(<{2G>P|-*SmXuK}7}S;e zkU9=d`LS2t)!nF?J{=MPc7{XBp}A_Gj+VN{$da9CmR0Tea>~lWonOKo*PEy4_i3G1 zd080}BVyf;;aHy^o2P5-3M*ZTWPhV~in%S1Fxne0+B<+VMT@`JP9L%NLRBXS#SiwU zbokXfoM#NYHF+Y1T4sKf_RNsfe0;Af`v>QLr+EJW8tifIDESW0aE>pHkr2O*4eS+i zSdk+71azzda`fImVWiD^oxanLBhuNQ48)RDowCdW>qHVgbnJubu2p}iZ-jhPALZT2 z@G^6TGD>EOvi%)vV&`#&N14R6wjDSr=Z%uoHkZSi68PVTt#dYBjo z3^)`s_4f>SBE&HN01Nr(l2c^zn;-4)pNUK5Ik~bIVf%RVN#p*NLPuw|N>(5dp|17tRPOLH%fe){GMZPrewATh_I~4- zjgl>oE>lNyw;SUAhQhmWAp_Y*qNKUs=YQN3{!zpQ2sRjO?}KqC@z&1}2_XLfmH4k` zUj5&DZ)`d1kLIVl_CJN6j^n--Ik1UyXL>^}a#+I!J#2}6aexKz1tvfe-&F%Q@Ex{&qSj0)j?@5ul-+RFHN_-$ZbBDs=kf7Yj0ZuuN=`vdgZ! z4}Q$}R(V$*e$`*4By%t?+hyE)MmL)tsl|`#Ydt<+eW&w&(n`y&%2kQR#q0lVb z1eIqe+NS~a=@=alITk*{4Ul~mC*N5mrD@GneTsqCX#FMZi3~dBe5T^HK<>Sd;$IT@ zwrS14mHUQo4hfX&lX1w|5KWJYM+GayUkY!YdYAe1kX#vx!o7YcvXL)$D%#^bKWJQ zGLX@JVU*p+zh~#bNkw86aq??|I}RR|pCGDEL*w5pe%EQsA$-yFHP}0k$Noi(JP#WU zebN35_%=B`gE4Woc|I(wRA>(Ch7qSgbls-;c{HT*jImDHZ2hkei)0H-n=ZC;ZbB&Acg;IC@MTv%mM_~}~NOJ5A?vVAo|FJ01e#O`m5v|2ti)KKzr1e^t6+_uY( z`8h0`RGNiGk~U|8Hqd@rRV741u>KeFY$B{{pN|=JmbiV3y5?g} zzAVoEh}I*OX)Ja2%-^4j+Fkzu=ie;(o>PzXzR5Q2_{xcWw+Q#nd4j{{Y;ae{&~9A;{5u zJWR{vU$;hLwaHdsn9nLDQN1MrMjm{o@TN&NloW{qpBEddK-DXtlN9Dc68$;#&&2|10<{jc>IQhnMFmFbmCG8#KAz$S* zmvJ0IwZ0{h@R)qEOW88-l#%WCuRigWEbj5#@}Z2fTjbG_Ncxk=GO{qyIKiH=$NvBh z!F7-xE2C1yU6W1>Dno!yx3mSwZE{oUZ#%5mulI6<(DwfTm3*fXFiCgr;+Uj;0{o}A zxnBgnJdrRbu8@M9GKS&Ddlz7^7fz9 z6Pt#EGvuAdHc|Nh0Id5}ITP~UrDtrF`bmTprkIXxA zr#bwmx}YbBC*}F5PlxBZdj9|&FU-5D9Us&@m1P^(cJIFr?me2_!?^eQ_dfX2Gm;1U zfxrMhvtr>_k^7zL%cU#D89-1y50Ce1c0TKklRDW|ANd~_^#|hbIh*{`xFt%0$lp2m zT|FO}XYcdX{&ny~B~QwGlW*4T^FM`vb@G1cGw)2lF2w~7C+aoTPxS-kJ)b+bW=FgJ zrrOwSpJ?|A<5#$4HXO=hyMGs2VyM~)$C2gDnWt9_;EfTsDZsJxHeFGN4LM~fd30Q% z+xpUgopzVNmUJ5|P{qh4yI0A+7cl_eHtzu#dQ|yu!2rnw?AL zUm8|UU#Xcyf5d)&@KjG5e8VBn{;a>$Z-Yk~&c7$j$zZ2b?%Bh+_bk5PvnaHy6-VGp z9gtOZ*TS2zV%+x!`73tJ_^1*e^`aA|{ZP|?#Xe)(fL}lAPFw8spD_5SUBAz}#=qwm z%NE%s8`v{qN~3c2c6tSvha?m1Aw?+4 zs@}l-_WYT54j5TnOE#5Tw_`WyUMcRm*=u=LdWUZA{nq{4xn}28f1fe@gl)n4{dn(6 z6YxMGgAu1c$@trAYt+8%rdkL5b?pc$!-IR*X6*j}0?Nf+=ia_ctn>MS`HJH~5+A6{ zl28>VmGe7Heg6PZav%Qyaq{>USGUglj{?DWiSmz+ht>Xb-I#2UTjl=%7(xPk*SPcd zqc53ux6ohIY@j#z?tiJcUAqp0ws*YF>6!RZ@=uiapO#x1ozk=`jt>Q;T$-&w1eM}) zBTB4;CW?D4;xmXcp&Xk{)3}~wd~EB%KCOv~+pmk=vnVJrv7lY?v#p72oFk19k1yLI zKUkS{#4Sv0%0n#}DM66Ye}O+xygH zN5P9S$>JNPF zo#p#yW$e^g_I}qrq3oU0C%*Q}*V)ePfl}RPK{YMMWBxR9ooArZ}i0R%lb20q6 zc4C+^Xt}H-Gv%|mlqZ~JkC_}lGhR3hch(jfjAS3T#=FW&9d`(1ci)RPK3+n9 zs&?Ggy4&U*4dpC;GiQh_Fa8& zWD0q5Qm;xi4L8ZX@=(=QL7>b%b=tl{{j)CRA}b8cXT{2nJt>KKr%tmn>s<=f$=>p=Slt}6N|HY5CnM(3p?VYSvR7CBI% zQbJW&uX?TyZ*cB;c&Jw$xU~9pYfpLvqV4*?$o-yXJ*Wne`7pDJS0!dNj_pM2<~_T% z*RcFALP?Te8diR+x)GW6LVdtSGZ)Om~YT!|9t=?ZZp zZnu`(V~?{;l*ooG)@qNAti09G8GQ=uosei3?H|YcW`e1DC1z~ zO!diA(AnumhaNvh_By3jUsUDDfv%LK%B;r7^!*NJ>%l-Me$tf{)%HCo*mRqk`{TW9 zr#@1WcGHb$s79dRcQdfTU&w=k=@MJ&z#0E`pVxcImi3R~X(iB#pa zV!A5ay(*#dXn=f*oIHQi*a|jyZG}S;8>EpYP6-T%cy;6y1!&vkKMsU3M|bu|CUjPH zXGWVS_0m=DbOwPwlqN47zb*>i&0@2mvbvC4UNXE93bPT+?58=v5DNl-DfKSS-h&MU zvxX+I97x|v)Zs$3RZ@L4ndglc_S_doqNsEO=>mN^J06?S6WI(?miA7U`q7H04fs0i zlJlg=(Le^r(O92s7hFr7sU#^Q*M z+5GFL`*91g_#hrfVOc>VT(ng;_}Aq{47^T@?uoknR zWtpP8gG=PnAm!xU?(W(SfeO)r5J*OB%tM2N2eDH-(_nUkmX*BIB*`;o3oc5BwpG$# z&z^+4R%3Q)=l4|%!bv%VoN@b#cCiZ~#qK3aw@d#iLUPN9gT2hl{yw{8& z+Oi)HK6HQ?6$;76wA(l1UEzyl40hmF-FJpg@!haHa_>gd9R7Ko{-5)Y_5RS`!P(@P zPdps;_|I|e{l~VWJ{BDha==g2DPwm&^YNbcnW9zhbx6DSj^elH zb-Pm=4<1B}XhZ=dd5y3jx8QUt?T(P42ggED_Q;+h=W568@tid8J?9s-GY=kAs^d4f4piHg=BdvWI1+an}6i{2F1)=OBZZ(aabAMUZ(QIV#K44(-n!TiRVWN^wG~vQ=FQ0N%nd+Vq)u zb-_Kn(2QlNrkZYrl^BUo00iqyOn}r+x_$$SQq&>F*p}aFz{St)z2)helF7$aq-O{| zVk%1Q$p~0anuV?_(zih}q&qpN`ejYM+p59g%c6 zZ;9$>`1l158`mNok##W1%hRtBRM#TKy&QF&bSiYJ&Ayv%%ef7M^l+Jbx$9sUQbcUKBfJRU3Bb)D$l0 ze4f6mlB*^|Ms-v4J|$4ThS9WEY>MJU?KDcX=-fE+_QZv7^IiD%RR-Ij^LLvNr09@M z0D5^-V2^zxvKH~vi6_#6pt=L?eS>03Nesg=KiKhZEb0dzN2+9)4j`*j{$xKloSl@X z;*nvZR0^o_1(Sq4IQ=-1#Xg6{vK60T0!-P_Sx@6bEjXc}+x`=!a4g$Ai%*eaLGrOj z9MpSflNzWW!l3o7s?7A*Vfo-%gjnlTam$bJ zi6{PoyDN&!sWPN-BTPN0Di=xq0pi>P4g37KKVnuw2}CdfsgJr?x3A7Fj-x?PrjC_RponC43dcWw2{gG?(o z=c>`Quc zvZl|vw#kzarPcn<`sJb-y?X@czdsirdnasIPsbDoj{*5LR7#;6Gyrs=gh56gL|_}D zCm$~t3<&qpVXXxKpL^F;6g3ZDy320ek&Q{J%K1J*-x}^S#mGIQF~G#j zeo$&fl7)2B(c;4*5X+uingL+{09}5aQhndIzi00sWX9bI#>*e;xryHkw4KzMVXS;?sJ`IHF?wl2|TDLyZ?TKRF>L5lgt?Y;SB=bN{hf5`5+6y8Ph8Qe$MyiH}?kNp@>J>T6tsShO}_N93^8vD>Djy%hsh?ZSgMM7voQle2h0y z_~&bguuj49B5I`%Slzb|8@A{6)$D&G{jOIQbf3q2WbyJKI}gbvOr!jCJ~#1=hEIxomt&#v-;NLd^}bKC(;p*a*ZK#= z0?mKvFOdCrqyC5SfDiuwLVqCl*ZLR6GywRY$Q%AT{{TYx$^QWFPvj(jo}1&p8gl#i zkI4Sx-%IiDk1FsV6!{*yKOFe`pMMtlDA)t0_{YZ&B|jSZC=4~T@qdp00RB7jU;W7V z-(U(U*p6eA0GK33;lZk0HuC5TVvzDBnMj3d}rgTx*r?)8UFyDhsM4< zzftkOk!$`(#{ND5*T()v!=dr-j{*<09~uMj`! z-;DnN`)0d+ax6@11|s{{Rlwk7)0I{BhVmAOnHg`{%Ljp26`BD5th} z!WZxdY52ahJAZs1`wrFdfvsTozQ59bFhKtRvG2Ve(eZ)?`*(c*0OO9+@qhmSc6Z%> zf&P#2Z}HoE@BaW9dsoH4P&-$B_4q&N{{R^L{{W=-3c86QCJSk-?*K#1nj>SL&$bc`N*!i9iQUC(T8O3+g8}=dw0eMkgsR&pf~nW z+I}j3J)^#Y4$oidpB6sPXYbz5$3wOJTSZs3cjVu*({^u*KEL=^-@OeUhhg}@3I}iR zx*ZPB@vlVozWU*R9e<{LZ`%&h-@o|BwtQrMdmnx1_TP+Yci8*iP1-&xd6w*5^X=$? z+P)^Cb=dpR3(@U=6V|`c`_TUY*!Hi8mMlAOdK((o`Y*$ev4h_iquD+m=>F5b9*1Q3 zf~zm>`}U7b*uEmno5kLBrYFQZwq$a$vA#v*l-6?t zvwRt6R2V-a0-oQe>|X?|*&i3=q!0k=eUJ3=DWThbNJlN~_V3gG0Lks2BkG;A^!|}D z{fEg^6W7RaG4XS+EK`)2`c{i}uI8QJwXQ`Jp6iHKSrW`R?D*aQ#4NzG*Scn5_RN*V zn+&$1eeUu3FKET?m;?-rWzk6FE#R~PntuF?T#k6OiQ86`4NF!pKO5-y>!7_>6%siN zgoJP8B;woS_{CfyMpAIF+qvGPeWv!)moX8E< zMich@%#1sgFCHS@HZ>me#5$=bVH{*fEx*yi*C!Q96C5ZW@9~_rZDOTQox7e=cJGw- zZts-JVVpl?&0ohUcAu0=dVUCR8OmC4arjJO;azNxF`XjdD(=z!yL0>2(M4>rl zcKq(+Zy?T#6MpNSd)8y;WcbEo%ubFGkdMI(ziy39S9ja^$l`lSHcfJ(eU^(b>nhx$ zk&xu>N43Kk&aucO@T&73W$oED36aWcu`aLY!u_snE?3SA^6!14GvoPvvcjbP=1G^2 zY#-K7)O=*|%j7j=n*RVp`rZ1L0Ab&Ly(jCJ>M<|>0K@M^Nlvf&)%uYvY$~sR+t>2A zf2@C~8NH_VPm+J$&Hcy!0E3_EV15nWm0y;)&-KgoE$kEhZ~Xo%`rrDM8(vM{HO0Cg zuAiudTps>I{{XkI{tiE>48RWhbl>K`uD_^cqAzwoG?&ct{9mHZL<#zO}Kd8zbpT9T!1()lW>On^>-yeVAfADPmNerX?d;U64 z*5A}tBp;A4>3>_lQl4z<-+#|v{2aegxovy%GJlePTfb7Z%y-fkss6NnquG~_eP9nq z^|SRKe*5879*J+(uhdll{{XLSf6D%~exne&@7w{N{-Xf8@4U}1eIM5!)F1QTbT{v&{crt3DoS^@8eYHnHh!aU+3)`U z0O9`tTYpi#s(0q(y&u-!)M5GWZNK>c0N~sDig>B-+GErHw*IAQxOb!L{IBbO>O++Y z-~Ryk{SVgv0Mt;xp8K@l9>4fE{-gzWZu#^Fk4yUB`iRPh{d9mq>;C|Qhw3W<$G?B^ z`u_mn;rfh20p8Cre+&B6`hv;-0M)`YpO*b?{Xr9L_jVKmru}IBK}qsG<6+0qzxXu% zp}xoZ$o0|vYWe=tedHb&;J0i z?utSFfPS<5{{V@0?#bgH=3lJ;06%?`o`pZ=pRE4?K2Cr9GmoRt{bu?4^WSow)O!Q< zujk|fdz^px$@;tVzXLOOL@t091NCd?WeX1LHva%UfACxR#}G$$U7yci{1<+98~*^R z%HR7R)&BsTg+Kf@U6bph`oZ&%+8x*b0JHx9!FT7NfAv*=_XG8h=izkS+;T0~{{RLr zo(@C(Yy9hD^^fQO0H5`rT@ThTpE2US@BaXPkLwT5w5R=NXRrPX{{TDK3*O6n=>D#J z^bH>O_x}Ko{tLgT0hl*<9_j0*{ag9jP|M!8{{SHVto-O`zjyWidavr&&P0n2<`|Yy z#lKblY(f?8gGaCa3g0l;EuKmbPG9vm<}+qi?uy&~oe$K{m=yQiSC{z>`j_(%sjlLH z{{X`Nqx`gi{{X`gy$+N0ALZ^`f2gQs>Hh#y{#m6Xxd4CQ{-u1eTTR?QKaRinBz&)E z4to0}H%IjoKDnBDO{N`Cy7J) zgYsk~{^dMie`tL7<#{huo@|uLTXq%9Yt0B^H6bum1o9Pm_PUDL><5 z^&{lrs9vbVFY%=R08su)c!QNX0!Jpl>JNV9xaI-_dldQq0LXX%nM=R((te@*piryb zKw>bm#WMi}VdzaTI8vUOavSa0D*XxGk_ZMWd7DlANRy>-2yxuvF z4kf9tCvsN9D+$#`6*$!sAew;@&&COMPn_l7BNjaE%(|+V_})D`M`^f5~qKL zy^=lA!nN5C?G^C*XZHVH$ICq_Wsi!5Pa_m0<^ zoU*%PI!Jb{cW;i?8J^|G!qoUqPDjW807|>3eQO8F?^bRH=f-~-?0u8sk#WPe;S7w^ zpO<{&j@I9lAwtRkG(eu$Ky;Jx&D%t*&@+iU<5Z(70DmU-X^g?J@~bGPU8fnadyfep zB($|x&Ow%a}Uu0*c0x=gAXMvch0`covfPl}Fy$e=rR?!kWZgWhY5+^O4QFTs|aRf_VH zH>NUEA#?3Knmu4*C9pfHQT0inr210x!(K=@f(S6WV&r1wc!MN}0C#TZUy=7bc5kEc z5&*3*@+$%y@okgE&pHMuXd7t3N}Y|-R1g)5DRkd3!+jP$*k#`dAE!z1@>rFO0b&v{c-6En3Y~UT| zu6Zm#3XaN9pJS?$q;Qx@a^;}l6cY8-c)vdysV;ZYJ5O`*GJSTTQ7G)(8lTi2o10gF zWeUZ#7PS#FJ8{cS1#O}M*0ibup>`<5r}~Q;NH=)xx{-~@eDxvo`<~vM#r}3 zO?d4Nm;Eb5=5&b!ft&# z9t;;jOCjGP3bvT-i1qkClyu*{4uEAI{SrSK_5mD_@^G?$a_HXBAfP`1a{`x7iYo6#b( z^H8Tb^~aHP;y~sPQ*gE?LtE1)Da$4m#w?}>XlRXEy#-#jtCpcoOgQq>Z%ng5G@Q1+ z&q~cU3G9Z~OLl5MFg2spvD%4cl9RAlC&as^9u4U{!c)u#jlMk)+FnyGOdD+E0+CFf-cOJqXa3W85!!F) zrF=oqb{xB7KZc+*pVL`kHZoQ^QC{S$m+p_K1a>C>| zI9byIp&r;6_QRu^R?|_8)ofR;EbB01vU{{TpC)F@69)HzP+92xeW-H{`Ph$Bu>PnSi1=&6#nAr&gxMyO-{= zC{~lFBp@*)Cyfr3NZPVZ>nxh2%lH&E0%W{1@vO7}%Bb=^`Kmk4Ls393%R-jKHtrFG z-AlLyX>b;qaVi6kU3Xs9i<9vl!}5GGh1J^!xl1eLbnl-H?cIwo1-1o3S4ZFR^#`Oyr%}Z$6*|XRmrQ3WrC6zMJ`I8nm9$Uk*M9B2qviOP%|%QO zhND$Y2ebitT1)mE8+(OE7BAy8L{O?m-=WQ1 zGd9WlDO-h@(8MJ_liE}N*H72v;v>;nq2e(XuS z2>cwUkwfjz6ZQcts@}m_lcCT@v8>f;Mp4daNA7h*BUrjpE0`;SOM zFD22L-ueZG&$i$DL2d)rwLMPHHD=;bKjNlO`--a^DqoqxwKk5$u2* z&w>@6wWS*rRX=@&A+$Dw>InN4W1z3-AIPG+jk^Hb`YSVXwujxc6e@80JCf`5=m%Y( z;>CFr(Iiqz#D)B6&(@knRZmUQwP+^Jnm~UA7^aJ903>t^axT#e_)-H$cAxkJ5a5cD z<3;5%c{3@Q_5*Spfvu{+_qy};pjF)w^a$Usu7ZDbZ(!?-fM1iEX_weeR8`{t0M)uY zJg%${9UYctWCnvueX9>6Fbcds%7s;+FGuFf^$O0nuh1%=@Dtr#Q2J&2^~2Fq{Z#%D zwuJ#K-;>m~5<2ui_0kSYrf>N@77e%1JrVx^^8Ww~=aQWQcdm=*6T_7Bc`yF}6Q2?a zbVzSwf8*;m=G3DgKW>$em;V57{Y-y6PMDw1ll&d1>6yxd=rA9XLeox1On z@)f8DgM!RePKZqoBoJs5Tl7ywfeKiigVL1@L2rMZF58m(D&E0zbxqTV1bZQw(VI=^ zfH`y5COl5cim#GC=khhxfL|Vg46D5vf~AJ}G2avd;zh96w>Un2)r^FQ9LCV2R_u*<$DwcfGMce^OR;w|mW$ghZPyD-qV6x3HGx$&A%VBsz6X7`X0A;RH7AJD zk6#We*971q&2po< zLkfSlvIphiM-&}qQSvhKst5OOT}UoYN9~dL(t}}(aUsgGJZb3LJ@I(t$%5aXmThkD zkDZ?!`bY}pM9#?QylWDF2l3lGv*6mam<+XxO4CR!`G7*Ui>S-CURlO#w<u=1cRX^WNpBJ4z)ZM_)2KnEJc9-w z*%`Q%UL*Vf^&Ucj5F>t{X+2)vL0<)qfXm2_gB@Y;`8t((jMH zT@aumatovQ5uDZ8bO{65N7Ur(yK+fcgkY?8T|EO$zRTzV?^SA7hm~0+&~v66EyV#w zyQZD8G{A@Lm8m`E<_8&O)lFZEy!g_!Hy&s8IYx9(z&t zUXy??=pp1E#-uY%rN6ex9uT340oDHi#eclj5OLPEJ*VJu3fp#dEaGJCi2AVlmJ>Sz z{ICH)*dTPAl|bRNBiUw}wu)$fhm!r6ldb-GmdvNjX#W7q24)~>fAsV~ZF|;~^nEWQ z_-=sw`ugwlzf1t&RP1#oj)F3T|6YGm{=oH%WR!~3yt5S`@l$)oup`y0e#=x;4^v^mf zfiS@t*8)JDfW{cE4wm!6#1lgnMUr%fmcGU5D-6L*A&0x_B_z_B=IeobB=kY%0+n}B6v}dpwz1I|>Jor|4^Z>e3g&+1u_c<8o z-2HB4;%J^Vrvd@uenH%?-G9(8c@?VSnX^smEkFP+G!au4j9x?)r?%WLTx>gLO#2r~ zf!}drJD=_`nM6B`7b-n9C6$x|sS*Q9DT$RB;N-bRg^5YC&Y1 zNVTfS9+=g^%E*>Piry~LbriF4sn;|=PP^W3XYXGcjz%d&?mkp%KqX%6E;RH_^2MS7 zl}`-MDfoh8R8m#NyK9L0bqt6qvf3cfo(S^VVRtFBb zFy5vqwd%vjBQ;;ovewVd%ErdV$g{lQ+MivcBN`po5O)a^j8&svtB$d@ROM|My9DdC zcTCRTTHhZ0O=Qx#ofVRvAw!-b;Ud#TW-34|r*e9Q(M^4YV9HQC4{6DI8lo2F0a4Pc z1Xa)|zhd50@R2fBEOy;c#OcS|ZoOrUD&3nFY%$wKQdN<8nkhKU!Ee@BNZRW+Ee3C+ z``KWjwxDu%r0GLCD<_N{En+xm6!sW{;~dqS`5J_$QDEMX{{ZofT0!g@gmR1Og%dy00kiNlXt1u(c(Jq3Zh93E%DIDDY02pnkc4uY* z3YPxCRe0!fG%cbg7=CD_hqo07vy&(&M*RvS?UQW7*$lkWD=GzDvl0+go7i(%u6P^I=>er`3s(GOG|;!dA`5^{{R~apF>>wW|JZ?ep)(ir2G!)uY1>D zX3*dO*XP>;02&9NJbP|?4i7$}9YYPDue1T!Ki(iS4fF#tw*~`S(?xZSDl(E43ZA@s z3ZaIA{d!=2frqfXi3W7`92VF0ehR;H>wD;qZpv8xHoYe#(AWoMo1y$-qgzp;^LaP- z6yzV;4WLvYl?3R86VX)~(Dr0`B#NQr&(LMs?6FYCq9#s(VgdZP3@Qao^uKkO<0&hS zO|1@`hE^PaZ^oPeUC}wZOe%HcApZa#9y4*|>lxmPD9Qm0K>#3bZu?L_3d5KskEJcf ze^vAwnD#m?&+14t;8}{VloSPc{#XI2mq0|A@f{*-$eJ9R&~V`jF9JA{PfJwGRe2!O zw#Qa-yIq6G{$|{&lTtxn$)~8$4@Z}?SkN^2IARnPIz@6p->!nmcfp3(AFAZnoY8*# zkezFaEXt`nCrhbn=89YbInN+f)BqSZ$5_{ELl3q#Ffzwyq?fe!aoV!&dq7pKFBbcb zO>$oz)I-9BjGUDY&I40S0+0M@n+n6hWntw>(alzqV6D$v#f~kmgCe?sEL)~W#%a=a zD8QDB{_4I*wTPt|2u9+JBdMJ#a=Uiq6qBoh5^D8f2^c_!r>(PahNDHteVH*Vg<0l@RTxV_>0rh0dAGIb=!^soP)(WufRLgkr$jZvnUne6cHyNjvJx7UG?9`ad zzj4X13xy9JI%7RBB#mZQcJjA_BBLuG7DRCnLR>@w@u_{NEL}>k2-hPaRZtp(gN2Qm z*&$0~m6huEuTNJ5x)7+Xy?*7%!^)pz807lG`}8k?kz9O~fl-PTXtfv<#qO`l$1Q9tiGJAp>*{{Yp{s!AMD*;$ul<8Vd`b>{=<^tgH1w9D~h`35?2WK~oQMIYGF z>$BijxOW&}%O-F%Cxhiem~_j<%LB@cc^DZlzwj4ko06yq4gS8>aW4fLbTIVk}*k0KthwQo`A@!pG2OS zS5EujtDv1L_{%eCgD$!@6wnetHSBG)C(H6bDEw4KkUDRD6Rn;+xgV&QVpzKJO>L9N z;6L$?4R-e;KV1F zd)OaNpI<`z;!{Lf%FA5-#ef|qgU}Tw9DpiSgCvq@?GOO`oW|51 z5UIz^?8Nh4ZU^BtzMgtrQrhH%Z9!RtQ^EfL+RA2BfTc&^A7UPeC-TFH(I$L}{PZ+K zDGi`B{VC?kpPxtUh#&%k>3<=n88xk`_MLI(KtUiMU0fO{_Cq1pCL@Y0n3i8`6)ER= zvjBxR%JuD)?7glj0-eSz=EaB6SRM)#g?YJD0MCmz)s__fu4Wy~g(nLoJbxi**Sq9q zMP`F7If>=KO9DCa${SFL!?)zm4=`2n1*RtRGs*5xe%p!L8D>T^JttgV;oEy{`)+dL zRp|tB>)f9@)l96@{{YKJlhF94?LI84vN}tuV`E3gHjZ@o??+~9GLRpAWYMII!3Z`w zmtEHySb371hcq#s`lY{U3nfb{A@dI9+O6C1J04BfjeDe;+y+!942gL3N!H?}(fAk^Y2+xOrwD7ws!2x zvd#m-Dh4mUu)$Ec70nezZk9$Zm)6q7jcr>(?(1f_ip1%_mbrx)QLsw zu;){_VV>V(yu458Onm6$Wn$2&DTp}ES^fJj8#*2C@6Fn&`?KAun0><^zxMgB?Q;&7QZ{!=>8zHgaP&{8YNcHZQ;`4Xj| zX+3!BKOmKIagkTW<}VWHyR^knG2&f^a7uQV_V<#CV^p;5G&hBvX3C5G46JRA@N9FLk;QE1F-({53$n*pk`j|HQw^C-n-3flQ~Bz=(x?+UJhOtavi_8s|G?7 zR7y(L^L>gx4FFlW2OB@vtMXpih>n2mwvR@cc~+-oii)Rm$CfT_B{yRYE5KvayBReZ zQj`VPxxpowSf%{SGBr{a1Eo`r&Vj+m#-3A~DM`GFZRF@6Wc=QrRqBgLxb(AiCzOsu zQG>WHU)LjDU*fgN*kjFO?6E_N4g!b+&56So|?W~C?XLZXn& zzaHE@{X8cFWSnEM|3*;0(kq-Yb+U`gNPKF3y@63^@s zcEw_fj^kwr44rKOP7FhY-n^WSg#Q4uZ3QRfc2Y}ddtwSF)s&5XS&=8eyK?k&j>=V? zl|dU&BD7<+-o3GU_=HLoW9$YDhFm`k{{W7g#}?n=m;Hm&bK~{{mrwne2H*ME3JZ}@ zuU^;}F;bvxYhW)opWE0RdPE|O8j2`KzL}LM$gj0k_0(v1Vum1xQhMZDi3dY^Ziod= z+u8pBYq2|1??d}gaUcWeFXKefb-zpOA54Q~g8u-HM%!=#za|PoxdEob)X8?5#2}MU z_+Qvr%8K*R0CL*7X}2$KHr)^E>amkbL&BUn=rL;e{5+8r$ zC-jigvoZpIBdSuoQ(tYinM!|U8h=f$ksQ@RxCnqVb%sk#XzE~mO`!hU;=~0Kea_5HqSu5{{YASr(>oA>~-Yi0VF(vCl%QZwUsb^ml<-vox zd1xflqs-(b6fT&qLu1}H3J;O!N;ZFY%I<29m7-+@l!xt;B;m@7#je2A_d8%$BQjm9 zO^-HT3HZ)=?Gx`k#V(;26iwFIhI@t@l4!$`pKffr);GHIlKEHzG=rhAa&(YY#Lqdv-8tdCHzW!cm8EhAd>R$cv1WYl#x6!b&@bX4WPrwTvpo!hE@7%C>HZKuJ4$|Zm&cn}CPt#zzc_ZV!%D?t# zA0r*#Cl=V<;<=J5bC}*Pp$wq-2!$h&G-_74IGCNVVpDw)Y<6-U==I zn`1iTwb&oKT=^(Tv&$Bh$-|LuC6K%Ht_AaaBcHOd>$v6N;`ScX@%(Td;7zg{wrAzz zt4eB=%)a9X!gtKRI#OYjxR8G18p}5(R&`>H{7;e2;Ja>)`V7|4IMA}|iiS`XQ2^vk zc0w7W*qO5ZnZix4+V79tErJ^!w@C+PM>GZZ$q3$stB;JB4Vsn40NrG`36a}7gAmD? zim6%kALA_Ei#Cd%iT0fS{oNk}4=};w7s`oTeB94E%^B??^r-JW)BdH!z;c9UVB&i9TTGA2l5rq4vb{}PPno~z)-ERzOs9J9A4FvEP+!vlUfi0+dmQNYMf&{{XToupy|R zZ~DW+)aQ3IRQ{r+>FuTvsnT_xnDwlm9wKYv0-Y)2Iv`i&T`IRN6hW~xI%d-QkCT#q zcUwMHJk>$6p>%vN2@uQ)eRLWQYVM&M{i+VbH7BLkxnlm`5{*3kLOIX)+-`+tyXFbx z?q;-inc!DLkJJ=m{)=su=F746V$I84s}>o(#~KyQOeLoxm+?C@uOB1Hn?(NrHpG~y z{{SGURGX_3sqap$=7BK)X!0SE=3E8@6QJwkqMk`juQ171cK+Ks+33=OM?e4%w*LPB z)G{`;&mjGS71-hwolFv_Ho$!77e4M0FES!sR|u`8{`&XpdbK28fIhz zM_ij@qI7o3ccI6paYCx`0-xjnj1`f1X#QJJs6as)EaS*ng+(Abou`OxfSEc#Nl3j( zK23su5+JDO2BU9UPZG0)ZalvrsFv7CO0d{c@*&w5#tMQFP;m{tA7mX@Ok8VVkXL?R z=s_v5(jqE77!U9VP~ZU}S+sO|p%Wuc8^#C%l5m`zj`h+js_ad4!$e3r!B}WIC$-an zO0Z$*w@=4F1NLFlFCoNx*Wp>nQSW5>9WWYC&cPjj7ZcB5D}E~^DNlR{CBkZaXLhVay z*AO_DC;E?Pt|-d8`u_l)Ao|icG%eE5P#PrtDIw8<6U)MO+T{hC;rD5oHfc5KF8IJri=S0mD6;pa95axXq3 zlIfZl^bzgU@iIM49Rg(~GcxGv1d0R=QQ7PIZ-)M<-!0x4$&y)AT=|M11{-(yo^NgK zS&iOvCG^0HHWUU{O>caQ18l6CGZWjea_yhoC*WELcK54w@l3idN_NM7G47mKc}7PM zBeC97N1t*HT>k$6lKsk-%I)0njxvPp>)Q@r>J9_bxA<{#du}q@E&D3T{xOyE2P~b# z$QoT%(8|xZba_5htE3%vOuQU?`xix?Acb^1vRq|ZL6Cx8op(1tXTu@rq63JPr`z5Z zAInyO;H9ibwjFQI4cJ4OE^2r1;QaNIHj-C_a$zvv> zTS|Ot0b_wY&h>%Cq=9jPDBw!4<4>)B$5)NcJA^04^#Epke*tOO^^$PYAx!dVDMlZ? z$21I5jAeOFSr+}X0HKqeTd{Y!cE0>^xOn(t=Gz+6X%=QW<}$I`Hp!h- z8zJORKYDUVGXq_pwm*J3P)exGoXsGUyH6oq5Uxb)%a6!Aej-~BxZ;4=eab=8pwxd6 zQmi>~3iJj|^%@QQi;YB`RnIh4+pAE$-Pj>|KiRss$a8YL7j5k|P}1%8YGd8g>w1Cx zkJWOdap#Wm$mTB~S+VjP7d95jpsFMaj*&5Z85urC@})G9tP(Fh{{Z6S^k{bf0N#8v zKRj?J2RR0+oE-T_wjPI*#-Cre{{7WLj@rya7sgUfY3(m+CvTlZnG;I5%giH(4gI%4 zWSf0;Hh!`3vTpAzRW@`S_`?}5gPld2UgV)v^0nSmVyeE$P}a#St_;I_7^5DoX}uXH z!$H-Wln79McFe5HS_Dwb_|V*h!oc(X>R1~hph8st0KdyvtHIw*Kqo~c3Z(;T3<$PnCa-s5Q z6ZRAqY>By2x=>2lnv_OH8`1V=e5k5adfKp?D(bFTclaws3Q%$Yw=`HVn-ax`9d+h) zoPky3zQU30n6N3ovgu@{lWV0s`TW*awGQ?Z>~wKooY#okDr;z} zi^qTGdY}VqzFl%+IPdMhK(8)*iQvQ7G;*p`^3wf!;pv-ULoh6$G4cT1n4PE z5Hxxeql=1wul3W=L@_MHl>>boiX`8XuGnb~>dxuK7?}=57%%P78CdJsbS89TQN#M_ z+yoz1Gzs?$HFd^yU#l-8)wfR~pkb{Lc_$$3%%JHD+xZ=7jy064t;@jh3bbtlrRaVh zG#r$!m~C-F`rh=YD*#a&em6~f=e{G62l9G+jx(E5ygdEcJP@n1#dFBX|y$$gt?8)A+1KhPi!WDtG` z*`W)_kj=;N2XK5|+1$HZ%sI-UyFUf8c-@O>e!X+7XvU4qlmNeCvf}qP%B!CSHY>Xf z9C+u}*_p2CjUa02inDCIF-6)oQnPjPeDC^`UctMH<;zX9jEghGv>!;$jN%u7lQTMxE|)V%0knODXIKBwtuh3DQs3)czmAp%FKIO)yB4w z!HI8=%eP_AGb6ckTt5ShTl`bynBNx3?mgwCU%Jx`v9KlE#!a7f$~N%TtS8(j``nrS z-scQ%I`hn!{Q9g>bS8? zj^T-kN@*MyuThF9%dRrpwN}Q_QV=Lxqdk@#GX` z=OK5OZuw_$$Ia~58714cxa+@n#L4dc<0G}VgAcpJK18PPAjukX=DyRg&wal%&Vfhm z*^{o`!@|Y9hC(HS-dT9zqL#;HOnN&RrcO>sKq|me zhzqn(xYWnF0^D;b6SlqrUCUr3^ZRAH_GfbJz4r^f;VPzG@D{Xg+B>g%jeAZU1&L?M z=@>O8?mnkrj6}w4v|Q}2Fbdq88gMT}r9yL4<8%{66%ELrtrixvU2-L3H<>LnmD%XO z>A7^wmmcD*;+Qu_#m?;+ZlQkEg%O6;_Fn`z^T$0qE^x}cgQ)@so9 zDUv-*1!Z;zeKOG)H9m?^0@CoRWO-BWsm5YgWR@Ik4Iq{jb;-+xa&JhZP9}s-8QrV6 z_8BAh94Rtpjg0Fg;y_US7#D-nSwZ3B`)F!`9hYH_xUz|- zG*i9lR$fVHAG2%Nox)q}Ndyo&4Kw8x+ta39h2%le3KfWQM9-OPtpFdG$%?ji!JTCXH%19x!#W zAtYiQn|mZGc|0rtD!^y9FkKE)@V>G-ijhCGYq6 z6-mDW&AlSAN1E)S zK!`I5e1`(7Rg^&w8y8aGYy5__4-7fuhH5EL2)}Z{?b*Gz62&D?wp-jX2}zOSpmE>K zeno}fQ?qvd(U1FX&)M-raL2*0aWZ?hZhvwE_8pS~nR#7d?~|v-QWBE zdlE4aM;LZ!ABJPczjsZ4s%K)*;mhM)rk(dHJ+~@0T%O@pys~~rkKBG8@_|O~FP)2% zj)c~a8mwy|46IhNeD2)+^R`1Svu4ZBt49|T;=R)=zI=85GfcJp&LL$(jxnu~Y0-Q! z#6oMiwJFxm7IJdVwL6;P$+ zr+$ZVt}m5R7K@|f-LUE0Qy2)F5FBOWuWGI%V@<1Dr6-ekT1*!5U{Cp!_~JfDVpUyH z(i~{)l}&=IM?$Skb2h2rFj{HcvAb?Pv4$pbwBH$Cj8$mFzqfx{asv31*g7S`aq=kz zPyChFHP}E=10B_`Sz{SqP#%jM9;7_FuK#L)>sOu(BbGkfEGO3ZDM}T$<4>or*ELl1xtWOnd&)nK4T~IygtF{{Tj+ zw+2TX7c;zHxZvaA9Cite#+7NYZJ{baJo*GZnbZB&`$+-_exN|^PiDdwS z^`_Oy;j%*=l?Z?GY?68x{z!6Es}Od2Vh_GL*Z9#JCB2cpn!diuN3aJ}3|nFJ zLk=nk{y@#I{hOOi`WhqB5DZno3=gMMw0<1^j0T6#}xp1kleJLH2(l><@{xlbZVgTZJ%I`#+BFYRzQ+yf3R;Qd|&Q505rCFC#Fxz zFf=OsKHAohaK|wU8H;)no3pbA{<;n-;)p;BG{6I5iF}AQKw&V2sM>pL?gGpfQ50ng z>(X1NZb zgOCD&sw7@(m8W7+x(#b%Y2Sobe$FJ{4tavBIUGXze0+w$$jf(Gwmg-}XZGIKBiSq1 z@~LIW#Z>MUrYCC0?pPCChJM)fLtAFov*q``=Xhkk9uf{1DU+LkW6uj2ztnN@NyxlJ zmx;Qa5)1UK*Eq}jm9CY7CU0-Z!uY>x%BWQx!zt8tDOKoEcr4L55+T8HGEKpq7!@71 zSQ*{#F8=_0Zqbh+eA7H^uJ?ZDnxsW2d9k>~8BAacVoysW4)w#<})vKFyz>p9^;;#KFPDdM&$5 zm$~Iq`IBk({0SV4r!{P@Sr*tzIiX(T+UWn^j0>XvW<4qhY5ePi~F{NCM} z-7%sBAw-$!a&g|+AL?82!m3UecliZ=Lh%_Ggax^44~uuqxO|zrtsPWj;ZtL~$nD+F17jl) zDKqY=g`3;^e|hbyZ%ns9@jn;Emwd^^$jmt$FqZeCDGiY~K&2UhAVp9L6Ua7|K15Gx z?OBzKlr}_zk@|0yJb#j8cMl6QO9jNbMsX@+I3ya7&)9q3UuL#@O#m5qj|(ryyUX?! z=CD)b06$L;-QeVRIH*jVe6#0Ij&_Id3*I9xk3XdDy6MyNY3n zTO%56P>X7D9cEzVcH^G8tH$_M(xw{{0+X;88sE33LrZsQ(-Z6QnVlP79?*l27CMf*bbEG2MGtk%tYmT6#obx` zh8{q_U^sG~x3&C~0+$MXZzOqKV%#@w2;~av>&IG^VN^WkkgegGYWXg;*8B429pSI9bvK*GPJ%9&b1+Or|t+K=M(bBStlcx4p$iZ4% zc!qz&4+ur#%HQlfbfsMVH_LpK5D;x2t+v^Ug$?Uy8NKh32Ym+9hUUOAAgY8==)>(l z!oHPACBc7Xrobe$M#_SE42V>w!hSU61s-IP$N|4AEWu>}22#B(_d?D7@4<~4ppfI% z_17+I$)~?yFq08>UK=OsI${B1&3Jwa@L*NE+EB-?39;so( z3+tr_tcVE=tN7$8%$EK?$?J+AN(gW9*Vr`IkFYdZlaAMkEx$!a@sY^?0G=wQXVcGy z#@(|rurks(*AF2?@=&b9$aXkV9`d=e!q96GY(EA~^#Mh4*9jj}ZZYohoT^*j3QS{_+ zA-_zi?Y$`KjI38{$S(9->Z!rLy8g<}pr!gt#V1Nq zepdegk_6WqCOIVE#aT$QJ~?e5(Qa$DpOARZ0q7p26KGI_Fuz`{^esvN2mmisSjlG) ze7O}ox7;UM?eTkUXNQX<{lUk0R`ZTic=6dznW(LgCD=;Jq;C(kTRXhqcKkX88T3S( z{MWViZo%?PcK*umN#kOu$rr(f5_Z!pnm=)E-zjGEdVm<0qjPiEk8S?|sXJ`5;P=Jm z)S~yk^Dgi5FFf$%k)3!63B1dRn_aTPdc_fnN+Se zhK~XJ+Rp_sq@pP0nSjjFForxhiqB+ zsVGzG=5=jxjx~R8koeQ*d(0xwJ8;8?X_#pEK(=Ewa}yF`H&vb72S)vtPHr6E=`~$A z?Ko@QEi4QPB6(^Qp85L>Y|N}4*+TPNgEg|(5+CX+xTV)49Z^_cCV1jPx?n!k?lL`_ z7Zz{Daw!ifmP6AY7Zy27}$s(#oW^$29k_(7V7X<6te!=P`E4+7iH;{fr)P1{j|+9 z)p8Ac74Pz%_l1$3vs@eqjZS&FIevVVsZQ(Ot3{c?v^$4xo?yo##9kCY{3wOfnFB?? zPOmI4lBaC$H8Sl~EtQX445{|s?cHGXw7Y(GLuBFgYDXg{A!R=lil$ozt=Wj=8w$Yce#6_$>U{UF$B5q<}M$VA$mj)!XgB_WWGKlU|+Gtm=ns%k~LI zkYx<6g+|-8c7@38UC%ht*D@oQ3M(q(G}OrP+B(HzS-{%?r(WeA-$>)WGjUKCn)goY zUhB*EQ{!bsMH0x#mRz&7{DHwkXemP8|LgI?8*gWtX+{if1BUfz#b*(&ljl;4Et zf0LvcV;riZ&PBJ&3$D1j1^>s7*oc8mv)@_5BDk%hn*0e zH%Oe^nXk6kD4?Gtkr}yx^zER;uukdQ*9-P++fUrYvjnc0d@4%>C|D~n;G0(b>&HWj`i%l6gmo7%!`!hTW2?M4k zjEsVsE`aRfV#6}UE0F4}zuu!&F|u=Ha;#cJBlEH14_am;`9~e8tLy7UMj@5A{~(&p=0cI?2-qdfN>O3!f)$e#cb8vek$djZrG*QE}uoR8FOXn2uVTjjST1({O2*23s?$onh~nty_f%v=vm zqtvuY@9@8o^*~JqmwE)XIA|{gWAx~_bzv5Ip zJvPT5!EGaJ(*FR<9gw`o{{SA0icj1R{q*C;s7K>{X-jN-0D9;?m=t}n{B&E!;g^#q zzC^MT7>C<_3w=i2J+I(^=)wGY=l#hXh}N8IU21Nsvl}V?P?uSnp(S^&q|M3qqCdw@ z$2KY(Bgp;Wq}`4N~IBssd5h;(w;V)$toOi zF1BV`Mw11C^)@jVXo*iUVhU1_)SqN8FL90bn7 zkhRCEWT8Op$)J8UlrXD2sL!5d1IG!(JooO{_+|6zqsd$O?<{LUpOrF|16lIuduA7F zMUa$i)~z9$*cleenc>SBk5tB>9hD7G-fTdBs#gtBon@-j^_?}lEqOqx)sFScUb zX$&XIN?N1{VyBlN_Uv5D+obU^RUaaOCm!M2?w$7=vf<`_=RFF+*SdUb2e$VVjeGIP zkjH1ccK-n0WHv8v#8qnL&$Q5D46o>$EhF(gb$DUAG zG3qdqc;i}=%#nJ}9elY?>cU|E02|`t9_edG1*DA;=4S0#+4IHC$n9AAwV2}v&iIaB zYWF;y@yE>ta!=V87DVNEgM<>7Hl|sjrG;qARv?qx@v*YoG2A zdtEZ}@G^3f8pc(>0N*L@_@5>2y|R;9tVNaEmj zyzCy^9^$Uunon-++&(+<9>~4pHzT^j!xJrDSnz4k6~$m%!}g)>(R`lUhGMh*%Gf?E z@%xm1Y4P&+0Xv>GcT}Ag!GYHxLb|0S-b}kvj1`1rJ70FMXzX3)a)OULly;T}ZtWN{ z#>APLkLA4|2lm*;*>QLrscsEkAGs|ZfXA8Z22jk)FsrQ1*euRg2XXlAawM~vmr;m*XbjM|0ePpdtKs+&g3ooF#C z>q+C(0I!>u2E$qelO2(p&cuXpaONWMm z!)y@3S`9RE6w^1J zUwYqApC-|7K}#<~(z%@n5DT zDj7jNcFZ@*$b3na<#>}dFZW{eCxP~kla?Ga6DhxR&UvQ!^JWgr#1?9~ukrr?Ug3JJRyZUs};M#q1bICv>lOG@?{{UdFpr`{% zHW9e!P5BKFLFh58*-?0aHbSxw9@EkP0CQB)l71he{uNeA+*-$%{ITK}lBjY|UUqIE zDH`_2$fsIeuyn! zNEC5F`CU-BD*pgLKBq|A2;eXI39lNo$>e~jMGlR@_Mra&f?bk;dY;EYi9}-Ne)q*l zpAaTni6o9q@9fF}8$~9Zfl$DE-pSK{k^KPMaz2>xJ6#tkL}t+U!|d+b8s+{KOMUmS z+EBjLimuL^WGzi9=Z_Ue({%a;LuhQCl7nUHrC*N?q4Qi6C+q2hI|-5%b{~&S>&a7P z$@j=QQZq6{55Z zqVqVo_`ewKc_seCIvXdthGdl^}QVh~=p$u$Kk5@ULSvi*&xT%YiZp~%P z#siwLAyee}Yn2SVgj~Fm;ri~K#{J*BWMwcXF11jL=fRst2Ixi{>L-}_CV#!nE134g zi!x2S$6)4UvQ+$T7OY_? zVBdx?yrc1+{{WW&^vlE%ljXS7?VW6NDwUJ|)jOxiW8b?!#=AFV#iV1}aT=Y*r;R@5 zjNFv*Tz>PB+2fS(icdcx3yvSNr*5_lBiwSQ4%y~8IkfLp#O}G!%2{f6#oz6_E@oaw zW=`9G;<6xoQ=SejZGyPV3c^zsY)FpZW8Y(vWR8yn=fIJhvvd}*K=6b+MnOuoyB zM9iuehiSxig6H;JuF>&c$}+PhOXbws(_D1FXYM(f7Sl?C0>KN@yq}9~B zKi8)0cqieGuN~&Js#i0heLida;`3-gqL5IkEAqXw&167ne3DSN8SiR!NDp zk0wl;WarwqvvRFeIqQ=6cmNmyqAey(9tVg}3AJ9KIs0V+SEf@kgZ%G&w#_~A98~&V z<=VT4Y#4USmgAWxHOwLD-U<=2s97?xtp+`5&->THPN$GLTe*s_*YGE}vUh>9XcOQ!lcACKFV zk#)0w!;M2qh|D%Y>4H9yf4JWgR5()LhCe_VB`t;@U&hzS%ES&M{3%hzfNg6;0u=p! z_@>7$y*ycu6<9SMR;dj9~*9EvdD0h*!}RSMyM^_euuVklXF(doS^as;Uw6dL}c zi2#B+DC`(8;-u^%dtME+@s5y{;`|30o;@*RMP(dVY>=X-?X%?n0CSa)GjRU7YnfH& zFrXFFY$ch;F(ug0>6h%LiWKiyD(wCok}R>$aD6cE3}!p0Q(wtQ9>D3-oF9p zimb!LLL&9e3-MHN$MAWA5m5sff_4z>A#Z(TJN(Mup84w2oL(}2J2>10`%xg!J{3#}m{pK+!v?p})O{D%%o zREKqP?#sT5lj+`Mose{(eVnfSmUbetP{ixoblNNeo$}irg}F;(O`-V}3(t`ph}S^T zP$=k;wQ$TCj)zLfgmPdU9e~`KNK?n(vZc$vy(k}%J#gkrY?Id?VTk(xch;F+tc|M! z{bhb&I+gzbg0z~WBO-!?enyC3sHKYl#-@VwqOOP>5q6~$OGelBR<{s^9fXP2!V<2m z{{Uh^SI1Vp#8H0C+;x*L1x#O7m^$3WrHz%ErBZSn0e2LZGb<2E0Np1zKb}F4&q=mB z0FZlQy5-H8atJE4&phh_s94QMJ3$_eAvv16SI3PzFM+Z#%6WWDMID;LF61gvSTG{a zmpK55k~Uwpt`G0S=3JZ6XZ?g=*|CCu>p zY2@Tyd^JmGop#Rek=igae{YK<%&BELt%;X~joY&8ipz<5bH;Ax+-aUNGL9)lvw`F8 z^TJP!{BtfDU-vHVxe~S)Z212G!+V^|w5{BrDU$gehq-)cV@oPLbNi+mR|t1Zd}P4q z41kG<0*e=8}H*VVBZ`__UWGZj6NX%z;8V@gK%}h9xqLbE4>Zpmyt2 za^zP)wu#$$RLB)S;Lp1Fdp2)s{jA-okeB__H5}5u_6X!wG0g3lUGo(+k$_PikzaE1dg-si<6m|c|giFea%N@$(LcDdww;;r5hiwjpswT_MYSM z&gMxE2Cr?W9VjeY$-W&cA}xa_`*?;>>Yqj5`C?Fq1SY>5>$P@U<>3sSF9B1&yS^EP zQQdVX>M*uUQk?$)?bV7X#?Ls1!I+E+{{X+ZcO<`J?Eny#g{*_Ay%cZk5{HX)_{Jd0 zj0;e5UZpo>;HQ@X%%TZ97vBy*=nAsSOL8ROb$eGVk-!$v<{t^pJhF^kacJcwQeB;w zfGqj|2LX|Wr}ZjZD-!tJ4TwQR4u?2CH51yhJj2azk&4(Vtsf3l_2Y2CQGBQikI5z# zG!9C#kEue|s(%19Z=&?Gwmn;#5UTodLe&)B&tvI_X}#^sKCR=vAmoHHL@& zmMY#hsa-Pq=_)}oD%#e$Zlp}{JLC3da>ML}iXE^i=|{BI$UZJ%4Nn#W(u965N-wT_ zd`-YJ1v{rdr%K_rO%A~Jg;9aw$vN!1Jk_LB0*Ic$n6OBaKmku4hXO&NJdl#@MO!do z>tOp~q(iT<{-xK%O2vs|==7Z2s1qna&3H2WyW*wXPqOPPQORM1qerp@b^VvF<) zQG()1nh+g52qGdOZ3C^hO-~?~twfz^$UHy*xA+Q2IE>;bL&*)BiM&rw>UEjPt~=bsj33O)M*Y|ekF+5XCY zgpz%h2S?lU;12%)vmOn`k}a}*b;*Sue0TnLj~dppgxE7t_2ip{%A~`h&P1xc<5!Ag zwnV|RaFq1d$icz=xumhwfHII{WY%l!q6wM0Gi&jnIxp6Z5b76~uAZlp5zlW~(i~DZxlMIQ0 zcZ}6jxntI&1{a5e_Q{cD0G=ixz)RzDW`TJFEWYtR;g?2Q%eFyMy-3*zFn=9&v~gF&tGw7dJiI2C zDBxl8PzIFKH@Rcyw_%xm2$OiZ7a_gh;J;~AG4&3rEoJKdN-F39HKliWLI3~zvu%uJzqDxR@z7F4ODuCe=;TyQe56z>}(jicqH@NrUM zhD@$q>hI-YMm(9Amk>!?x8;SRiX{Va#mB|T!OG!cGot%bfoP)St+972$7-jr_{bR6Z;s&D8T`7^5T!hDylxAOL`)%;i-Li4l zC7rmG?w%^nX%+>2w9=)mB`+X{Kq1Dez_L5=4veHpMNE8-0px%uc9(C-daf)y8FQ!< z$4I>Lt0r?0HVE0}C<-}6B=Pa`USlPB9jgT?piuy2^jeixiHZg?kF@F8XaQNWkTgSh zL3CX^@%sQ&%y_r;_Cf%8g#=KK?d2>(RFk3rJli7g#Bp(=8jNW45+DLb(TR4cD8a{G zB4{0l)j%hv0>w8nHh%?(ZhP7T$CX`nNqzqS%JQ1jFei`rYO5exe{x6J!^vf&U4q>_ zV=x&>J0K`cySj=v8wsl-&8g#78a|W)i^&iYab+RJbG8dIfs@c(2?57odJ5apnktlSfzcCEIIkKL#FA#igQ4^_(~yb+sa9PbatulI z6d%F*RQ()l?0WK`W|;P;*d~_bW^}yh_z|W4h@-z`$fs~uNlVg)c^VER0w|4GXJ=DQkzB$d6SFDw@d0S!UFcsgl;?Av~O0eLV zXT-Q&udv|uEIj`0+&^(^DKWyx&wNxC#niuerByKu`(_4CJh4*!%QAeakkGWij2;c2OU3lqH{@GIH_MRk1-1_?dQ& zEh40;F#XvBmx~pWcp0pN}mu;*sp3kA0=xnm8DO!SA1siScgV+c5FCzEy>D zEBma6Y=G=ScPk?sDw3$YkyP$-K!t zp4*p)E9FjL!CbPxVD96ye)BeFM9I5OHrGLl1h)XZy+F~O0}mE=F<!4XW{ z9?jkHjPd^fa;DANyJjtZV4b3stnulP@mgfT{yp9^vGQOpiq(l_rZV*AjJ`alA}x3e`Ct+QSBKf%3<6wypXmNlGB&*a}E#rY0rY|VUjOC~ZyG9lSJV z1xx<`>Z2pK9!$%8u)k+EVzyqp}P3&ez-Pi{0|Oo!=Ms(Qn$WPj9bpOgg?w z{{Y-bHyrO2@(i)TGbpNhi!X@sARq8S1<;V7BK_MV7MROBGbx@z{T~~%jE>V@;xG44 z#F6}}Nq!}Du9R}uGqOR^OEiC!00Cm8J?uh&;1>2x4OeXJSg0H5aZLu9^f`{Vz%Zi& z{{XQ7%y}HL1L=)FkOwTvr_lQ?1DN_hk;-x?T^w;_19=HS`RkgMolMTR(WjM5 zQMBj!w!YghvdVtQ0>l7E7CL5CRv<5}eRRm*ZaYvI^9P#viV`MC3gs+fRp`8T^+Go^ zZfy15g37~^xg38!oq6q(dk2<}IQaB-KOhSd0p=7IB!NQiwRz|ObW8sL7+^#4J7FeO zde2M8W7U;>fYW|G00hC8m5}W3N;w)bnJa};v)3*Y*d%j5*mL(6(AG5-J} zWNdN-{{XN=V)km=6bRg6Xgmb0}i<*C*#KcDw(6}(YJJg~AGo^ZA? zU{DbB&&bYTFYZ$R0K)}&wFwe4Wjf${PI&D(8TV5>C$Lm7t7A2r#FX6lOa!)Q#KJ(% z^IP0&nBMo zF--C+kByLPicr#7IGFi4iXkLGik?vYs@OQtwt16SVyP=g{Cl;w4Qbr7nLDOjj$S2x zDGXdEUy%HU#*y-|!dj2s4(Iaz;pC&_U7_1%lH1m#@+iO-ZtB1257~|mpZ9Bj+-01< z+lbc1r;_T$dskrYUGN&g(sZ{;=DJbk4dGkHg&Ar9xru;F~R)!RM85TKg|CC+kE)r z_-{(gsaCS>3+iH#LZ3$aGS@QKOL-lxgfgDz+^^kxi}wbv8N9VQL$cmPwkBVn67kCI**EQp+!&?{ z)fXiEk1GlL_GLS2D&eu#FeQ`*LYmjv8Z&sSOr7%d8@YEWc6IFH!LX@uWJ=&`v(Gh1 zWH~J>qO-b%;<^o?(-Mr#W_a=AGt3|jzd^pp%Ib!idC9$kM4glovH;pn*?1h=8kCPF zD9y;r#zPfpdJBb0!p`jha1P!;+Q!*^g}`K zdr{Ie(u%}whRY3>(e*TD(OXKAO%QmWYMk7FISwj%0aUmfD&s{#*hC{le_<^))5cq1 z`*NI9@XmMb)Tj~^_I}5uU_I>XewT{*KvgPvFCLazb zF6lF3G@Mi&9+jPFLQ~R@L1G0q;0i8^sF*YwAiEuxX9Yq{ID23yn^jXM1J~F9QflSf zkv~)8XO@+Q$vt|aqc@NuuC%-+9Qd2bufRpCs-1Z>J<&b5@d3#DA60fPqsGK&$R2dl z0k_tOCZIUphufpUgRZ{5h-7K~)|{O^?9I?e$5K={*kbC(kt#&}C<+-$fy|aHU5r8< zt0HSkuSFqLFWXu@D#k@C$NmDXc{1zBysCCcVdNZ_X~SD^SP8Enp#F3a1!miiuq^Ik z-$EUmZPKXUzi7W^QB`DgVoxvdz=Zm)wfO2Gxo?r)y{j=A1pC+9r>i-13J(LZ)YP)i zY3P57!WF?8Cm@Qg3K>kQBGIzEnjmnSJgr-D;C~I(Wi*`I$V|CXa3$a6|{*DZrym` z9Dd_mVUWmMg5`HS-uA=yx#oz@StOFq$fX!?6aWqOPuk#Rf z;Y?22`^AI!qg9-HuJXKHoWUYI_6UAbWluiC5phbGy$84Q)2;Tm}2mCl4J zz6q4aoE3bzcg(`=;%h*enF+gzN{KGrjG;XF4#$sf%#36HpX!J#Z;{qMT4P{jXJ%uw zcYX2#gn$MH)SiU%Y#iaWTEC!-A~SbeZxuy@}5R|PP_VPkdL zJA(XYCnqKHnwD&GG3D4X@$x&@Y{JS{z8*YZCo`_i@#*}7zvS{MiwwEii5|t7G7oGs2YFGn4<%>xrY%9+iUai$#g=wl)$)8s@-;NGd1sBq6f&1a=}a;5LlA5|ZE2&l zk@}YKU~+Y5<~KoB$K6c7EfFkz7kJ8$3k<2(U5>LdjhKbNg;bXvoU# z*=Vnjili9Dt5TB3Q&mB}o^)0#Nsz4n0A8f&;Y=*o9vPQu9@TdzCjqI)7coknr-ybH zh;9Z)Y&U9w^dwETR~HM;GMSvIL-*)5K>ef}Z;Gr;hDkS&smFAXVhfy1hQ*d;AmbRn z4dcqWc{sT0i$?n*fW-=^Q{|fwse_R5YJ*ML(5O!1Xf?5=1ywUZDbrU@tyV1CKKYp@smlVl!TRfjJs?3X$!%RRXE1A1b-m6SOwchLLob{y~5M~@a)E@}RH z9G8N&gqcS{fJ!FHvYnQbhXFtZl}T4J;t_*-17MVz9xnS2?@E(aVox3(i!{}|B(ID! zY0&XT05-}u)m>y#l=}q#03C9v@bPdIfzuaeC;M?9fl}Xf{>pxazh_qkf&vQ}{{Vyi zf)W5b8XS(#;3~@CC@cz*^#he^0|oq+R46g{ka!>I(z2Q=1yaE_tU}3MfL?4zKDWC# z`vu~5r-An-)cE@iGC&AHpZkbK3d~f1C+nv6YHCR*V7ILrgaT{%*1!~Y^b`HRlz+Cj$cFsThNDeA0(Q;YvT@-` zD+V(Imljpa%cqWR1AEmcH*&#)0N^6|J2p#Jt&c!rfGn$td?+i_CxvP8d& zU^~PHW>KI}ZTm8OolUJgoF&GN(Xiy&47s1Nwp3I}RZv~C`wmZRz79HBGM4h4 zWlqD1%d>ogvSeeUcPm&S5|$lfe%Q(4?h~j{Nn<`E=GxUV{j~o8jWMtLFqWR$+(;%2 zWgM?0_#OvfFNvl@kF@Q>-Ko2j#9t2!R*-m#o!+| zBpCMWS|To3tHO;hM8Xo!&FwwT5ReNB46OW&9G8n((sQjUqm%q~J3FU*pK`E;r-=9M z)s{tamQS0yD3f@UJIxw$xMO49^9hfM#wpt~E8EX$$yQDf$e|rT#`%^?W3pi6 zIc$uH;^g;?Oty*`_O99qFB+U=0lhOO-5bQIF)MD&rI=qMBe`OBe$#-O6}Y3zzIIsl zpPFO#%Us?_@LD%@#7MWv;oDv9OXVa~;P))9)!Z@J*sf+YPB`f@ZHt#I`8lzj*~vLF z%Yn<8*EGH=a{Haw*HwmhJy=3w}?#mE)|&Fg?* zN-#5JDm1-YA?5y>K>8vUPNw+x$&_+KPaUhewpJX1=GGaWNkZWyZRdczD<$UIVsX}) z)nQDQ4zb#FJZBh%L*zf$=kw3)otrpJIh2enGB1@yUT#W}q1R!}mKS;LS+xYtc__|4 zVU>%Y@;>jCh{M43J~mG8g-*kn+HZ?MNJ_znXUNIUjs_=iON-<3SDmtZb?0fY4;M3O zqS@h@lCLrL*1M-{%k5b4!pe*o-;HIK>cC8w`ho1^HhcIxo7B386H8;{FwTjjmDMU- z&D>JYed~5+CKt!c_{}V+zv>;oE9lqB%YWmg1AT*rsHA*r!AiOvhGte;gXst=ax?Pt z6^*IMn?;Pt2}gAe_+Eb>?s#3kz2X^aYmJwL@jYT?Qx)T4NTj{buHW)_j@6ZiloX52 z*TLI6?E7bK$iw}=A#?oCOrmnFmyU*IST|K=^Ks@#r{9-uz9e(8E0Be;=T21_#9rBy z@hW+$&ZwA*@5g)ynPv&4@t_*t`2f-OsyMHu=rbU66dbkrA7IG;0O#-(&h$_9^{1&N zOMk|S&YT(FT2iDAf*xtfb_$NTHq&ldM*YcFRblIiQb$PVfCFRM0l9}=x##&DRE{b2 z^gqZ-hUfSr?a^c@zaxLnmV~3J0P)cUs`hcV8`mC4&NgOr2DS@}4qE}e?Chvg)Iht| z+HJ5*#|`=_fl4qs_q7f71Om)9eyXjY7=>N>>gs>7Z~i|;N~fa5c>TKHi1M2iAJmQn zFyZ#!v)3LZDt-sPDsAjBVh+RfX=I>OeTE*oXAG==5B^!q!YtjLw0Fd+B<5RWf5Tsi zR7Ke%Tv*N3P;7t;Xih~#s<9{VyCFFbs)ig(Iyq9RQ)iO&)eK6~N7uf&pitIjO@|uDXORWh$x=Er?vNLFJkYqyOoi3ZCCFf3VMAVx*t< zbeOCyF%{Wz2Tj|v;BPT>N1JhejQn{NljJG!jV)r3q;9o-BoJ4t-kDF2`=h*6(jwtc zBOn|%pqk9{Cj~}AcY@6^r92GMLn{`Fp*gCivruCjBOxq~d3D@pSSBI`bzF>KSuk>+ z4e{cwLXzdmce_hIc~ELfo7Bwb0d&dBvjFd~ozE)W=OMCkNJXn6a__B$9`@;ujK#+Ia0FBFHhj zbo-`G#ia_iHX}p0#(x)X#f`t*W@at>mPdGs&$*A;(Q7KiGIYRI5X=)zm0r6{G3kSm zn7I`l%70YE&$?%2UolvkI%|0y#<_T1x3*)a3>+|6&T_~HCmJ~GOEmT<@i?fNv2=M2 zDC;5cyH{>}taP{UGa@7}+x)plxKz0rGsQc6Y(DMVyLV+wtVv01obftw6wXX|Rqc%g zAzIzavh5e_pR^N7Wwl*!-w*!nvSeD}KZz%ee3ZpluPRYkvBk^C?d7Ql;QYqhwY$&c zc%9ETC(UUiW#v;3Gr89$whqDVkoA&@H7S?-nr~0ZsgfrsW2cvm7#+{!*-MXiz_kLx zx8ucS#Et1sB$CEY)>bs7XPn!bFxw4jbV`7S zePqE77Fp$|MV(b^1N%7SrFSQCt<#g{+Sg6P(}VZ~u-gt@T7~LaooLL26P4Ti7DYy;Z|V7gK}y&*bhOCJS`GT;_fM;s-Q4NRNvgsqO4IWmvlg?108G>ywqdziqV#YvC5>!Z^M%!PN_y@BsB_A z003`YHHkby03Wwav&q>tHUn$TkjrbeI@xM~)-5&F2;$hdFLt*)nf+aMvWvaU!mAdc zRXF$~7s0;r94joxQr~Gt^6gl;={%Tk19YNl|kcKMGx(PAspwFZ} zJ)HswniVc|8((6{%4zm2=lTvrsg};hwnZp)rvX9r*WrR2H?D&-k41k!kOL_~+xvn# z`mGobYTx5UKrX*;e$4`fACLIxx`tq_wCTz(pg;EL`|%Xm2V<=PuoNCXw!wfTzP5T$ z=Z=^bU%{X*NIy*dj9~%eE=0ENeXt2uoj*cBoLsDasU?&Q+&>V`!i8csn__4RHoRHg?)5W%oA+E zrZyMGKw^oe(bqvsMfn1peU7BA%ePeuf5@jNED#k@_+Uj9k;y-mGGFZMef76>*7 z*aT`o0{lVcu1BXvatI@O_12vq?4%A_9W8XMg}<@(5zQRC@l`3r0phNg{yiy9CxXtT zHi&jtQ|1IZmGq(9*eP;e76?NG&x+s8T@WH)bY?%8ZxV>FegjOYtTJG);GwD#b@VtZO=!a22vY?y|m1NRJy zaqgM5$zn~Yb&VW++Dj87w>A-0^9r(=_a5ta$HGHu88s_BjHJni9Ez34$6p#sxcRho zlH$D{Q{_owrXOvyPbL1<#&>?P-q3@TP_)ouE#7}?UgMM7*+jdfl^EgS(WwS_0VHwB z8z0Y+XeuAGmn)atT6kF)IFe)*0QVZ80ZnZVP?=t1D=RtCXOh81m&uJT)cETpoCp2m z`l@4hY)<0c{`6;T#7Qn3@E!89jRTW7lKgv*W9}op-?z$5kx62C=n=){sYWA-1CV@W z%B68Z$3lQkX>#+-t06U1B|_qOa-|2#N1DV^tqXB`WmtnrAzq%sON<&}fj@q*AwKEc z{{UnvgPzHJh#2JLVts{@rBdCqC3}VxYrwr#46-`z81ZDD8-;cKuoOQP%_A2-wdFB6 zctEZ@H?#zMn)=jg^YRewwnD5sWY+okQ(B};FdXuvW1m!Z3OwIo9G?^C;j$%Vkv;9H z{K1%$r5ZF*&TOtZ>tm_rw~Fzx{OLej(4t~4fbx< z)FlPQzSu3lbHFp7FJr}u>|`cWvN3l%nFNjgBGXJvwP2*vMLPcgOtgD+dyM|^-wO3Q zr`sc$E);^b?KfEV`$4~QGJ#pDrDQl6X@eACxfFOVBRiQZ2PjeTuBqryFD-^m0mOSx zV3H{&KtA8$N+l==Qc3n{MVM|J_=DGR67ws_o)(I?R?W)sMNQcFla7$lgRve$2en&2 z?W-OHqp+Y08i3U!dmmHykSwEr`ax2zSZia~T$-Q3%0pvdv_YCafoJ-H5P2R>N&uks zY*?gWK;bzlD45L=c$!2y=<`f*XUjPlh`eRVxc1mgcT5Onxk-j<(Vr&SHp<6F{Ixjr zaZLMkvuLCe=0mCTUmm!gWAe&lBIJ-(p1L7di|lBUTcDiysXV{V=%leAYu~b{ucguC zJ-00JSEpl@0oIR!b5XnN7m3IP1yN&RxEw*(t&XO<;J_dFJs03Czvq6sNAc0LzPGN5g`XY- zg+G+m%NG2f>Y$e6=<_<|MH?-m6?#QCl@A~akb3_BEO_jWk$pM>c7MtS3_u_8qNPi? z(}*ie;|$Z$Pc=L+Vpz!9@$W23NoKph>9xi?CvSA4WV8|#QXShYz$hf`Ey=Rp4e&rXO? zulWaRJV=g>$mzXlN}z5Dt^WX*(VW{yTLg7PS~i>=@dOSCr)rLUejke?aX*j12uBwi zCt3lCAdT!O{2@{td(dCXFe*{k(D&1-Nb*ld@S~cdp#_vv*&0B{@1#Ds^9EYkC0mIG zT&@(R)UV~`#n2%M$D=^aJrD;#5Xy&V>`3Tw3hL|Vbd1Ac6pc4eQ{+(k1pXM&%@42f z_ylqe%&HHfzLZ<)!|pZHpI_kphcb-wb*GPFL=Y;$uX=G+SJ53sB^;g-#frczFe0J%U$zbX>**YyAb zauIRsLO0|eQhP8_-La)+9z1{%`p&^Peaj;jPtDSVBh8-&HyWaf)`OZTiO0&T<=x90 z(3b1IoPsM3zpO6G`=)@ za#tlKEb8IFvtuHvL7%u^3WhD>r6RsI>6a@NX^&d8=*+G{VVs*?keT9R;}>Mc%Xnf% z@#X_5EoRS_7C&ak%j3J{(6StC!Hbt1gygghvev)zl#Un11C>i+=Jfli+jxXXA9%ZFTe z7qi1NwqpEb;)HT;9r7RItBsBFKF#~R3~M-7PWvRu?|tghuH*ZcGk(i-!BLlA{$I47 zc&XXJlJ{)!KNwt7E_enr$$)k&An5)&_Y9nBcLr>io>qDG+#1|gQw7uB#vVk{S9X#+ z)J-1Kjyq*yxgsY6rPdP z`Z!a)dx%RCH8yfSH+II%$mCClAiQ;NHITwfH!BKX9H zGG<%#U-joeJZ;!YOZ~?@!o!k;1QN zwOgDq^0^evx9+oYvQZBf$$E0^=UK0AYNAqpu`_Yyrn54V zezMrmPD;RpGoP&%aJ^*WQb=J$)fKwow3u>8Q^!ROkBix04#q8pHe3;a(Ir?0D(BDu zvoBMxDI$QN4UO4{^;J*+Jw2yAN_=sRKZ{rBOw)}aXzi`?3 znE2=MHfKF8WmrOP6p(eh@k_pxao*HUX6{Dy_4GjqSTi0;_~?ahev~)oYU-=7G*9;H z(y8P5C#r=f$*=3|g6Enr{C;|(zaC0=_-?d^Wd0a_K;RWmwPqtl2h~a22RbMFeU8Zg z0BsR?F&i5_6(vv?C!`!l0z!^}@uvgi8a;UVawHvV*Ffl}CI0~IP=<8?Y#+xP=DRED0r^j zzxLPpJ0Jata-B#z(b*jkTc6`c`j2W9enC1tRg9fe{BQDA6&Qsd+g&O%9wkoy0Kp`I z#lItd$v)Hu=~#fC*U|Ua*MSPa9qcF}yl=8k;DQ-go+N&C&>BSwe!BJ6n~xHAuV8xs zI3O_Sx6u@D^VJo!pn3zQ`ho!b4_yZ;+Xw2ys)F7?3vWZ9^e23Fb^TYCxd1o*dhrL@ z2jBegW*`s=(ce=CYCp>ZuDJ6Gn>q{m@SY)w2mExPdK%Fl`ex-)+xM=Ra&!GXFG{2- zC)dC2L%^eKosYoMj(gV5m{kc{CojR?{T4zQwnyiQ0*%Cdzp{kdnH>OEV5Z5Yza!Zb z;?z*Yw6j69_a88*Soz>Hmk^tpur59)4tuRG;2co)!LG4k`nl??T zPw@3~aNmH(ZPizj&`)|JU}XV++F53NmXJ<3vkJK&D0aqAMUpCZ$w#Kzj(NOc3*a2yB-(jDcJ3JdSr(8hU+f-z(874+f@U2>W-+nni`^)z zt`^=sG5cOWcBk#BR&+$?%D)|?QJ#EEWwXtcSq^~(PxW7?YQ|ngfvBRUH9}-N73A)u zO}kfcmLF`+nDTRb25!7qlTPu6Kux?$d?v@1P8D!Dq9f>5D@YFIiI)YXaHSIyg6}AG;_ftk-IU6&9a^b8QhzjM2#+zDznykZ>+b1;3%gI8^C@P~m9v!bX ztXLJGDzSx6YwWqXHwM{AL&e|snE6ntXJDLUwNsQYbR_DG)u;_)yCbPl7A z4sCFk5#oqNs%K8SiXwL_tbh~bHP(4NkqBOD!*BgD6-qA_qMolfW8i0EhErR*JcMZI zYguvrg-E$uiPB{M08c|5LQd$zMUWI)OM#t~9u)ytqER@2e#V1}(PGnng(-RiT|WH@%VZzSN!TH#ZDuF~z0k!_fYxXQo9`e4FMq(rE#9 z-otwm$h4NT1eoL}zM)zpHxONa;=S7{Sg($FQglu(LOx8gcHjK174eKd(M;K8y3a=+ z6l826J~kf59rg8Zu^~Yq1Ag5cyh>$7gBc*@)Tr`(f&=l;Ck2&5dm!o8rb2!H0Q36X z6r&ONVbwNm$ZYS?4hIQwE6g8Y6i`8KC;S#t0;xOKzL7u_1J=hwKrY6}U3C76@81Ew zm3HBM?EQyZ4PJo1PPKfE1fgh4U*bYchukyR&JulVE0OM*Vi~wXmkIzBWvnr2Yo|LzY z1EM*84EN8D{r)<12o?VT1b%u8{Rjuy-q;351Q0i}Sy4F!-}UxiLBAtPfb_o9fCs-} zeIGy{{rYch!}3OtRndP@#cr zI#mAqKDW~qM|BD}`6Q_T4mu;)>VCz&Z;18K8w#5L02}D3(Exv+z-3^{eUZ|8nv<=A z*A;g^gYSI>Eds!i_R;8|*cxy7>wnI8`&Rz|6WY~=za3H49b4Y_(tuym`q?0`(<*_c z{D8F3Ap8FSo}WvvM3(Ao#%w>`u3=RukYmT3j=IZ&raWwf z@nS*hFS+z8iX`!kovuH?4Y!ki$CSutN*1+MZIG*wztTDn)>;6lHL|CX7}tDpMJH{AhsQEIO9&gckI~f zZpYj~n=?iEvi9jdc1AV|I)RZwuIgX0p6doI9(vHooZq+8AQ4Kny^iGJ#0X;l0K^Ln zJPPO2CFQ{i0qYwm$DC;6PQLmXkK!^$2;8(AF_@F|BboLv){ap~1^ALkdB?U+MRpd3 zn?NaV7cEVl8pkue&VAPh5nX2-nT-ICk6T6C=|lDyjIy?D%6S#y#Pp3Z+f&*WHUN&~ z5NGg^911U`t0-j-K}9LlJA5*7dqRqBa>$oHaTJXMCefMJdDHC(xc>9QD-0qvM)yY|lDvmtWu<;$<$_WMg6O3@i{ zT?zfo0>khgQ8QkiZH(SFo`qxwDe~jvU<$9LIJlO}$dscOB=12;9fIi7K19j|8eU0H z5~m$rQgY;8iF};u|0r5&@kEwb}gx8or*#j`s-u*(LXm3{S(nURBe zWMVT$xbrE_<`>E|SAGRKGY(g{KabDWaII%!Gx+F5j3G^ezwJ0M7Rbpig@VYxSrulA z5LF8i^^R5K5Jqnj?h?32l82NfYk z`gwv$Bz^smp2Y!evX6Zuuc8ONZ1q+=m;MO#)js28ceU3wAJvqXAaOl-rM++1+2X6? zMPfLsb;H>z{{Yk2>&94?KtW&fgX&5ApT|Xy*@qnk(dhbR(-u5;(pzMLe=F!rl#_W! z`PW0n-$o~G(BQRXE$v6Hyr|7Xu1Y`4xYL#!-{8h*!GThE4d^^(Ij^SC0X)1TG%cV% z-9}=IwIM-6i?qDwFX-oG$*;NV@2B!YRg({w#TH?cEyazsi?mI*FJP?*TJwX2ea)cl8(6~vuh6H{X zd5aWcfr=kpJBD>9lQ}-f1x-G@i2U?OQq9QvU1{duM+$fU0582BE?AJ->S#=5LhPgs zH%b_N71aHKB|!npe}nzlki{9B@zoKMt~~>wdSc8F5uykqu14c$@J_VA&Wd&G{EZM# zt)IwlJd&F_>DVeF^5d`Zwgi1gBhU;L)BJiPqT4@pU{Cn|i~WZK*3zr6J+DVhpbhPR z%DLsI`wq3k{DJIsH$)ZYyBxic?3G=w)BFk}l!Z{g4Ul?9oP(xBDBRcRR(fELSBjDW zeAjGdM@g0n70iGb#G@431Y?g;J~T6Mhhc_uBAA7r9f8lP@|;U4Kz0D>8Q%_5EE!t7 zW-;)2_T11o%CLS-*Jv~C{fR{+LyL2R=bBoyub1;+{#NdTBPI`!q`e6Yt&xdGo5i>~ zAwu~kPij(1&Io|NS!E<(YQw}&kyi>*mIhhk)uT|X7baAjPoMc; zu$C<8g;V5IU^lXpk7X1;LX}WD!QC!qbcsWzZpVz`6 zhwDEsdCixVPvee4Xd24MmYk}hE}PVutm=h;1#~+2o>JiVXoL8?OhL`!oy)p_N=;a| zENYje>IWxh01V7dR$#oj2h%<&NplqXs9o~C1w2i~iJ#amJR4V1#IL3!BDTsldb4@F zn{(KEneO=bCZT+iVJGWj7*|X{s&rRT#%(VWM_seGoSylEjUaVK-%gE+xzTW@iJ72A zPC^QMAg$J#`A>O|eC``8}cJIxE=Gq~C5wr2J0b5B9|Xv%EB6xHCT#p8c>`Nv%lB=S7MQGzw~YO z9K=1n(uf&@ehP#|VeQHMy;MG%m%f{XnMmG;whBWv9aBKJqS318k-lG!g3vPPm2Lk3 zUmI&|2z~qNj>GfC&){@fr8b!V03&CqJjBN^Nl~-VaC}lvx4o}LkPC4>HeXB>X_u0e zR{sD2G+)Sv{{UhdgasT`b@<;9$f|d}@KHi`vLn`yNLlwkKrg;QmaXF>hW`M|bLGWs zho9r8H7JBO*$EC7sE26~Y5oJY$x$Ld%XRFgLT$eT?0~DIkk379ruw@p=|NqCKRYPl z#grdx_T)%ih5rB~pCTguLjM4qiUL6^#As+Av(PWL{Pi>CNVq7z)G~~J+J63AHK)${7T0o<53s5zuRX|MZy`Nyr^P4ZNoo)XB zhe#Yh+j|0!L{%CGsd7bN>dWu&e5pXH6;Z*_A^c%OAE^GpHi+ViSdX}?f+(j>7e#vK zt+0wW1avoP3{{WZaG)E8h=g?tOzz#wG0KZ0LeRN14g$0WhBZ8ms zCO~HsA$RYpiIF2e>`sqWl=v2P0I#k1*}}MSrT3(udC-6dumPgHfzT>HdHKich9shaWN$H>P|B^AEKDkt(T;g6jt*AAuNp+`7&jEt-^c%$)T(P0(FN>Z!j ziG2qFX=79&ivTA&VOA_@SUM#X_}Xt+)oO^KUlhm)XQAws#>Byqwi*L`yJq?F1n|j< zvVz@LxYn3Z?dt?z4Zo7}n3hEdAg`1XGP$&y@}z8zuxCt5H9SGuX~-^rZ_dNQi&`Kj zb5VIz88{#|)a6kRdH*S*CsH`I5!SvlJ**-K*x7CNWM6H(-qp-kDvd z^b`jt6D&=jBb|$f-I7oolA$R0B@{U-%oP6s2xVq`Ib8>yRq^k+QDfTe+NXf8Bs*c? ztUGW+X)0O6tM?4`%f^a-MMfS`+HtFqi=9-Oo8o=5V$W$>w%dy7Q?mEGEN;!-yAFOa zu0B}uV^MZjV6oEd^@W3xn%NIH`4TC+E9F^Y_^Cjcw_wbf5dg@|x$KRIPd7jQ+7fCp zW5!uOxDm$<8WlwdDIAQI?A^_VJZ&nf!y%WqiHV1P@hh~FldBQJipk*Lek}=2$9n!JO`U_C-&_wZPU*hZ@{TE1Mbg06_8XTlW26xoS1pE zsDF?pUVG#Ar~am)p;u;7{>NOxpc;N>eG^X_a(|}v#(ZZ_u-8F^pU40po|K1k_4U1; zt5(|;r_CKKqAC5EM&2o~LT$dj`ckUcu7m702m?VUPyl8u zIzwb_gRxI-(G*30WG1u%MU0elRngxPs6*19Rbj4(Zfs;gCxGHr+89wkpY(|_^Q=D&&nyE;8FnFWdk(b)#5 zQOhkjl==eAxtde{3iavMth3t|_tP)YLZEW07lmNM*RxrLE!QymRc<8$YD6Tnj zptm4nCcL>Q+OMWsz7P6k#z~;hN`>*w@#PUkcWNVXS=cK#l;rI40CaJMBYOocj{>~9 z`2PTK#>LBZ$S9v*C!a64WcLi~WMop5dy?h5cXG(X#>_~;XdgkJx63NOMXHavVbj|s zJCahZr~ESIu0L*g_QsOaC6mi>+`GKU(srf&)ThB;Cmry{DQgB-USYmZlbYDLy`o-8 zLmv`tS*I)b=dq<rx^c|J=5u7Z21?eH?gpEv@U6x4dX#BB;#H5NPO zje$d)kjt$3=SizUmEGyw^6}~1qQ!Bs#x@*RwB(#1!XcQ~Oe=$4&YiCz>Tit2sW>wQ z%DY*)xi0i^k9pU(#6M5Hou-pVAcNhoVEY^;ntiZ)EhWeMc&Rc9TtXb=6iI+p2h&PR63 z!NFc1_GlQYJ!O@WufY_A>rDO6wxwK3Yb{Oj-}c?c&5WsDHQ;g`j!$zfK0#gg$o9%d zANOl%j!xE+UeB49UW&YAnkbozjxlnwCRt1xla#v`a7XO0WGR=PJkv=0h2t!o8D%R# z!jIbvF>I?=t-gCsxICYUPhfx>9~Q~OC{BV+MwohF zQaG{7bkb7BZ7jEV*osUmpa`urb4frS2`}lf@$uItxY^9pVhXEvI>)#76i(-ke`S7h z$RE6J%RK(nfk8BGca#{-@+Jz-L)lX);L(UG{)#?622XD6y|=xmaS}@9yh>#E@}Cul zX`JSB5L#J1H*U(n?A@Qdne)O1>-%WM}SK{l^DC1GdK>3&VITE$b|7 z48Gyn49mw2Bo@itb8z3XWcJS8PaZGs=~Ii@yV>nzc|zM4+;5GSgOPz(tHO!IE1+)x zE~Wnf4YJEQ45(p@kg>f{MZ3pu$n3fK{j&5;K}YhxY@x-5MKsZFGXcX!l#?>z-6hYh;*W^08LyFBwU|zAXyJIwWf^8p`<(He-v(C0j2WCmPnoyuwvg z4_Ki)el9n5gNp}hV&q9ncAPcFs!pqy3Ri?%75ffW5S1yLlaVKjVqH5&dzM8YKX132 ztyHpFi89b?Fhez487O)(jf2p%zm;HxUqC4|u3HwfwH=t9l%c{0z z-dw2@NAMoiiI<#mO5S8nCfm-Wd^on2I?jag^LDJYTVrBbc&0^JAFJX{s8FfpBx$%H zahm=V``MWxLjXeb&Uo=rq)+!=3n<2-$Y{V3FWg#g%3_3}1qDc>Q2zjTIwd(8a^k$5 z4z$9pGL+No>~yH|ASvYJe^p;1ksz(F>{L{=fZyls)6G~0Ev8fJr5tA8<@QMFo{E5? zZIo@gpCZx-_j zDy{iH+mkvdKsBN{53=z80Dz@MKw?j?!y(@mpc>gyp@L7ys#G`FmGHF{kc4sdA(6r@ zOE(oh!4EldK-|vMvQ73?m@9rd^*RyY(giv*M-x_FC7;_fQC6N~GD9yD(!2U#J*QMb zJ}v2!V6zqDTE88xz4h*LcT#rW)J;(E;M$=37DNxvU_00PgD)KiDv-L-DrB>H@0f0w z@&##*)H?L6nvbGYoavWbLC2iHa5hfF-4*r~$F9GUB+zUhyZ z4-m9R}U#!R6lp_c=o_}%l`nDZ;-9wlPdYD6Pr<1X)gIJToc;6 zYz)Rk5nn$m4soAo?vyhPk4P*dUfqd?xfs}On(ixJ3qJXt^X&4&#GK`j)oA48HZ-5N zy3Sj9I1uX^c+inQyl*mspkZLQj?a3{1RSEK9s$km9qT$-sH(1zylMWYmDu5sWU}oY zzJgKfCJ#J1WYVGtW5B)Ca@oa7UmV`HnH(T?DzJ5@Z_?cMQf+*`RBh~vd6 zjXtk5!pRuP5LcK+8QBB(`6&b`2=P_wC?PAe0NxoJ6q8RBz!*97rpbxkv5@7A+)YxO z@Ce22L^B>S<_hUqcG>s0#2LK1e4b{R9sdC2xgGny=l2X}rZipy8yl$WF4GH)6%k5J zaq)7jcz9W++h&hu`1O0oc86nH4kU8OrgUbGMu^ztdYq-1-LR$1AaD*+aU1!@JD17@TKp=>Gts=e`zVtxh#mE2$OEt5$#q za$MezS2U(yFm|J%Vlg-=5&$%&1KGV1Fpmt23_7xFaG!%uskXYFm=ZtKWcDErkY0DM!Xw;?X$}tan?WYsErY(|c%^A5J-YT7-cU+9yUn3@I7*i9qW##Yo zn8CbE7@SyROl4ztOl~ifXjY#V%EX_1?N8sNxfr*DV=MPm#_f2&Bkd`A8~*GW27Uoh zDP0{RcRUdbTf^gJj8c>hccH0wRTemJ?Qv8{nHnHN&DPV-!j*^k=q+osDBM5&FRe&1Y(OPtlhCP2qpj^&Sx&&6#; z4)&Hlf5v0lJ9{mujow;Pb;`=X%gdRB$dP2M`>Kg%1{jHp=aRhD9}syQmRf>VOrRzf z3;9x$=Ig^6jgMNUK2HZ=>YZX#jFPc-NHO7ATW^Z)r}(k5SZej+(SZVrfU>quWi^oL zM^?xxTdag>v&1qt^=eX%5rtR$o;@hyBBdCyVoz3pe={)(M!m@c(T?_ja#L1XJJI(& zu7L$NGsJKUrUr_HYJq)hhIu$Iv+VTFSb$Ij9SXAsiDo2^sv=*;6?la|o|R6*%}FXr zZlqii=>GtH^xxKr#e;8Wp=R)KY<|BEW*fW1`h6T)G7#*#%f91GIJi!j=?Yw;&FJF=MxSY_GA> z)%_|^PeW`Hrc4@kEkHeVG8(1Wxcd9*HMm`?54rRU*)BYKHY49m@D1+mPhXWBbyv_~ zuta8ExccBv*|yaNXV9Mc^jRIK$B`<#2b%>B;a8r3F2E6JD}7f=TbSUAKe*(;7ONCL z#_GKvJNS`V&)09$1}nrlI$%LSTFS*XUqG#VP_Yf~f!dA~Z~SFiY5iG3glGIqeuWWy zs)}6)5Za#lG@yq?dYNaLuG#OVf9qT5xIVvd`cGW%D$GCR^gN{SGJ~mA-UpBB~L@Xk` zV$B6{$}W@^1O}jl@Z9hrjjLH<<=%OjSkfMt2?L*xPQ{0bGs`ad0=Zz@0xe9IgXFWj zly2RTD`k|+R3YHh>A-wZtA8?v*oS(?#m7usY$bFmhPCW#FWuo+E5_}eM^~Oe6YbfH zj>?`~rxh5kE+vkUYgDllOo?J(_+FV}^rVlKdxO$(?TO-8?F}T@B|*-1!1CnSX&)tU zQyOrb$m2GAnl~htCF?G6suf;`E);lGsJi=giQ90i*)x01F7m_2;)^@q8zU#Tcxb8H zaV7-DPX_JD-V=o~ZIZ!SKk(!c5{G~$8D-P^eLH^_C9T4ka?YKfWK zu{%TI8C#tUR-C)GDk;Huv9jdJ@(lZLZOHDe+^})1KXNcltV(w7-SK365-XdV+)UFW z1u>!DaH)7xD-uU}3xV7J0M_$!Qy+rbna$4jclj@H?R}FLPmS2|Rp*NHYgZR18_2E` zCYz>1OEa@aD<2qngLv&s>KuN>f)-0k#YRR|F>{J$B^m*AJcyqi!LDa=^5;y1$c^rn zz?C!dCX7SbnV6fm?Nay)aAlD|XiV5i^NK(1O$xI<&0H9G#|}-`YR|;&zaQ>#guK1` zyEw+1_fOeKq(dWCP8GxIsYMLRu7}@l$i!1G+`G&no4b669)f6&uTzoSTe&r7Mq@Y83YpQ!zCAMWys`0q+0!#A zvho&Ry5213#%zOZ-bXVkMA$`}99)J1TO&fh?Mk4TKa>*)D3yJO`*bm0s)`q9*$X(- z!!q(8#T5dK^=uB=mD=fww|tR1wJ~h}0M6V)kKYjh5a?Q<@MD^JT>{PFWqvzCQ_ZHA{2?S$J|+%#;svslu&_t!2beHT`B2%BCy za5yR>l?%OxUe_FK%-F*>C&LCO-hMqW^B)+{J1?|lq^PYra4hNvCYT(N5Sk-}*=2PF zi6Az(kjeS~04H5l7|Fh#)a#~zB{>c&p{|?{B-Dpczt}n+1lEDhzNJGv>!Za$_0-j9 z7y?v)Idtf#I4W*?+JU7kTBHO17;!-SwYK~@E_jFZ52a^O>Yxw~w3IF6{z0W0RE?Dz zXpCEql}T3`aD9KBkKvxc1A8bm9Do_QemNda8(J&qk4H!d-{+!@&x%YCKRrlNT)b0f za^R}L%YYOz=&XXU zGY$1azGKF&4#DNqs7G@6Fx^(Ts}@hC1AXV*-+K*tOyQ^mS) zxaE}9n6M0`O3^@aLl0dl`D8by3_$3?CdE9Aqk1!-SkMm#5U=UvPok*K8HhbTrtHjj zv7k9S1!P}Jblp~hPIRm{`8#$~0uZ8(T%@HZMpY!g^%E;%pY3G)^~3^LFV+75s<*1iv5O8$x<$sOCmey5~2G-wPF z9HPuf$ef%8#91X(oYe!#scGK$>kKK*Y$q!(a)uDj%}i1)g(d<^+wEOT9d01_&E$#7 zv3l1lD28UK0u{L1M4w%5{b~;l-2@kJ)>la?i=c#aWt19+jt9uX>T= zcF;k=A=>eCa^r_g{{Y$uOw%UwXf1o1T<8hvPb`(i$;DuHWavrEy0!a|n*%EVXF6)O>%Ohmz6VSOa4WjDNg-8ZVQ8igm)d`9E5&jcCz!iQ3 zc=&McHa1S*jbN0nJW3h~vNp_ynRHYTCd6xp5}Jho#iW=OG!HIxxWh7N9})|a zW)QOF)|m-J<;fkC47jAIu1xFvYVBSPRh^2J08pbz-g;l8KMbJ_)oo5Pvw>PJxiKMt`Vf?Lb2ba>dsd*O z0u#$XYqH#1BMwUjGgmEF?(bgF+x?Z~|qo1XcWn~9YQPx(CtvP3C7`TAtoRT2k*Z}URa0%eU$ zemYhYQg{V*AJht|*gxN|OZgo7W!Luu@vs-}tiqpv_z?%%S`_OO=^X|%1PKM zL&cJxev6}lrsS>FiZM{Bqt^yULSNAQ^~{E2?~8v^HykxZ=G*ntu}`%Z{PeZpNB);m zM^kM|e7*Z^7NDajW1-R_@Cu;tXWv3QKu6c0fKmsaCI{{v+1&1GQ~jY7zZMLWVLcAC#p}5aTn8076G^g;OiK-|Sd;$% zgbiz5a|(R`gzN0C%e#*qHBU=&XyTlHoW~_DWM~wtlG`0E$+|Su1_#(`e&96PdOW|d zGdHq(0aSEB)9={iTB-$a3WRPl*7{Dgco41u>QJ>7xe-tT4{4Akmwaksse`u^nr8OZ?1tFcNcHZn7eaYg zPUDMty3T%!k6uCovSe(9SQ6GEHeqaXv)seX|N!cgW7bIW=|V!jqFi^*E-I z^MqP=TGtx*xOR5FHW2XS10}m&DV;K5 zbvYT$-4NhpW7a|vY8ughf7!bh7ET%M%>BzEA&yANR_v>UV&?wW%$2+#g%jaKIYUK%xTF(vE&W;(Hovx=Zw)rxe_RCH*Ws*Uy zOqKpvgBV8*eBGh(&Q#a9+c^wR$?&neH^}=gKWj&RtxwajI7T9MWZ`*Oxz<{YY z@yvCROrPBMSoT~rI0&hL_E`A5sR7Qf{2*gMS#mKem8iq+PAM>#@ACU|JSJFAsN~lf ziz}hKZJwEo&rDW!=I({5Ueefk7m^u^QgAIt?-=;~k{B53NBXY^$+^YKOd744O-roZ zsuv=VFI-jiFbj0}m&gAANo&`GU5(ZZMUmE)D&UjD9}~4N!g6xowol7J<2DnjF;TUm zepF>rnG0ztS_BgVBMz{$qf^Ur0~g1D&b%R9v`m){6RO44!nh$^k^^#33Y0*;w={cP zDj?*49XgaePSl3f)VUKpeKz>9q!v;Q%oG0LLluuFBVW+R9;)(Cfr%X5LT2OwAr~oH z@mB8rlehM~(Sga~%J#y`s7|q*zr*x|{ktmT) zsgB*acWf%IvK>{X-ya;aom(DuV~*enUBb9$G$Uh+<6jphO;h~3@=L2FSc+C`$!hOy zg?MI+OwD3g4olaICUksum)tll)?6`@xAyG3R9%}gx}M;-!>%vwgICTk3rvCuQi_I( ziv7m5?%m(FO=<=@&2eD)oMDknYB8HegmATIXkkUA;-o`)C07KkPR-r&vhXpnoK}!`gW}B@@t}>m z1uH~MdmOI6)u=D3F89y{xMa3qMq7hh*gnZP(Ze zk3>~NsHrAPWN~Rmi{T76&-mw46K1pP-&PI~IUu(Etrvqzis$YA3rtWIPG4_*FiV zQVXvuY=7h>P^(b-h#XbHAW2zyCXTujo2Ut*H~BN75;V*S+On6PM<=+W@%7U%NAr{( zK4fuS8fjp~H^}uaL3Ac3w*0j`)B#nsKk~BKr4#{1KSXN8@liI={4`4&7l1liMU!Fefvv04OnK1AY1{kK@b=+C+GAA-xKeh8as zehraq#)|&{R_ax94GH8^*G^ScHaWYt&rL>vX|dHAzyQ9SBd;L39JGPxspu!;tbsOP zGwi8v=(D6}{{YJT;Oq*D1!<_|!INi>JVz0-QJi})$E#O@BXd93qKcLYN^^gET}rN# zM>AdR(%xAb>PpK(IMxK#@$eJoef^r3acy#H%xDZed~EOBK38x!YbkPyu3ka5HQbI< zJf>SE>z2=JR8x^+-?zy9vt&FTZ`}K| zVEE#qQK|xZ%Kgeu2LXTWr;Zl18NH{x6@2{Yc*U3~N-IPwB^IQT6{gZ{38L-JoogWO zM6d{CJ7%79!VcKyPcim15IIRyM@vR#r?W|^Cbe-m&o9f zsxXr0D3jw#{OY%-npV%t_eja>&1*mFs)cDa+k)MIvJEPyXTGcZ=?Qz_4yxDn|)hTZ)$DWr)Z^;V`clI>-j9+I(-;T4Wq-YUWk8%;^kn z)!I9^dt6C62;)W%b6(Ndu{*X-MQNRBcA0&zOWuLWB_H>BZSgMyHlaMNu*!iLSpCnM^Q{W&_8rACRd^pW&z|XQjDsMsE%V9P)6xgx+9e6<0x7s)XmTiZmWKaPTdY!>wM>vFqe?ixxemv#%3NqK*^n$I`wRdN8``iaN-1* z3+Dll1~wn=@%-PmqP&gi7Rt!V#6u`Oc6zon1q|hv=8Cz~Q@9MgGlt65ST`(d<1?f& zvz+d6xk<|RrhT$6kk3qtCh1(vzuey&GoSOS3DClrz26}*Sq2~xB2FOl#mUJi6eD;j zovz)YQSVUhIL_~A0gBH`PsJ;%6hN%gGoDiA?ZA1bIhl~*XtOTU1Exe`TY}L3Nx&jQ*W-}k-rfi%thEpQyt59J}yV)WA3K(5a>$a>&7sWW0J?F1qI?j@y!!Z5GFcZ(kbZB!t(WJmEQHBI4wX znU&db=PSB$2u}GXL?wY)s-N69_IkxqfGaT}Ht!h9np;%s{4+$W*(3=?_8EMM$$0Gl z0K27u=3B%)pQlKQjLYeQ)9fOO#-RZLcEIUe9kFA-Y`i%g5~OsLw&-;Z0 zyAl9(Rs}q~r#1C7Eigi{a--5HS63`Q4YH=NJW9l}k9s*YM=JLEu>A1_orq$m*kfuS z91j;G*i~1gz(9@5eLFs$&Io_P3RR{GP0@5m+sv)PoXKJ7%|a@ff0jR1J5sLm(VzIz zRcTOk8}eVqfgjlo=!!<_>>b-hK~`m{2n9>kee~24%~QR9twE=L1KxHcH1TY04xHPQb?bm{a+arpvFQp-kR}X zq|!m^-{M=4G@}BjHN_A1<*grQr;(z0YNd&8q#9#K*&l`Etu|gPIB1gf5mJHtf&GrA zBNCHs~ZUKTRT zB^18HD3ZE%^nNqk?h8M0&4+Mod3O0&ghKb~B)O7?4&1{O%FJt2(v#Iuz^Z0GPF`kK zQ|MEQuo%})@!b1V1O$y{KXp#|-U4Rd7jJByYsRm2NDNVmuj8>TSPm~c0%hc&F*B|f z81D6bK4^~#&l3|bDv@*6p{hp?rz)IylHM8X-YF1TcHmK1VCme8?xJ2n%FWi!nLLd=VP{RF$ z4Jnn1Zsp7P9lW_H`B>)rrr9$oi)!cQ2qraAl&mwcb1*S5V*DBJGm@PeZwy95mN9Vd zXWQyBrH54U&WIeJlZ-r*+3nj99CVhFMUpZu6T%wGtUK+o`=)<%z0fF*1Z9dxdG3N7 zpDoiwD%1U6Hx|~OE?Jk5gGPl+r*vihd9U&H8b%$u^VtaXO&OHEDRwRIlNIf)k1pjp zEV-<=M4R^R#PD^gooZNF*5t3HS#!PMn&xJQ%&8FO*ydxH@fG; z4+eP|D^}L09_igOyT(j%@+1@X@)JpR{7%~(ipM{>{?x7uUcF!vizIn%s2ZoL;$~sW zxa}gD2*5h6l3lR?Ms;d4Fsc*V@uIm(+jf2!x833O{YeeO#D58qJcGiq?o}NZ6jyC~^+@5mof4Yk@+7zEGKHhGqk7u30 z+H_XEy_a%Vd*ib5*^&UL$_kAh-xSYGoGa8urb4)`W&{CwFw+(2E<0hC=F3U4l?NZ`|V;Op^n#MQqI06245?Kkt+arbOo<+u4a

    a{{{Zj@1WrRy*<1Mw2x&!AEB^q( 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 CjQYp` diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json deleted file mode 100644 index 411a04d..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "Login.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png deleted file mode 100644 index 2b534bfec01786a4f91a391bc8871cd4d4aa36ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33698 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 RTfjv$44$rjF6*2UngG>dG6ett diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json deleted file mode 100644 index fa39443..0000000 --- a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg deleted file mode 100644 index 19df7338dfbe10f6bf657186e20be472facab8fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111650 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

    S6#9d;Jg-avp2>UyY8} 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

XQiGN+QI-6%2UX%xq5g;8Qvr? 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 z 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̛Z0+nc6SfYlHfS@p}I5d?DOm_`StD{{V9R=joqy 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

a{{{Zj@1WrRy*<1Mw2x&!AEB^q( z7C~)B(|3N$P+$K5fQkuGev1Ao1aaH{0Pr)D_!c>+E|`hHiB1{J@?5#p$o3RAKPH(C z{f<>csO&~6s4@XnA1z9Q3R75t8q<&pPW;p*S#TH!Ck(>KMky_8bcT8;tny&I(&PRR z7J(VqP?i-~l-J0=!Keqn$%ZI^MW95{k0w;6r9y>PP9?v!kEy3Q`?z7eVM>93w+c%e zFJc^Ge9&BY#Q;-jZZMZiFSRbR2ZB7LrAYD?@3??r6+Rm4FiDuAfhkYyFAYF^SMbz^ zDS@hI{mW@9C;Nm89|%mAxrral z5rLQh%ZeOF6I==bN93?Y_`E>3SHr`Iit95$GHhhwlro~yXTQvzhe6**sl)L~rQa4-J=dohk-trmDj z?5g*2{!~Q5pQRm3h~d4t&Z6aQW23@pYoKn=kvD0!>3m{4%bG?^5Znumx;DY$aNPVNgLBBb1^gO7WI3-R=CL7YT7Jq@j7tWI>xcL>5~H zv`WSRDK^Zi&Aka@osC3(kDPsmFmO>%5boFjJ9gN#6x3xPEE&W zhE(k_sW#mkCHbndvOchoHNoc2{Dc;0QK5(w(Nc|HV4Z}4hdY?HQMfxT1-FNP64gM# zduT_=hKEW{5rE|X0L_q1wJ2%*fxFPGh6%4IBaG=_)d~Z$VBAh@@PFi6eG?fqB8AtM z9E6Nl70=&DV@e5y{SxexV*dc-wA7Kft0>$pzwu3FT+8TKdfOt0X70YzW& z0!>iB?_s)Y`75g{_!0b-WMaJ%stvOY_xNM}ijHNRCOZcwNVbpeEVU?$0syi$xro>^ zBp=v~)566?-wjH*ZXsA#$Sx7Wl?X>pk%$K2#O?q>m05wf-|#G}U&5ibrK=mvFSE%) zF{+yW1R1sv@c}>QV04 zQm&LX7VbGtP`(Gqsl4(PKv&6t3Wk4AAqW1PG>xA(APNXdmD!ZLg6ycCpOnB2Q05M5LVRtU_i9H9z?7jEdKzp zA!uZ8iC6|vlVAkM_)Vs|@Q5%%jPhf3m+jmA%(_)z5f6l{y({j`}|iq zEJEMlEN#yTQ}O&N1W%vE)~CO~%D5lKqTfG?{zw;p!M8D>Q89=GU;}7N`zw_a)St#l z2DD??G>dPH+{zOnn6cmS$wbk(Ue*$<+v@)S0{Q$~RmfsACRn?+M=4E`$h870RhVWS zq5x?d7zwx)0*e0t3l=$X{0Nm!QtA)-Mxf>mOp*@BuNmgeDB%XbhSIkP zFZyTYL=w{LEFC8qb4=iA{e>{c>J>l+8ml}Z>|z$$#wZY4Ky&r`5}-|^ME5&J*8O2c zNl{q%EdvHhaOrV2i8FRTsNxq^Zhr_WINo%>2vH7^GX@I~F|OKZ+vmu;TaC-yMM`Yn zl);@GB|k_xzPAO?9x=E^5Gcn8P(T<=i~)iQ1+Z*!j@>4C}3if0*gOrXyxee^WZpS0j5_GV6sx?k{yPs9(#F4`Z^N-mXW+y4NOg0R2``-!3b8UCM= zzl}~2u17eGMYn%dEug3#6@-W^tcE`fqCz{FJeENu-WUZ!x)DE;S7N(pmOq0(z~X7K zU&2d0mMpBrSS1}lj>i!GNg8z%b`cwFmGTGh)+_i6{u+ny1Xry_hW`M7dM$B!B4Sbe z(=I6$fCGapq-vm1RkevlZD2-J8itG?7>c-+8F-eVH}hY>lp<59SQ=-O75ss#CeX|# z8ej#t>l}t3#lt;|1Pry}9C!R!az4aOk(;f@@F;HVWx*I>2*EjXS(!>t$gyG+<&P-% zmg8@=6x{QhiG%Vabp_McuoojFy1!vQRAeiay$}JiDnI9|~X_@}~qxP0!*e%hdNxSSwnElCuXR}lzhPWZpdu#9N!zmEW2uIwl&bb5#nDWrEMGvA;Pz3W2i4cCV^-jR0vuUz3Nww>{{Yr8 z8&Ee~xEEmQpZ)&;$W6}-ZrlXa2(egvR{sFZrn4<$kq!na1&~s1TC!Nc+rS=6rF~0# zQRWqHb@2ZH$%$o_6}YSmq&P#$0&D#cjo-wWgFqaFtQ5i|ERYdi zu`WQ_9~MRxUPspr!?Ekn*vkV~3R`J-l;zNVhb4OqrG>+!E>-V)4r^k@#Kfx>bq8pAPv$Bda8jkfU!4R(tx{m-D+|K5r<&-5h z@G!7Lvc<2ufhsienYz=%dX4qDMJtqBl*ANr$qHJKX1(PqmrS8_9n?c0$_4KG5Wy#s=wT;0nclxosI z^k27WS69#2AQTA;8h} z#{{bcMFQLy?MgM zjQ-3VPRlXEIZFCLOF>NZuaRw$l?v}fROjlq6^3w2aJkHWfmqToBu>hS12I)(AzIsS zMRfK8e``Y4XimeIDWIn7wQ}W*Z!gm;l!HSAthz)%&;YcT(!v8YsUU7utIvqk(&4v# zR6$xOj_Rs@ZdYg-I>Rj`DiFEP{D~@{DlRFIV)O}YG%Qi@4M0W0CDt%xlrzN(eWrQPeVi<9%odC=bQI?5` zPSXyc7nxiB2-*r8rSe+1#6u~FfC=jo;4v9A_jWu00?7aE|sMyT(E~~C0D3}(~lz;27#FcDl z{HScO1$_9xoVptW_x4&XqNm57vjHuC{w?b-0lOB1U5c%iOTj!Lq6~}}A78Km*rLY? z#F-RSaAzm5EFS>E*21V?p6`&b1BzjK{{ZA3rK}c$KniM?wB&TyR1^xr7*I@tYQS8l zAAU^kx1?ByUPAA+qE#36W=ys})t_M=a5Jh;KlUjqgY%9f1ADfs9DvvWtE4qiZ6-Yj zU+yz;ICsMW6aaH;QTZY=TgR^8O<-&S7q#sF0LV0uHV3s1dlNQhpk-sYEV5e@`(m*H zMd?Jp^C9#Sr&tggt1?S;rBu4J-_j&OK-%0vofqgovDiS}1ad5-ba&x|)w)7ao`hRf z`2@YAnYUE@hIwhfpz)dB$j|zVe*_DG5h_zF=5#Hn9rKj-mKs#zDG z_!}yXTlg7#{wgBXTcu(k+cGpAv1d12g*I!+R985VupNK+&<$~d-{_V63ruPXN^?w< zbX;ytLP2!}h1f?rAk}st)*@M)enJ}X+RQ{teNh~(Do`J&s_a3n2#Qt4CI`%BISr~n zAJZ#<3JWjy)-NDpSbcyEenGOw%>iekEYMV2MgRbc2Wzo5JKKzv>`F`B1$5u_0Gg-x zG01>gb`~(B>g6wlq=N6^;;e_mRHnE(#!t?S!P%-iJj3TR} z3dOsMYySWxw!eIZg71joBABtk{cbW8tcjGU&=|ZbwXKrF7Vygd0P&8NSg}hmRr}qd zpaDv-xYHDb0J)1I}o*y0137I%fTl!6`tG;;b_%OQN`*}AI5qkgreaG>S)~+S%rch+@h;j5r)+j{3*CEIwIoe@@9E5K`{z}Yz_CwD-=I!W{m1?P}OE6 z$`BTX93@JW0Z!rn0A|UUVzjwYa4{;M?k(*Q!>G;bHN zR_KVsYL3^fZc^ieCTN$@+3>6pOG9D;8EURQjN7Sc{1U5a+*E5orem?zg?7zU)o zTcR>%qK0!TeubQ>k5aZ*j|hkpJ4DoeZNz25g7K)@dR{-;cV&+k6lu~WdO;afRep#7 z2kWKe%@c-Q!7nJ29|IP;p6C0ErJ&)s1t0>ijL9Gc9swMHt%ARi^Dtp|m~N8x!!b4= z4?n>cui3xy`wBP|=u0jZF0Tg&>RqiK2roJi%XxoH+!70H*#IOxR5&pTh_L0D@hg{w@qX{xc;Dwj-ofxZt(|1_+I0$MXb+yQ%bzvpgbL zuQLjXQ&AG9_6@S!P5_!0bB$~v4ay&>Z;)CL0^C>*8CAw9Dxdo+N-C z01qb;-#1PoDMU19;64I2EEG`7dyiIPhLNmzgqf~#ZQvh3qtm&lWA2#t-Bw+ZNCDH7R78c$_V)>nV# zG&qa^9Ansx&=OnC9mB1_lL5@CgJ+PaTCU}G%>-x#EAl2oLKH8Mlm|DmIWmGXm$0mW z$L%m2Ih<1e0L)sI0jt`XO>|Bj2r$YBo(?c`))7Y8QnKq5$QK>=Jd38={<&YVRWRBR zSC5qv!m42r230AFkEZ0a<8f%LnH_`(WI8;|a@$t-buR){;_A%b{?BCZ>w8h(4>^6YTeEuj}lD~n1W#92> zh<^nekBOZh$ri!|{=w4$J_HMuw^K`plPebTERFIW!*!%HrlE3Cz+ju2^ZXD4aRE)e zly@$wVN^e6Dj?w7q(a)%E1E=9tx9^7l)(#JOBSqQqEbp2!mhRADsU@PPA!O71SzbC z0<&_R63H4Hj#wZgoe313VnGKnu1v&?9D(}GD{_~)fI5{7BOA<@QKqKgbOHPXARDsB zs?=5kw4&2xve-ac#hx%nydUIcZqtyZr(1O@G+}!-B1S7pja~>ziyWVQCBBK%q9K^Q zf~{Xh-OPxF zEG2ZPMqsT1QXByaBc4tikiKV!QiHkV^gOC@v$%AUrWHGjjk5iCmZO5L!zsT`FJneFJ7)k5Ix zqZg0;g+v$n8EY^iD!srNw4}C{?Lk7RZWX`eSVuQalE~rgv^8dfc)ON#-2`Uvm!GDk?5||m4p$J)s zqZ0lmV#z{af#MF!mEGJaij>=ed?WD?IU;n4L7x*bW*tD7I{@rKxUw5W4n=MliuOcf zW7t>N%Y{YeBwc}_2uWtyX<`luZ6T?b_%P9=cNWoZ*ad2*Vvp1YB?_T1!a#xK9mmPD zDk>J2aK+<)!kB{UH$li;{!2|LJN^ZY9+`Hs83QR&lrb`+0AMINZ2kgmUVnF%cL40QD{iJ9pHvJ5-=usbHt*m;R7lX_xbd}MiD{?8w|kdG zzY3vF%*6CqIa~4~eVXTl3Nt)3U1Fo409sapE1IzWv>zh`uLT~Ufm{UgPzn>-Pw*nf z#$j_dm2G8T$X3eFR>~eAAuZN~vK$KmJU1Cvl?a4O4Cs!MCvdnWBw)s<2dp1u9W0j! z$}qMy7P#_$Lk5trIFXe$Zds=?ekE|^B4?r!++IEzY)cEcW*ZnGuo;Ft!W^X$n;px2 zfV6=-G~83zwCGE(@D5O3K`SqKBjr9Q28bl06f^q>A^A1@7k4ZO2vk+6L@^OsA^cPa zDA2Jk0ohWnB&wAXR7J$mQHH9@pQxa|!$v4bg|kQx(=N|_;)c5P|y z&(!O^Zx!PVENp1O!o+nYV?BH_*mP>EfB?Bfay}LQ$iw%qxk40>XHvd@17Fk<1_%{p z6{GCwR9%h&8J$Ns(71%q{{X79D>uQ%kY!Qu6VGmOb(}Q$P`;9G4qxmkGzuvG{!CYQ z#5C>wOAp>cd=kUymnxl%t;tMoTxgA67MQuCV|F}C3W&Y0-BhT0z0#N(h#T@^Q2+{# zlc=>Ivtm6SO`m146~dd!eMy{+XnscA+{*nC%C4&!>-CQE1Y5uBsb+86pV)DM&%H{$NHUiMj3~+RxI&i2kN{D~#MBVWQ$)^Q`2a-CQxr=O z93jc*EKZO!LKv8s;fCEAl~PbzI<&?)v>n8$Q;P-cB<>n!^t0y@e~)7&z*}Tg8hxb} zHEd7kNAMI09N|e^AS~F4m_m0Dco;(nBu1DP!4M&CB6jsH1>``uPN;*tSw8vq#@s1{ z+E`SKoj-~MI!Z#zo(5vsBF(`9P~5k$#=nb&!=$VD!C=p_=y}7+P|Ikn&s`8@g{!Sb zK!)YvmLWy zSw>k$QALz+pdbU;K%ocVq9KT=$c(z9rZ-~@QQkC2G`e5|lUs_8vt;E!4oxPXVoLek zeG%DZPzjpgN-aPvb_6v|7iXvc03e0UM^22!L_Z&w)*zV#&cCQt)0sTvtp*h=r`Zf@ zrUjcmc@*w9Z=(DADZyAieE#J?kQDI-0$o42$XI6!Ryx1fv(Qq|G{klY=rUtjj2L9M zqRr-3m)v zf+pn+J&Q7tdx;{dBN*Myr{FANB?BQ?p==u}Ab;{$%|HW{;u2-p`+ohEDtW&0K1Ik) zetbq1VB2z6HyA)PVg=8#S-l|Qxy$^LFqs+6-F=QMKx{EHKJ1jj+eiNZB^mWE);h^w zCAFssF|6eZPuL3u_bPipgFw=^1MDV`#bW}jL;$S963^g1f5y{MvcbUphm1q8Nt(_? zQkai_iHaGbM9>BRv5R&g*+rr$qi&`iMN-N@$ont~ONE2@5OML9FYE=(R9={iG?Ymt z>}jmS>MZTS!wa8?h@jLvrT7w{GK>Z;t-%1b%DoftB9>f?T5c=)i}GEvS#bGrDBJuH zB=|$?4j%?aeSFC{ihx>}U}jwf8hEUGrj*GK1_>;xas9l3P+EaB0}H7FaC7ogxV^u_ zL`4#!uzCoV02a$>>;RAyr@VleZWaFk`piI!&|p%rOGM-a-X`s)N3s)CMi)W2djXw9 zD|G(9>l#nU=T*s31gskryD3xXR|sUqEupY{l(E>GzF*0P*lt`ZV~mA|xu2-oL-e#l z9*X&HrdT)^{{T$HMJlK8d2=C|Y{wAUG)nX2WdfUSpmVfwh3hN=@^K&Q`k27NVD0Ij zbYZVBq%FcA91~W}p{zDt!LE5jkE{jDeS)_gbz#5!1@MNpM5&N=Aak&#mejy=ca>lg zSsy$juGm_43*^_u-|Rv?5ovhMk_zfwaWtw-&H+8QvM@3~5%OHZuzw}uMkJz9a4B=B z>X~XhBoO6<8V#0#zmOK|2GPY*!v(ef076;S04=NZR6utqFW6#LP_r-G@-DnNDo;4f ztQXZRk>i6F345aq`*@`!hR6Y~AT15aKn=3jptV6BSLugfFL(a{kRV04dnKDBibm5g z!#nmigscTqoQzBvY(C9Gahmd()@;-;Zyc3W+yk&9a}2Gd3y8q9XkXVQ;1#_QDFdX# z<#T~re$5bIp_IjP6;O_nQmd5<&k1B1C9+&jj6}9uQizAxd`u&6AT;7w$prEU#86YB zQKKweTvTInz(U(mR&Nu=bR!(aqb%Vtz_Ad)NAPIEXj+CFBO9TA!T~4AE^LIBAHkD^ zct+X@4`v701R;DSlHF(ZiW-HIU0hKr0TqMwoc{pe9tnD$`1Ensn&N@zzgS&GUtzmS zg<%np&D>FuVS&52URJNH#nnywWoOj$L<))-{{T^f`=aWcJCv1XRUL_o3YJP4hLaK2 zGZ3M3(fJfBue&86$#`8Us8|_JMvTF9b8@e1S$%|+G8f|?o2vYktu23{$k8+v-TQI= zC~z8Rg1MCdYQ0f800tHM5r_p^uE+j-V5)}}wSU?TZL>qRx_y}i0hCg6B(RX_m(rnc znv}4wc+v5QM#9Q^#V|d+$3h{tA~bXEVoOzEg`zEO>6S&lgNO1}Wj+dOQrQ?Ta8;7S zmsa||{ESY8T%X?I3r*$uPvmd)dj9~jR-LrnewD@tOPUmXnC$6BZ1x)(JSCB;L@Hnt z3kQw2wll+l!rA07RYtrPR!hXz#^>Y{Ep;&#X%9Te%8`1~w7M(Eugk zCbCE9!4AQKH(Lp64fw^#QRJagmhxDn&_vX3Y(5A~qR?(C=CvM$;F&mO1#uG53p-0J z%M8310tPb|Q5h~om0l)F&G4ws$jW8x!)j52vdb|`dx4V0dkLCQvERrSF&OyN9_kg1 zLXKHRDo}uEq6xWz*lC1RL{&1+E1jJNB*k|1?5T7bxQZK0H#x8bGw01njXv<}N)J zgj=iZKDt-53qnga8Xk`tV{!r zM!aTxFLBq^jso3=m1_vfsLfIEV4&1 zkC5##zx1Ai8YTs%7A7V|$U(fvrx~#Bim)geS zsiOyWVKfd2z>We~e}iZ9*)fSsD&h!|nz#c>m<`mKpoU<~-=KgBo4B{RV^)6%m1Izt z!310-v{HgG+XTK1)*?Z8R5FA>0mXR$peh-nD3vYJED#yN0%@9-!sGc$_B0l->@Dm@ zm~~*FBD@iOmffsW_)F`*5UAhrYG$azSy$M_s~oA2wq$e>Kw-ix74pVYEtGcDN?E}Q z_DU=t*=1EIFy;Uze4H}jDMlb$2eOf}jYP+kBna@9{v&l8!zD0csU6B?8JPtA%;jZ= zb0~!^sQY5D+P=u4Y1JqqvIzeGus+97s>QXwvp0E0!|0b>7%&y!#;o4h)3+3IJFoGv zi?u0NE$8@v_i*5rVM4ZR_FqNs*c68taG(I*I3u*U-gBB%~#3I}1P zRr@XxHO}uO$_up+0@MgfR|{A>*{l4C1$Svp5IZzVDP>B&JcNOuMuxxkCV1X^W|3^NI*){L1_^4_ z4GBdmw~xpLh#r@^m69$T*#7{?x{pU|35dIqZ42cjQ;MNu8G;yu9fl|oHeZ>IrB(x{ zC5y4udH(=@O43ppefjn%HXl|!C7B)h5%<$&QsfGA-Z(9J@-jvYseUk6$L>-Lp)|`P z@*g0DmY=1AbYq(IL#VZB=)|kj;l0GlVotxPQ5|A`s?F4zVPcS$M0e5ML?NM2WA07H z?P3)F0MD|DOep^V>IsyfaSL!2Vb8R84vm%gIL2ppnZi)Aczs?vRax;Om1}i#O{yDn zGN4ckiPk(ngG{zc@hTa^sM4ePG*!8jAQ+2@a3$A7QZ=Y8p^R7|Oet)6R0%Sc#2~OC zT8Cku+~F0n+&cxqe_}Qe(906tRK)KZi+HGHKfyi-JutESZD2rnA-F&SS=3Vyv8tSr z13Uf=-!V7^6^_SM{+UnKcFX-KO-zgUBytiQpsq?E#YK3;uEr=636?5j9;9Y)NdCiW z$>9hBD3y5{aS9F8Q290@gQnsws6T{=Su-g`iFFeiw%jzOP643$^@ywmE&zdL({y(F zMj8da>9!Pg(KWgyrQ{kgny1C%EC>J#d+abdjF^9hLgx!4|JDBqH7v{F#8>aO)8kD@+p94X*1a<1)vq+Lr4R z`emI8s`+gM7&10&xY(b!c-u2_*hhq9t?*^2GD~1Sm5Tco%%OFX(Ut=tPo7rTxVS1U zdI^9_wAH&7Tf>0BzbYcg2G^ItU|ev!0;-OY#j+z#Imn6XoFv%{EJ2sY*}f8izfGg55v%H7>jd6DOX9ar^aYpZGX^4VxMHzYl2Uq#~EP#VE!%K>6BBhWk^r$S%n6j}yVgfLw1L&3Gtkd|HxF?696^NBGtn*!N0Quwi4k-l>rQ)yF8hg^WpyhZg*3&<~l7A(-OBxl$sW!#{k}P z4`MB76t+LOg_N?C#v;Zo>iCeKTDGS%J}AhrE;phlhSwkNJ~=8><{c3oi?ROzj9d?( za=5WF>S0rEf9nSUVH-NGN^ANG{eHml(i`W2(px6MQ=lb1TJ2qo1^!)xWnqDNv&L9z z+p?l)mO5F(Uc^wK!A8Gfu+t9y*cHtX14p$m0ZP6?kgP-_y*dHEW{H~zGc))CM8&-HsT*J z%jDuatQDwHlQ9h$h?K$vw}K8m!zT?uDdeqoMNw9qfXWJCP^$0lChq?LVu@H$gfC)d zNp}jwP}lG=zCb|aVzW49eT^4+h%i*{gKWff>>#2hDmj4JC>JW0}3 zm5gKm0LC0t1&(o&Y*6XAWe}@{nuCl$IAXboKCpQnPNQ!*;t8f?4YK7F_{$KyGQ5p) z3O5Zu#Gq>jF><78`Py)gV1EbG>{W!zBVnsrb6qG7AsXmLs2)`33cee@>shU`j>mK6Y;wfF6$}2q!8f%uqC5#8d*25w`8FNDN8_P26a$=xc;V!r+L{ z_?F7SY8SN?YR%I|$k7RD^uMqwn@pCKRr8esmc`rf4`Ikzv1eE;f)I@N1cciqKD=1i z*+sNxk(-*Q1}^?elnPQWQKk$Dg+spbxvfLbu&`TpV7H>G!Z9QfrM7?CJ6f!1%u-eZ zF30IDrzjw13ilZ%%1(Or>BbU^@{mTQyZZ`6vTnEdKz);nz)C?fCji4q8_i z@&i_rVN~|vh$;{Eh`p(2GMC_}5GszK+)P5X^(^vaRv_@QaKR2;5(u6_LV=DmksvO< z$~#~KA=m7`%41X0^+rJ^YXx$*$^+J4*gFJ%A~Mu>Sys7%kGJ z$W-|&)&>DEa8&_>ib_%-r4q1$~lky%L+iS{; z4w@lRa)`_=E@JTmVHqkIRK&p-v{G6rW@UxGLKq=QTDz#sWuoG8fo2gbsKcn=uu7mR zS&Nk|P~?fg49HzWG+P@KNHbK31}hr&T(?X?K?U8gYdApOgL5%Jy7D*{Kal}Zl{(VHQ!*ec}1TEvfAYy}jAV6xd z57^QjWo-PL3pbEteVAa+K!1iv*a6Y$niu512rU=O@-{3x z3bG-=@FSTHl48n`{^g0frJAw_mLEbz$-<*5?SH7NsMD;mxY$@h{d{@yX(N(^dn*@K@5)Jzf!Jq$*uBTgJ|{{SQYkUSx>;W1~}jObRi)J2ieW~u)G zj5}Z48prnwYr%r_q;t-)(a78|#4|0!;vg=o-^fV{a?MKO)Cb+ey-q*mxK|zw-SSX! z6-L11M^dGO9Dc1M@}<66Mv~?fV^N z+z>99vUs3niEIv>Op9&y82eGE1ttEl22w$&_r)K_TDWYOiOxTSFXAHjme9d%3$Nlq zY*s2?fgO58(V@)Y%)Blog^uDmRCEx3*-+@IZC$RSBA~x>D9M-kCJRBFkC1Ku0GIng z(8;s>B3WgcgS(k_D_p|{*d+}Wn1&WZXxn&VH#D@|LL0oS%ola3YftMbg2%9QmPGO{ zqJ#!xK-HygDjYVNW_mWV`4U^NkSg8&A%xw?HkoGQIJsrt+&;xZjavYv#8z^_Zd;(i zJ=`$@0Bu+ra=0sC*%xMGwY1b07-Eu`dAB4g(vWNf0PM^MoZ;qxmcr3;z8n@-Dz$7M zo5f0b-~Rx|S-E&qN2*L~zAjzPqV=ahq4wlLAqb5IwW8H^7cu<=ALx)>bc(U}Abv`a z??s~Kha-eQR64F&AsR*MA)$ymnvS864+0HrMI=gtcLU?nRL4nZLb;1gMvl@;l`Tk^ zYAN*&Jb@L~Nq$vJfvX}24DjT%wPum>5HtRd&1 zztpw`kjN7is3`J^NAHY8%}~k?DD%bgI-^F%9+LnTljy&F{gr@G%h~7Ouxh2Sra!;g zS-P-|G(c3eq@m{4FMYGz-IDt?uQ#h3jp;#*J5LI1J+YUvd z=Mb3=fT-*PX~*D>WW%5Oi%=gR!=UOqdJ}J^t|W4B%E8-5W`hY*+QbG_ZbmdKZV6w; zk|?3rjbA11Rzm2K#Cm6NS-ZqFKauJUTA}$Aw?EQiAT4Vwbq5--#rQ$36dTL{fatfl z1;ss&0I7g5y@LT4>1-Xp; zRY6?{xG=%H!trvH;j~4Tn?*2;n8wjU#WGHkHaNKMTbMu z7475|1EQHFR2nmdD(%>L5Qv6Gd#6#z#6WVO3%&%d)U8X%$d=Vgqe56=nxQNOErB7< zMRhNl!>l?M!w493?Ajy{CfTR4po2k)UM?U4UplF3rIomByZbAQjlqyEak_$L;Igcvbs;yx!)t8m)yRH zH$JINJlo#$|m_XpqW9IQHq&&J3sba2LVWBWI?2sq6%UO zMuqzT8m7azq6_`P#Ts*H0g?b4NIEH}FuPCGs=BNWW12EuaEOC0 z6Ab-*d;Ly02uIsL2a79$lz#HL8n&>QK8Nj_9p}o4L{(7qD(_arqpXed94BFL2p#s|hx|Qy9DSlrsh#lg_-0KpRMTqYYup}%5AG{_4 z$#fsSM|W+kXFMg{h-&WPicL|o_F`rXJ^YjqpJo#o4j2*NI)G97k?xTP^draj*iEd3`A5GGlCwy0ZI=7BN|02lCT>>&@{y~ zpi9?zoO&>KHi7!Y%LmA|Mf(^InfhVDS<6qPEems+TK@nZ!sxp~y$X%QmtD0)H4BpH zaEK`%Wr&ATA*{H*x<3LU+l&m{3_!)J9YYFg(iwDn32>r-h~-b%S&dS?g9fctkZ>w3 zo9ko+0W5$9qji~Vnm#iUKsBL=%)tPb6KG)waT$i>)K`IZ8Y385C8?$)sg_z%D@}OB z2)C!PTXmMSPLVndbt(BU0a3FvI?MJn+#KYE5G`9fQi_<${wyHDwiJR^3+^!1xpd+ zZ7$p>f^bLx?A?tM*n$)#IYr22VUZ-TcLr_(%~;PO?php|1VOi}*YyjFSGtY+iOFjo zgrE#2V|k&uUl9s0g0f7rK1hpd8I;s>$baGZ^7OW0tYZfam@#y&)j7v_@4Smjj#@05azenm2upA{*0%QLGTSeJ z2k;_EkhXKBoO8nS}xZ3uDbFh#kc#76YV;%KaKxs1D^J^(BI|UakD^ zk!z(T;9|dOSUCj&EWfS9-N3B3@;uXSDxX)9iJRCqZ^e!#2eHM0Dgd?~(EvroBw(dR zHyH&jS!QCzj*IkJseT%!g6Pa}Si{5iEHstTc>8kviFMo@OU+hSw;wG*IZ?{QJ8`jW z+*pQoOn$Wqr_xZN!oJLQ&6*i2<% zpkV44LMnWK32#xI@|UB;jRxS@xj?dA#tVPcsRVw+WNY#V7Y%s8>OJ)?lgqg7#IS;7 ztv$X)a+od;hhN;UXcuoIhZyXz5tm@(J7Ll^Ai}7Cq6pQ-;n}+xNVtZGW2+3!lm+Hri4)yibqqHM$-S`D&r?zC!^>VF60-m`6f{d}g0HQ^xH?N4 zlO|`G7IVTb2IFP(abZ5pKsi}1V5k^wTLcJ1XaK??scwO9@I(E!`iS&p`QN#3=k|y7`2NN)Eh$!{q3dJlM$@E|=EeUG=5Z2=baY6_K{a9rZliII@ zD)MNiWzdm6h^_E};RRDP+%wyAn39WLqe)>iNs%c)s1E{|gj>}yF)tOhv*co3vZjyN z@Hco#KowR%OljmRxTgaIh`DwT0yWE$s<&8q!DW$xvTDul@A`tPA-XMVhyMT~^UaaM zc^L_R!!3}I@{Ad9{{Y5NmMgUn0%em~YSwJHvm!F7p^b+ddOI4suaHv@Ig$k`YI=DG zzm7(T3d?jxEW%*h(mJTKcIw+mHbq`8`Kw(71&!H30Ifh$zsIQVzQkJ6TqPh&&1*G} z`7KeCUhn=w$~Ns({{ZO~xMI$qkt|y~t!LPB1)vSD!V$n|UV5YmR8gcdBrAYkwpLhZ zQt$hAV5L`vJ`lvxsBWe89xOw?IYSO-^ ziGtUq+qhy_#i3)>l{9V*oUh>(&p~b#e3q1wpXOye_pqm^Sq*@TR0*G~%JmY{HHm#n zn)IX^lJ!|##U+fhAGI$rwUZ>Wu#Lc~G_YW4)}jgwzuA(gp40=lS74z+y72-HY}LZe zDw6sw`iT1*LQ+vjVRcL{6jm_;fxa1tC&C;j6F8+nZ9|g?rW=cp@cN4pZboSz09Ay^ z0bN`5k8~yOG6;?^v|T}>uziKLT45omIWx`>0yjQGNtI4SMyydw5n7m*6-tNf{E2cE z0LlHpng0OMEo#p98q_YhB5}p)Fac9mlV5Wq~Ck^TjD~=IA`i2%mSl{=ZenZZ( zr^p^C25jVNZTScGnWJjLT+?to7Bqwi$A0DAwqHdSteNzV!MQo}5k*-6f0^-vR0#8&b!aE_QS>3v7U-*+k2spPbL zvZFgGaWA_fZcvl}QVFp7KtWy@ZLKfafxjVJy|8nt0CE$8GK$)-+OoF$7mZtIuW971 z@V679#C8ok%O#ebc{Svi03ft+{{VkaCPwC3J`lAZ4hQ26!0g+f_EsGQwU6J1Uf`{7 zcGRo_f$48?xMaYG{Extu=tQ=dsJk{GEE|DF(XR!7NRNCxVU!C_kuUqquykD8-=r0w z9Q=0gVCRwY$LOZcgZT3Ln+}aRTe3T*r)h+Pt%0>Y#vqS6^qb^W1n4Sv5 zF&(Xaetee7Xyn)sG!isf>`NLDm`V0&4`dDeiOF9^r(+4Q9ZSa{d0~)|q>Iz6S+)I! zRA(U7)M!`f4jM}je_-3Sp&f*h^26pOkVvsjgmwu%lsWk>6*Bo9g{ilmLQ&ji8AV4d za}XJ^a754zUKoPvHPB4^2#$`-+`b7?o@wx?qnt9E{iXp%Y!eYEH!FPX77d^`tTPo+ z#wFiM`jNv&{65F428L%vS7M~D+hUnDc;aH$F^vXUu@;sZtxPz#VXGOQ=%{yU1>^!% zlPIe-L$X@E3`R+W5XMrH*n6a*5EM<7ts_tr1X*cyX%#~anVG?{vZ7N&t3d1USDydpt zu@bTfc-Yh;ACFG2~H&ZrZ<+ z(t@QI)5s#~w5-wL_Y9!>H7HHXf`T~gFhWm^F}LXg+?%Hf`!gh>u97YqtsNH`5$Umt zU#mI#k+@O^@4?u)ONX#{v#Ix5TGn|PxnyCGUXjuH1B9!QP(9j$Jww~O=fsv;o zx=)ZeYArk5M$@3U(z+ie4oYjsE>w%1aqIm=*lank_DAHoaNa!}6f38A94qNI$cwzv z!CWe(nFvB&c`I=YK{dQlHg*cFk!Y|Y8;|2h6K16cH#9Lu$8@piAe~`i^j+wf1zf_Q zP_o8PBoz!T{+cCRq7(#ln0i_zeh3cM8ZVN)ltNoc7f4(xgHi(!GF%n>h-t1a zEq5@AEHcD^Y|BkTt=1lpVAY1Z6AC?r)k$kYBd{e4C?mQm&WPw#dyv!*3cVZ=3J^Rl z3iBIR0NAz{nak3ncGi7!G>7am;ww;&Q#E*k5?|3B$x@V;9JM@faz=TXd0NtqGV;~x zZFH;Bv7ny`Z;N(3Oe3oz(1NtDFR`^N{V5>gLSL3N*Y=35$ zMOrb=zZb9w7gd-7T^u*z9Lm9hxpW$FOh=2BT2x-NGe=NaS1O2%s zV&EVj+)}B%GS;~O-ANwY078Wj-G4u2+ZUqUz`2a?$}qCPV=*$oLu5n%2`Hu_=SWvu zQJPp2`W1SaSpjP8kylbTo75*3se!F8$R5k(UdGBBBHWC{tkr**%dL=pafxZ#;65%~ zLelGk$6oLd)p-|*px1xwHCdRn@3#jJ9ytA(l+@z^{*zIH5NE|V6m<+*fI}D+?u+Qd zs9d|xh8a-KfZ zU=M3P43=zp3(7y>i?i4PhT~M#Ez17@9>gG+S5ZdCmd)EIU6wJlvSMOK0AofCq^d2p zj{zE!+U_u2kx}lWl%z-5mnjVdRVUOpsXK}%2wzg9aruk;yUs9NorsagREhY7Z13!_!D=O7gg^%2Z^9yWmvqb>OKMp1q--7$QpN0f3B|aW4XuNiWHlXB23unn znt`ZRn0znf5|cX|+yzQM_8AqOwHo}KkPuO#@=!ra)Kg%TPDKu^(+_D*#*ECNulFhz zymm7qD&RKz825JrY8n?rp%q@r6bBteI6>mw!T$iKLQt#39k4|z{=0{jzv)r17gvgh zt1n58ke8)X@(95W0}&bxykH|@5fTw721pvKZaN^{3+>bdF}QjJEG^o=AmoVAMsp0P zZ?IBO^>T|7;1H(Vl3Pl1I`~E#l^XBrA{509$^k@qoU)-{=W6%*Vv1tRie4@$L;nC^ zVu6yfzX+tIwl8ta14Kt;57t*O=;k-SPbTQVtDu9l$(AZWn=uDyvHs?^6IOrRLb@20 zC8bjd4dr$%6ydu4gx%YJe;8MATFuhM1v4uX@%aI&=sWm>{EX8#8!9_d#@qP?TL&K( z_t=?*rQ+!!g=8ES@)C;yD11jb7u>7#{{XOrf&?V7KBj%qV5*78LxyvouqtdAY8&=hpbeKt zpJ1i|weY?Vkl#`qzt_BklOQ-c{<{mpwrBphNZUzQkaG{-;HN&;gTTTwa3B8wv~Lu= z(~PFIG38SUY0}H(3L9CuiSYHP-2rgQuwQl?w}bVAvM8(WWFi<5Qi7!wh{Xn!pHa_LoJ0iK;-mL49kuXq#WGAVgpeVrleH=05Y;} zsN<^uYM5C60Fwz->~u2vT}D%Bx6q|a+I$GMilQvw#+X1Wl^H>_l@L|+sNTmJjHznN zgo*SwY_?!C^$Y`|bRec_O2_*FN zDr^tn17i`0%l?qt253Z}eM}hya$H(}Y`BAydOp3B9V8z8zROW7s+5Z`IRbA)e+$wM z(%^VXr5c%uf1CP6W?6I?Fy_f67b*&UaGF62V*4(ub%|Clr?Sb#nbZv4nU3GAxMG(R z46Pk<6?F0flN-`zP+r_Z6l+rm?F4N!N+>wa8AS`W{{YNLQ(EXAG0cE#Ba(=F>;sq8 zPxcoIlb&@6ym-P71u@*zOhnb`VHAS&HvL2<&}Sc?u~q0o%;N8`=ZL8|b&sEMfN5m5 zGTN6;AN_JUhu}v=K#RjjM2?VHuTR2Q3wK?vg1C=b64kF3p~lo^Xw0&{lC=Bz9SkT? z=~#$mXs&a}c7llbn=jY_!9m`AX2UeVvO1Ox47Pl=Tk47ph8+gBudF!O(LdyNfh%lgrO#se zQjTvSmO@=eH!uQ*hO_ouF#-#>dx2{OTA!jgLi9AAEYJ~A<_0y%Mk3yfNN(AB3hIr= zEl=_=31iEIfQ~}2bqP?#+Kq1J@yCtDHva&Lk`zH&(Nw?zeonSykz0g8e@Fx{+2`a- zN)CyZKl+(4-5e2`;j#p(jX{cFh03)4*gl5kkeWq8fYfTdt&wI5T5OfDBgO<>KO*II z6G@!G&LPfq53xz8gc>&t7c1tWTbGC&WH2dD_QmiIt0KtB?<0PV#ef$u!IQ{TDJ77# zOa0$P;;rsKv2;ajg`wHv8q3+l?_!6jMJc`k!6 zGe<@ge*u#fPs}bp!E4y^+OhjLt8B>5N;r_W*rTL7boLFTK=r?Q8*G@ire#^;%8<~+G2je+U*6a=$7rawlCXv2a5E#+|eF+is5 zZ}hPnHFkgGwc#iL9|H+>+>IO+UilvF0Z$SC0I3dvvbMx1*YC*l{w;lsu*dote{e;X zq&Dh=xSBIgp2h$g+5@7RIp?g(P^n?p8pL<4-wb^;!lRW^kN*IcrNd?->07kO5Ond- zezBsKn z1vLKDqh?UGVyBfZfcOT}-@87TXQoDQ%+xP&!#aw!19q+F%R(@39$CY2Hg!xun;|4lQkb zVgVP~Ni?-qbuq+ycNazjd!GUp6}NFIsFnAkBfu+O#JY|{a*EM zr4-Gy{{T!;Q(o0DgG_fasCFw|GR&hf1pa|gxlFtP?ske88)Et`oW=Shb2i*(Qrr6h zGZ~DKK~t`Y$W%#Ept1Fw07NTmdCOl>;b;0qZSn3-c2o z9~GREzE0C@L84`?A7%N3X#W7p5Iwu-J;D72iIDvGMppQ{GfePlFevr{aztr#!YZ8R zqvEl^3dBEJ7b>O&DPhP$v_c5c9n7KDoLm%t>q&px2i=y{eo9(W7#|-c2&|)CA;3KM$VrC%r>W%AisOWQAw*gMrv!9ElB1P36Dv-^m-j7) z*aOTpbLW{14!?w|86N(E2cv9!uEO7eAKw1U##`NDBiRrbe3Y$M6=9}Xpar;&=-kP| zkw35|&)H3)`R&W07O&I}9-yk(ZKS2J5&{Zf&DlQ~lX?=w`4NZ|Z?_djgkr20@+SWP zp`zpbXn>2;w$VyN5l~=WA7yR9!>8mxvfKc6nd?Npgld-5KV)o4P+LZh&%0roh8HM~ z0VwExOs=zN{{XRDdd)%G*)|8@&#ry0;`qA>J~xDEdlg^Ud3kMXnZcy6!K5c8)ch^>BNB4B9RZqVKfsZrk|DBp*x3teIl*K zq0k3pv@4IGUttL&Ocf}JMw(9kOT*|oZW1&qhkv)vvWZoK@DIPTt_>v}HyK#Dmq!L{ zX-2k6Y)SDI{v~v58r>0?D@*au?kK+D&AdF6b-*}sTyE_+Y!NV{M6!k-t|RRsT#-J} z4~waEC`zn4hU0;NM}YcF%n1-QLx@wT7fbkvI6{i~a~Eky)`4+$sMr?2;|i|L5S9oE z+cq1t(SRzBXmGx;$!vLdN9Ww7Cd7LOh6PI8~$1u>Mbbt1^QgZ8s7dhtWkc#b7b0Kl@M!| zj}|hPc?nbFd8T@xmd`ISL3Df|Fu=IZg|q3Mz!xu^t1~H3&^2TQK&IHJX>o~c+(Fs` zOZ<}CLMHOa8PXxOroPI}jSj~kZY7)F5`>sCTprhD^_U=mXvGvhv6*AF(*&-n^uwyG zW-`)3+?jWNsIpkCQ(nsOP8b&StU#r7i(_Q)T%EtTSUT<-@6p;0nM=0)fCd z#<-dO*HZ`6b98Z&?7u3)Eg%YF*T^7076G9M4YLx%kD?+hB97Oe(j(MBDo{KJJg^f>*uv)jC6GRhn+pz#uVS@WKLdb#J*h;;vFc8|ekU$*@a!Zyp zGL6J2TrW02r-eD(Yg}Up1_Rmq1hN&ZTF1A6e_3&=J0MqJ$@omkq!mkvWRMSGpbhQ; zvb}*?gpdg;7(HW4F!#tySsR)7af;2`dxjD=RW69PJKMoC>87ibKJcib(JX$)OCdLWV2do#6EQKHB@83g-Zd2XX@xZTvwui{b-u$5 zElw!)d|*PiZDH)5L+-~(iLD+uazhF?s`k4K>Z8zSVqt#E!Kb7<9gv$m;{ZApO*3UX)7gh9_T8}fuElM@ZFUtnvq4uy5PGa5jgr$v zqZx-yK5O(wNJwaTSggNyM?c%qgHuxJS~Zpvr4FHge^JVQlVjnY$EBCAhgAAZQ&@#|;myM}fawy(4tI*K4YIEV1kYU!Kg^3=7%{ zZlM%-w#dTYRtO9r%M3%MbstCwS;WZK&|p;=lD)?A%b+eAFhHKNPzl;<|Ub^Ot@KK{Yxb4zuY-9k}-SPiITK4`#4hMA^Ixd2ZKd+ zCZfjJV#Nr$*FWI_-N0%K%gB_{i(<2|x7oR?Zm7RzT=`_(9|#G`n@PtXq{(G@v{ptFY2*er1TUH5DDL&M5{P-EH|8 zImy2sz*uMsZ=(;wJm%@zMfk%U60!?#R;5G`wI~y((hkCZQ=)(58%kFn91E8Wl6|+W%y^1!!$%d-AZUtKby1MdOrUOIB4Oq1mq6*}%`IQ$a5v*!f zs|(3*7vx+FayQLtu#$uFJpgMqU?X+9TMYgoSd`Tr1RJEk44*g@wz-oMZ1e$V%$z(|5Z3Pht06zu_?lLx`WLBfBOBJJ+k!^Y1@tM{An69Nx ze1X=NmEyl84yHze2U$QuJC?v0ZY18q+dieNsTelasceil8h`p~TA+Vntc-J&IvO3zoTM1w*aWa-g~FKy)Cv zu=^gthU3|Y7USpG5Xy0}9knWkoPfcI3PlWSu|h-E$ia6X8WMN<>6Qf$pcuse08)bq zOmYe#O3MmB4Sv9TVir?Ourws7nRrW}2a{qU%`f~tin7%j1o_4?X% zg{~!$;Zkg+zv zaCaOp3I`r4ag0&Ta1jV*;<_G6MXEVWW{x6d?=hT!)K-i^6V}%EGb2?T4OaAk^ zixw%ag{;73bxJLu_T#f@TI1sUs9(R1t#z2gHiJms^vWwQtHPgHfGA_eJyf{p$woh@ zzHKOW_C-yKhyMUkQ$$+2JR`GpbNlC#-#DPV7tv)YOz;93vlH-0Drfd+lXgHtAT~kC zZEAs?#ri=;iiibipixsSLDH2jAogH@u^DBdkmx1=e{5R7Rhm`gSFygC2BY-N5p#rL z=!8j^V8s;x)X&L$pzb=7B*+e7gcxO&zaks@W~zy0{{V1Mpyxg_bY~Os4AurXdR8Wm zs^(1B?4Ko4a`q5-P%WtGSF2@BEu;QN9)`$dA;j8usb{1iWPncJ6&%3{{X@u zXK@1hzy-~RutoBhd|b2?_EA9+u53ZqvVr6n`3Ucbh>9;W1quvGfU={=)6-=$PEELs zWu;-(RulsYVpx9gKm=0|sd##+B^{mAr47pWE(M9!APhg#9xH7R?7NxXJ1Iaf(4ImIMkijsE~BX^hKc zROwT&h=FUlm24VF6V!$7ks$)ZStEgr!g62Iv=!8pB{|77Dd^g??Ca|IAyQ>! z70|$5f4DuZDOJA5-}GwgQm_X^Sf@rxticUDVj3c#DIyJWjYPtxvfx-jAz)M4gQJ&_ zkOE|T@+3M@W~wb<6>AAhCbx0m(@OFLiCPY@j$Mjo926Tz5A`i?n#ppq3CM1xU(M<_ zwPX<#x08@S>m;BSipePf+`s^yQE7Edroyt3Zsn{QAag;RL2}Uxs|EHQms`eEEQ|wD zG>1Z6r-^$l{{W;zfR67G3Me@r5QiX1LoJGTnk{Al9|sWiQu9wqKq1nil10XT5D2u> z1IY1N7gDTh-bApuVlh}$7bnd11fvq30Qf;8#7h&GdUQM7CqBK`W!i@O(m zE%qV%b{i|mGf>uDrl0C2sKnPb;7)6b*1?nHYpPOxTtGs=joJP79Yh#CzqgFRKp3vS z-k=?ZsaEusT;Tyqm>6MT4%mErm2m7T%TLH2G`nj@JtmgTTYevsme4@YRp^Yt*+3pN z5v@3tgvqo3@==6N1J5N5FrYJ-!&P}sIbwqHZ;R|kk!EgEkR2ga0_w4{`a(xici-wg z>oFTCG0B6u3+ySOw}X@RT9|;aSS%o_xW`1m+OlF&qWG>5K%b&r3z*_YGf!pi4zLi7 zA%f`{MT;Qt>Y`9D*-M(c9?SxWQj6EP3oszE;M6Luwh>7XEL;={yujLk?2cTLU?^K| zY832L6k$!?34Up|4=#ova$d^Ovb=-LzV^))?{^Z(tM(H$0N__Fq}ymx8L| z0b`1nB@4@fy~KbnsN0ib=XDqytc%++KVwiyq(XvKg}`BO)9NkOT{8YLXK5lW0NI7* zi!SAL8Z=Bw5ifuIk;@K$)Im+fN*ckw!?qD;5*oTnD#4pbS(}-px)yqBET+Ox75&RV zMU|Kw=yB%Cp9q1_VR?wR<|bm1i*8v}VSq>|>@Z=lv1XTZ0JgR4{Faag^brK1fr(u$ zT9v{!$FQRoZtmrQ&_SP66O6d{72ZS`FreYFs4T=EkX$64^ zGr(Wj`7n`!v~^@yWkVm{Z}JTeO1l#B3r0=a#d6)B9l!?Lrz=s-=dt$HSdM{#nD{JE zRnYzR1T?z&JU&i&e4Yw|6Q{pQ`!X?5mb$V30LWP36f}Gh9$5;HPiAjj7TQK!kXBq! zW}Egk(zmzf2Y7LsVS9PDFrqP&*q@i4djN+S)?dhLCR8p%HCcekP$0oA>G1$!hAsp) zY_uApMQoi~7nt%@V!A{JTo`COji_0EGZ?I>Fas_kiVO9rXK0xD_EcTm1Dou}*NKFp zolCJ64O_c-K2!n)Hoc6AMbU6D?!01@K=S4m{jrY1>R1~ZdkUy7c?38VYuS2Y)6e(LOGcB!L@oN%J2dZfVE^5abP1*8qyqc2A=BhO)_7dm)4dn zp$$WZ2`rY&0Hyr7ebhYI;}B<8J=z!vcwi)S76kztg~iMF`$s!5FABo(3uN(v1XRH) zBjP-41BV#(g^&x0WFi6M_E-USnIRyFRVx>Zk>f7hq2#?34zV``VklY+1Ec6*3mIbF{eM!M zYO6XTjzK~c8?qucVRs(kLjySiA!1pQn5?^uhSO4tvT0=j+E=k-Fu|9;MN6ntaY=-2 zuC3;ymn9ad5>`BG2SOEL<3YxWnTGDQrwp zG4zd!19@R10{9ZDmBT2;^k~K$Yqc39LHuJM)Mm9115n*qkeqXh_CA8zTxAJv53ukN zqhbt7Gp}V>{5?dM^bhU{(bNtS!Lik8NFZCi332%@cX!cKVT*u z-=3r3bD)G8R46?kdP!FJ8V z$;L(lFt&owIw#3~M~()xtGlr>scU7B>}V z*><&4RqRw1hQ=6(RC5E{A{FRqCB^}|qTq`HS~fw$=i#1W*g;B-RarP_=bnuflSN^H@=mUR@Zgl5YldUMh! zU|g0m?SkfI)Sx%SDKQoXBFlcvfC}MIX0a)M(Fl|*Q0iyxLuVmm8n_@U1!Op|g;K07 zh&Av~hL)rJkzsTuNbIdn?nN$BG0nKb0^@bK*rMAyePu!Z1=|E@jxhuyD_O{%%&BjA z$S`uonT5cEQNYOLsYsFbs+hBG9lMUGHe9-=?t2vwaRR7Z+(yDHdE`1)Sj<3~#8D|7 zkOd`1Y=&or0V1jr;PHen9cmSIk0s=YRjT2KiFi`t)_DsME>P)1v6s> zfhs6wF%_wN4Q5?oo>WnmGR%58#Addn3o62@QI3Z0Ca83VsuUKhe_p zVTi;qXsl8WKpl53s_2U=sfTw1PY|x}_9PQ1S}HcFY$S54TG(1psx}N*sIs5?a`Z+89Yyii&jrQ|-?~#Jo2GsI=PqW7!*cF+ zIARE#B_ARRKom__mkll73eEgw2M3YmgN*%vDK$^Kc*v_ z!NgvJ-S_fi8O3QKZ?@WEHThBxe2YsLvJ{~HK!aZhs_Zg)N`=Qk0T?4l)0hBO*-j%I zLhDksP+_$nVQ8tCoIcSG3$%3zR#!5V4CP<}mdi=B6&qrrh@;4RqC*@Q39>;m@0t3?pGBA3X3&$;AMQMDs6%BaN5(#GZOT+8O!0uS{-2yi51ha z)*`xqZ^=uhS((h;1GMQIOH#4eUwRS3K_LQ^VboNgWu--yHI{7S5LAIPFRo)YT&{xH z@fEXI*}Mfu+_)OHT6Y0Nl>rvVMqIEQ9>oSo+EEihB0$fP3*bj@HzLe)2&oJUsY-8R zqXs1p`C+;S#cYnDzG^gtt0 zi)DJxq4FlvM&R{*ncS~Gq83^-2j2aJvld?|)Hv0r1HuXFff_C35o~l6P7FH|g7f64 zIx=&%^YUjVjW5hbD)Cz);R~&5FNCBNE)25i`w&c7Wn`?ri}+k0!T!jAZ(w#n2yl&d zTI4Gp7>JrZm4!-Zm5c@%XEHZ~EXaWrdPddh`SLCdz8KnqSz-a29g#E+96&2YZt+j> zk{ynpSpNV5p!h(QK{RR|6*%HnQwBq+oFSt1ce1-QOW-DgpVlK_4!Z(D$adyIS#<=F zT3Bv2&zA)ydPU*{ssdiguOv@hq}9Gu8l~C7D8hm@reR;iR?^0&5FmOShA%5ye$>k3 zgH3Q=p?peL?S4Qi7$)yK4?7ZstA72Ik*5;X(JSQDU>HP920;qO~t64Wn&xhK1%@7Y?YL}I*3PL8AGhp|LZ8gXzDber*%KrayT zXZv7kHN$w$yDI)?O|@|uwjiG_S2YP?uV@UtLqw@l9H{6Y^8~V4nv^OU4O`@;s*J8LpVV55gmU7C50P4_uPf-x=qU}?)Pe$y4JNDg zntm3&4$ES-P^+!lC3zLl8e)P)YFZB={Hnoi@%1KIi&D-L3m12A8T4c@6rPg)GzNKX z{{Uw^B}KI44U+`HUPK!mjVo{ zz=IFK#4HVMJ2e&7h=f?T5&a=(w9AD(Kwk&?4<$;JzH#h5w{Wo7fmcCdE>g|G6>|Ez zATlHx2~&k#z$&0zFnlE_$L4+!>`|!pc=s;=29@>?914%tg8`q>G;O-LpcUR_MU^O# zDDoing-8H^c$VvW`8beDy1vVK8p_S8p;17Nb3-f;mm35}F_Qro&{Z;^V0De5T00S{ zV%Tqg%xjjkjExc59Uux@>_ToQsxd}B4ca3M1x!g6ymXjOkw!}XOz1;0(pdP)L{=_1 zrFe`j7_|@Y={$irMjEF|r~8&^6ozJ*j+jYMI&TJl7>U3MW@1x-f>_o$ES8c{eN@=| zlDb`>v-G)stR)3)@?17;k)l`z@%b#Ezl)28$e_{L>2A-M6F{#2039Z{qd?MNVNjGr zK!}{srr)H+jBmg^B~mD?z?on!+6EhUP&DROxqKi=ck#-Nh*Op-{{Z$fF4`*1dj{yG z06!x&7H6XjN_DT;-oIdEYs6cJBCQw)FI3{#Kxl$b@`(uuFn=%U93eodT>%b?7$6-) zGF5=hKK@KIAh~~g0RmG3b_6-gCn_^rBoTYLXac538tIHOpjAZ?5NKm$wN$dd(EWq~ zvr?l{6cXT6r{M$yvVq6yHR;#y(gRSPVo@V@L-}&ISLqOhXjK>6j6!y+%%E}{*nE^) zh6&jyG?)Do3hBv9o(>_0v6GO6Wf^h*0R2VMpv!X71J}qkI_xpmKuTuK@UXNAuu>37 zvE&{(@b#Az7h;D3nf4;2Y;^WJEEsGmbXu&27jPnuRIx~glMtYcT}P4;2WpC=Qw>JJ zV5MROL><-{b@$qvc@&<4<>|edz?a)d2Ma)6@szPZDL6GR^>EbQU}ELcXhyOw03rVX z2*hd#G*#Fj-llj=AP9{>W6PF!4j{^A^xnNASr#k_Di)3Qe?F5TR^SYHzzJ|#?0GX- zo&ZiAW(Ys7i0W3@buN{?%ZFCIu{S~pbL14n6^JWH2UE%R5RCB}nO4vX{)cA`xpRL> zMHKYh+@*2v_X)8Sv5m^*iJV#lOK5R|;cPA4kOh%$`Fmi%VTiKCs$sZXF0m^av#{@v zh-m;*9H~&@IPzvlIAYiIkOAJyy%1mHrce~P_9P8bgOZ@^?o;~)EN!agELE`~;gi0w z$pSb`Vji@K0`X4Z$Dmav@hyTXiEcC$;$`hp=2?cN9ue5i`Z1YIKG{0OUSM>hrgfu* z8b%vedwC{EVWFw-_R;x)8@ldi|sQ&5}A2zH-NJs;aMx8|TL*ucM z(QDt>Dj94(!9NM8&Va>^zkG$|gTL+K0iO*Gke?l`LY9moVYm4O+v@6q^lAXN>efH` z65!sb!U8qV^2;MI`?W*lIjgr2&|V>4v0i}t71tb~{Facj{{X@_^w#{Bn1fG|!kDLT z@hB1h0C<=KMwqt73@!-#-(l1Z`2wi_0BT?Y8uk!*xOR%=DX5ehs*ct6I%pXYnQAvR zV;2S~7~o75(Zt*Y8$#9Llc8kU`BzAg+M49H_xj z+$xYt(8^{(5cj0kLSmFlA+v;Bjant8gqh(2ssYn{g+M`}gYpzc$B-$iQq{H~$%S?= z!eUAsff=LU*lqx7g^U%e+^Jj_6F~wi3)phSv^ZodFrIUqJ(eU4K~uGm69UEc@>2*H zs3Nj%lHdI>t!kRouds4fFG4RS!Kq5IWwV`!NZ=^{042nUbieSKDm{Au1FOyn+s2iSpjSA+x#%?;eFGFu*z%83u3)Xo|W#YQ!f z7|VI0PRZ@CArRg9i0TMhF_ch)(M~CiN_nRKCglrJG8>fokVI@a(!|gwv-3>lG2*vg zM;ap|*w`H!;78fX#hyZj8rG03z1~CyvDJ7Vw*~%emc$Cfw635*Z0EQ_x&bs$!f*ED z0lh95*H5!aeQ?p%c7POBqy>2U1(jSQrG}u1!n!?WP1!I103ZZCxwR2yjH%Q#fQxTK^N< zsw_#BmxIfWvBV4;mI_x_7I@50305w@AsK@MaHd#k#YN*ERZ7PRVPR!xT8*;vPxNXP z2v0w=6GlGa@g~p*11efs(E_gJdln|bE}sN-3ajfW>n^OA-h{B+INd6Yr;&g(E%25S z^*%6MTw%SriBuNvW*{t8IES#!@POP&c5e$H!KtDPFUgIrt@SV6xB5g4ARk0!f>gA| zC}S8!JM@)j9JEP}_;X#AA`Rb_#wQ8?DRTu=p}@sXDR zeMLtJ;{e*TdV)+3Aj>YXu11KW*i676RKBLoL#Rt*NrKqXh$6~~oy!Fm*iw1fb9LC} z0RJi6>O@G2j7#l|Qr#8$N`g=UCnghbR`yD*TTDIDUL%9Kv6+pVk%- z#>QZ4U_(f=j8(RV7NvQBLQYw~6Y21{xiB!t2vxIi>l~r!Vg&6sM}q}{*1R(X?kuWX z5eG0KS`M6nXf)f%Y-nayn*csaex89(N|b;ip5X|TW(9;0gKpr~)|`86s;!J-S=cwc zy+0#d;he2pt=E$y-zDLiZmv31E;3OTjW-$=mn(0_sC|pkv`g46#}|kB8WcLS;&v zBkJ8W9N$oYl=wx(vT}T7@-QPqY+FpJlv={ee({%GZ7rfFcV@ux`bQv^=0WUgEk|R6 zeGInXx7e$Tl7LBL<7*7Wv!p57^E!sE)d;{oO$16NAG?Ji4ylSM3)j@pJuKxf7enXVd z`4vw41g}1=O)OBUE;Jp~AyowlYrYQFhzM3j7$&_fFR;l2P}tfovVKBOJ|LG-WL2vS zFIb4!Tfx|7i9sn(Nt&xhI7jF#9V~JLjGzRibw#$fa)Kx9s;?Gm6d_Q2CqY?`3ziE; z)ruwNT#<6MX8p7ANwuaFN7i!OKr{^rhF!D{L!5R-x}VxrH3@*L>S8SrwY8oy1zI$Fa6)59&~)ZZiN%B@}y56O~{i1N}zs z7L7v6FqOGX6E_Vji-=BRb23VzylZTr4A9UoN0OK@Z6E-dF$T%>R-*I;I9Z?#k7^Jl z8G}xXv4CQ*5ggOdon|u&H#Ub20|b1DqJ%-PFenQfUj8Z@V~|$`K8(OXh@3aH()$dE*ip5H$ZY=r$fjDYN9QJqdsUM)4xL+Hq}x1|EN-5I0ECA5Zj>G@Sz@4+yzDs^7LZo4bzJ-V$u)R{7RV2& z{<)Ms3jSttHq5u!rTn8LP$$|FD0CW3HDgm@(pU$`%r+Vsd>G2dKwaKG2aER%HORKuf=)OjpJMh)@M7M!#cCXoiT5n9DaM3dF}$AOs8;Qqi;cpjbMX3^Aq^ zYbe}B37|(4BXuziD;&W9$n`{avf-Sr33HL0Jcta{*Cus==h(B1O@E{s3J!N2kZ+~c z!^RDj6)6R&iN~XdXHP)@GwLnz*%!@$MxPi`_3^V``gea-U6H zwi54neVxL*pwTkUVA#Y0-)TWl>4$U-bduaP2*^VSuo%+=BT&R{<*)jUaNR+&FA;(H z7-QYYMr5}=%YmKLz%xttf^#4QR~ z4Zzk37#Nl{YYPY_W8({pV`*2_Mbw)67fF;<1d&h-67)Ki$fENyx|GY2M*C3}ge3r? zBm4;x01ZnXU{%%`uDi;JD^dRdvAb=BNU5e?3S5M>rnJmyx6&oFx5;!B3~uHaqZzos zsxk;#4P&#m{{Yxv6_+_!3vK)*!=3N}C^C$hGUVpK-_!w)8t?hGTPE-ebDXJP8YBl{( z)V~N^nHHV>+{Xyheie&hf}qRX{gr8wr^nxFB$@^k$Mrr5S=b+Ib}0a7Q!wV`LfKtJ z4cX{MK^jnGgz<>|vKTwox{ASuUV&(mIO4VBEG&J(@VMHDaQOMAW9n31GKXc1qz2 zh&LBk)8Pz=f@Fe$<%PGG>mor3%f;tguK$kAc_AuLNguuiX zn^Z?w$xKz?U5>zlm1Q!NhacdVMmQA*#u^lYn?Dw2W)w6A7YuNwtc0604mU2X;{A=O z>>W+PG_V9vp{g>mijW*K#HeHBTqbfjxDG9ly+Fec{E1Xv2BW%SB~rU2ZEL~FU@7mB z90s3dmkL1w2EcEogyEL!v;y z+OtId7gMmSfkya+I&DkPCxpKJ0KvgB)nelTM*FjI!hP155`oBOIKy$0(yRI-0z!U3 zwYH%NMVXm@?^4wb>fz}HZaXlr2^J`G2Xt=AFk5VKs%FXr{{V997?U!9QlDyA0t9hW zE^V2YHOfLD2F4{7Uv&^AOHjb0DK-XGY;s}&v97R|3r))iM9LU*X#qW8SIW7+kf5cN z0BL?WS(sH#&&aW_g8iw_cF?=}va`aLhL4p#g_sy4c-2gR`vc^-3SzkzliEpfV#y*v=YLoKYlR8m8CMD zB?=DhgiM7X+7E=uF`w<_>=dsCH~x^1s2r9Jvu6VRp#A>r97Wj-WtRi4ZnVnv@47%F;t5IX6yJEK~#{U z{{ZPK(Gr5bMjA2A%2+_HfzvD?MZjEmz#;)q+pxi9g`QHbQAN1QBGcHfu?J(N<@JV( zi9zEW5=K1!rX}^Wi1<*@*hH0QtfrE6^kT(S*yP7Aox5C@MN#_2GUpXAdV3KNZEcCq zmjINqRHqA|mZ+n^KvtlbBn&@3LR&K!54q$XF$o9xO83&3iHd!GrI>FYaIx{H44Dj#KCch2mu%_YB^M?k1knor`dYC(bFj@Nlq=^n7Apne_4lnxF%-P74Cp?MOAnZ{Dq|9p8?{fQTrTdTtyRUFxCaQHwfw#kAjJ_GEn@CbR5VSG zvGppzR%I(qR+8p|?7IDhgtsyn*4UkoW%dbl^2r(8^LbS1L(6KHqzRb04l+GHLn+QOvyQPMDJ1*6u0>$4$#YSDtDk+ zaj9Eq#1(-U64dQVR=ZJ36`_GV2s9SOS$!p2K}J-1#>DKlD*pgeHeLsgiBm8kO21;z z736qIU^Zod0cauWCXcf-3{9y}Gnm*kY!bV_UCPD0A{5V(uu*P^wbxH2)%~@&%uxrf zQ{=Lu{N~%*GY~Dj6%q_BkVY<~TF_&tQMUxWx}SIi7NQsKGC8KU6h2;U4u zQ+Y0Mo9a~+l7|Y)1Xn`reMtB25i2KDM;&tJK5`1#9Y%Ev2-S=RDRv}rh@FOm$Dc`f zjZ^SRdVDdYJ(fWW)U+mELRH02>I5-#2)=R@JQfp1Y7T3LQHo+#gxpXQ?95(z+ZbpQ z29L;2E0I^2xE)QE(2JQ;gkB^-E+U8@i`EKLk-hq{X4b{^)r4U!%h+C8fD=d5yJCRI zw6~l*9gkyfi*p?^q`gW20BL=J2x1GyG_LUm8~YYjzma~?tI6?alW_ZHz$a-p=oq9~r9`*6o=W{^Q67!M^D#dOSY{exTebq7E_Sl^PYwve%K}n@m92P8 z5<-qt%Ffx~dj+)B0-q@o3G5PCGpK`6X2MrKqEE7jN`PQP?Z>sds{^o|;c${=d}=fb z99@#}i#&u%c_;iwQ$&4AiPQ>}IgKLdw_E&`IH*rYgvqt>YvwfsFGzP4?BaOA6hv~; zc?*}~#>gi@k7%h3Gch3J0+>aS5?sPWZut;sl&IUDJj-VXj@$?u53LZ_K!vw6VErO^ zvj$hbaq$AI$MIIX@@<)H&n1Ko!y$yi!MTOvX9={62!Vq_6mMKEq<Px)qQK$`_^qV8oqTsxcRavPxc`~ZEVQ^1Lfq@^hGztf+^Q1zLh+%@mOgh|b7^@Gl z%rUQ(2XG*4(^FCpyGP^&6LV#;>_N`UPvbBfS&SQ%A_2SBVU-1{rD^GAw8XAu7DDJs zN5wq^0FLDckI9(Ad)8oBhF$*h83?ONUuGskPzT|IgG`i<1ZqT;RR~ob&A9995C%9y zXv{l{RdrLCFCY5Ctg&IY+ypX~0s)1&eOze8x`D78S9#sU5D4!f@-^3+t6PW?T!rb0 zc{iO9HU>EZYX;S)ZI-la3(J`R%zYJNH9BF1!0m@Hjxng-u1;65;H{4dumH#b_80{y zKHM~-*)Gs0BmPRZh9-Z^AvGYkQQTEydSzWA*SGcLv7=nK61KwNTwG!jt`Sf?MeVfI zR#pE1mM(``6)kX>l69j{8raEn5!snr)-6<*EwQ0sT2BT?)xMxaH&nQy% zYgGoiOe{dL2musUsIsn0L@xG6mf?{#EDN^xa2k~w2G}BnP>5RbZx4}y5s2B92SsJQmlUT;#OD-cymEDJVx zK|3;BD#mHE<-jGV%JLDVh>U2M;EhCW#W5PK)7fac)H5M=z+9<;>-z{7rzmnd#)exn z@bci{Qn+$BZ?NcILA3RN&TVBYcjCk`IDRRxr1(m#NSn!A zV{NCr_##1+WBK|`R!93x%AuN_!bzv+qZHt<=ZvDm*Es!(kM6ADH8RT~eIbZivc?WJ z=KVTTOW>z1g zHS9XHL zMbp8TR7}Gh0ki)ArZyWtgBccx)GhY9PoJ_F!5pXyy+ua$v3r+8FbTEX7y;{W z8hD1ItEd@7!RXZc=T-{wjQu4NzEr8tkhakZL1T!r3%vsUxn96ep&G3kXKSPblpUvF zPN|nj)oxYnfB?3bCV@m#QIHvoSow166Ryg~{xD#rAgUu2h)2>YCKh(fF4>7i14r14 zxf0n$j-s%uVT4jtc#1SIs+0&g6W9Z4wr)L3tHCj>E%;zw9i^kD=q!o_5rl&bR7ISL zT{N~O$XLO5F` zl0UslE@6Ea*T!A5CI$;ifI_+=mNttw&?1_ffauNK1ma3H8L4WTR+&+EQ&j8rU??8$ z{{X3P3x7x&8zAufdmEPWUoF(i^ZO@O;ag!TGEy)|1WU^w*kF0Z3NgfDv`Yfi3(iPz zpqc$k<0}r;RHmvy0$V_g|n%yG3z%41g^;`OMG93y z654}CrT3i{u-qOj7A3O^`4(W(sts_`qh_0ZSa4f_+7Kt~DxpFPpn~iVV^}?F7b#+v z!0uK#jgdiQKJ<7k`Ka1#0R6ZUOn0$#B0Hxt66%%r>?vRS|k4 zs@%hIjY8lo7R6+kIrc8DM-m(ieTYR)5jAIofm-Zz;MHZhh3Kg{xPo(= zbn+A!Rc-bv_qZ|x3qvrPKy6Hh&=k_e96cg3CfRy2hgqV)A;ohR&8Je9AgN%?YRX`? z!ce8pFWki{vT6vYVntw0j2Vhs2^PTq$)|y<9#4=!4`OwiEUH@g=xeQQ1DEAWZ^y^i-_y zK%1KIU|CYr0U035(ht;4InP2fDQeS!`!b^2H_q>~QZ|D}Mrb&dpKe2mmd`oB)jYo- zQ9NL!X#9y(mx!66*@bOp=9(sTAmvM{E}vkaq{*|N7&t{x>@heT0NJIeAX`c?i&&GrzX#78AxzmNi@cYKcO*?mE;$!FDK3v95m znjRnaQ+PXxF`tALG`mPrXo>j`s=tMyY8wE{j8a7gFqfLtU0e~h6L(B?E~Pc%KnMea z5ovZlDkWc*(IZI(yA@uv&rpX#xI9Np5r4TMsanv>5|>361t^;f{{SWHwgjxF`N$}e z=hQS%z7p)yLkKR;pejiWQtZDXB0@`RNeSdX&#)_nKioQK zoT+m4KvLknChL`90N6i=f(GJRp|Z0nYOWqd(zoWrq}&SC=P(L~Mx_AgR|Y7CtltOh zZhq-jMQ2EjETU)!UHX1Px4}Y~TqiZafnfOnl9=&j!D$@7s9u$2T81LFD6@Y_PURyu zYKI6bj1(*${J2@;qQA$o_MtG|Xd;#Ma!)@6A0OYxiygEFEEuiKQi$2-}voZC0@1Kdx3U-mk3apCL zA@z$7v=mnDiPt4PG;1WT{=vk3ks|vr^W#Tj!YcYz!Ey!uS3=>!tu_B0Q zL}OvovRGB85Ej3rde8vmzSvpfUaDNATx;Td=AgPF-9pKEW$KmUc?F|dCh>S=OKP0T zs;s~E9cu%UzB3_506I%nmbyYK}wX1DhZx8(>6n!Fm|zwkkFv^ z0c5MqO>%9sKis+i-DV^JAxdz6v_LUX7cs7IVwYW%dewggIU?QAPO$WZb{c2MBZ7~! z8Bg>C!!FSThF)1)&HE@%j*ixoi2DmBjp+;jvYD16Mfmi#vqE!|Sge?(6z zqpQdbOX%3c$cjSMLl^4}STP3GJ%Dd+-Ldshx8zZhERF`2&ymqpZ9YY&TZKb`e&c|7I6-n9c*OiH`6=zA7N7sma=930z@+Tack0?+Mn<2QTE5L@eHtgORPXKM!Y1l zDpW29zq4z3hqVMPNRpV~yZ9g*tn(32iW!Nt1u5;Z?QB?bSS^LV`H~2_&5W!t7WsZm za~_OAdzAhJingNGPp@W*Eu5IJV*w-8U}>xJ52uBa_K|}5DdfDlY`a`V*G@v121JET znWQ81fN~ZT$xnCHmjx72gLtrfNRe9@UWmUaa6%Tbxhf;?8d;d=D@e%B;eGuA*oNgP zI%)+`cR)6kMIk~8FdQ^T4;&$eH*lcDBm$dtE9mMV1wG^&wx(l1EZxxd19<-c$O{cd zx46mnD6|k-+y$HukzKaQU=>G)kgVzErgf8G8z(gdO3!-|>yu*&)ef0sEyOdgBjd)R zn1N8ro{T_Ht~Dzvv8xCCVlK?QFS(4ZMp=Yq^+VWpDGASDYoV+ch9yO4wa}15Gu#7| z$|_bcyvz6f%9~ilJ@!;8tJb127rZ`ZF?1A-{y!!i3s-|rjG-E%umU#|Q95x~PhblJ z@>*|Ql&cEaxFKv*O|$F_kxO_4!H~F2w;6$06Nn7hc^N+dhK0D5dBHD(VqFlZm2YuQ z6hFCW94a+Py%O3u!t$H@4pv?gfmo1MUcqrKeOcEQL^J$k@BKil1$K3d1xkzg$Xu;* ziabRDq{IjWwr*oE(6?ocGT0t81J(WVCFRw+e+`jc6Z2y20?GdXNDUzkZ*{w0lDR+> zOSQT16u!kD4kyR{ zO9*`7@BaV@-CWI={{W}hj1q*Zs^k=wMxbnDj}6RY9h9vV+pnY<8~J5i93-O!TNW}X zbyv>}0nww<3sl0I&WM^31-#~9!v4grfvwc*FWGW5UT5X(EqW-*pfJp}#cDfk;mYf1 zJVQtO{{X^aoC@-l@I}zqwpeLtjj1RsH>XM)hHRM^ zGYgWl3IPCT)NOcX>(VSzCFf)$w6LWB)qapeY%Z9ZmNfPwWh@b-4J`Qp?8>bQA}nd_ zR8;U{^2nwtN?^Z`Aj4fpd?(GN3CCa!z-42=`7fifcGKw`V{AEcuD{*Yc2+9`2%C3o-SF%(lqAMQ}Ggcimb!Q8;DG#1ZDFaWn; zmZi|P)cYFYYPXhKPSLNtiADZ*9M+4#xrV6QA@9k3T}Ce~6VsC#5gFR{5i>uf=>fo9 zM3~<&U4P&uMOQ-?77SW7!2H7|%F`+kEbiudSY_l8G)8{IWU@7>JHpShq=gK$qJ zDA3L9A}AD75{#?8{E8@_E?Ey*NtU&lP;??2E%FRegiDE$vr{)>ZsO0X^2m7^+8{mo zGfc#5Qvd)rg0igAC}3@5sUnL)&3XR-r0t@j(ekB{Iks|!=b&kV;CxZMODu(K2g~FN zQN$R_iE~0&Hpdk}Jv6_QLLg=>Q;`z!_j}j>R@KZRVJ<=&Lq5i7LErfNn7h zOL=Ng02CnYU;!(96pZwYOfTPAT;N%=!ZuF2{{S__Y>0)~8hPhLs6kR1ig^xh5gI9} zj?o8gzoZbe+hR>cObqB$edJqUxm~W2sMP3qA0r~sVZ*UQX=FVUmsN;7Dt~l;DNZNC30w`V#R92ve`iRTg@@#?1?b_&?NE9$K zrf?;=VMAESgnN?06$Me`?>-^vr9*f?fIw(bj@{ZvmCu@y>;2o)BVT%eiqlPv?5Nq+ef{{RRhtxF)Q zC{cUWFJ)FOWMm<8aKy{QX%eu}N_XoD!b%g7ugPb`7^LID$)72c*#?S{UYdEDhgFW>9lM{ z7#-IH3xR{8D^*lPC6AWDYMMG+T;-V8ElUKfMAcfcX|@VR<;*r%P+RPx{6KaUwKCEG zLkdg*Un3)CwBBX#V&Q1T5nbEzWS0K`67B(x`zTe0ug|0cSe7ix(E$Z%#8QKK5h(&z z!%~T`thG^ryanGGM}W3w06Yr{nz5MpHF$%lw9>?l+gIrgM6AP)qbZb);3f(dD{Z9sInxGBnfFQ zGfLv@fyLSrArk<<@QO6qT>hA&Q`A-UAQM`E_lz=$Ruw|>R8VU_lC^z^g9hTotjrSS z<-nQ&gL+9@F;R6sS4mf*qKWq9i*{mRJ_fRbRr>?cjWjE-sOr$!IunxF3m54JP)=wv zCbG*R&H{nRIE|Fi`oijo;Dy$}L4Z2dC5O@#0t;rszykPPG%9Bv#cI_}fr@+TYMup{ zK!H-we2EGA;EhbAPjE;x(@_orqg)682wH1%4V&AJRWQv=5<8c+AQ~FNau$`mG@jg5 zKI^7c9QPdYgB944ZMS9a;j&{a6UH`VVyg`eC1N6x{3n$ggTw%Yg&xL*hAy@Q?PZeS z)8i0Q!UQ#7^ni}M7pQoI^G!y`D^%bt2#wETB@>q1)S+yRtUOVdB~|+e znEXNd%bi*Wk(I5~M5-xa(|Cb&GPxl%>1kK8tWb7kL>!-IMYR%e0E3V0JIk*bij3sPL@wc$Tbl5Dvht5BGp#vKfwP0kpjFqxrL8u+4~)rh9JdU zVxzmW4S_BgAF7oBvoPp`fke#X-FYifkz@TaXx{=Qm$PFMyBS~{n}kOdKI%W@(C57o zmve(s6m7J#f826Zm!oVIQH4_wtGhOFNzIwTDaHa$=*B3|-2TN@?M9N+yisQC7B43L zH{LXSv(qMxrh_G#^S@nHl z8nQKzISu3{Xs=uy0#fxl69{a~HX{XMaDSA1RNXm$(GrZLHiL4;l7}e|7=}eMx=>Nq z?0?+t+nFi?H!|)<#;At4r#VK`A~f|0Qd-gi3LGLU?;!zNmwt@61gu*Fq$xlQ0zP&R zVl5W=G7JyNNS{O!=GN{2a3k96JQ$#tHB&#dz2HD{pzHKUs|u72b~YI0ZYfYUbUwzV z3K0q+pC)v^N*gJ-Z62FTmT_H|_8v@6ku)#@e)>ywP z6v;oRonHZh?Y2Cd3|wnC-e!DHtwGbVZ4d^9lBIf}ohsLiBudja8v_tk0Sr6pthBZqZP4l8;`U#$4;%{vMABcekQUIFL1Py=jRS{BLTqeJV~orBTQ2&?r=W(p!_oy(2nI|9PUzXj zAG2}v7^PyBwWKQm0atqQBb2o!qBlzcSn01n7`F`q1MlUI4WH(68sB@WW3vH*PUW8< zA6%x;ClDIO&>hnr=s&qm;>N?O`FR zH(9tBFJ{Wj0+=NMqgjAuA5!;1fS83?UDQ!315GDlmW{jXa518vpkSh}86&qSqjI)e z?94Xir=C!Gtety<8%u{+ks=Fkvv2YiWuLY*$7F6FBdTRF6_i66=I06 ziwO{G`j*916f<;Wr!ZJ0s2MI%Zb{6!8KY+Zj zfG!GGxI&{jOM1?LQ~F_naIFo+Z-$B`Ku|Q-2vUp3r|bJ~?1{Fa9BCnF8;OZ6IArR8lMfYeDl(lc&ZC_{D@Kk$KCFC}5k+PUTZxEr9B^IDz`dmaDrjOY zdh`1$YYMPzl~Nf%{3(?T`U_K0iwnU-vlkHVf_9LT0R8q-Yg#541Q??y(!xYBcTeS& zjM3@xEBQE5-(RwZ+g5fyLqs*Q!|$SHT9r-VhY%Qpx7Xtq$a&ft%6S3`mxap+NC}_o z3X6<48ws38#c!yk88MII5+o9`NA^UD<%aYKIYdCkydb^Mys=Rd?3zqrSg&W5Ge%lN z^uwmZ935|?wLlG<#icS-fnFM@<#1FKUgwcRURuMoqf9UdFws%yp=U7Q;KNGHCT#_< z)P;K_P1rP=fv6m{>l9i-CRMe>O%W3}#$dsu!#0jcvI>W}jpEfSWq{4gmQtY$Q(Cy- z3tjd-SVH3r^>0ZAI$!fFjHqMmzCcoz-`IJMNU{dUrN+~R**-+%V|KbD zkyLE~W$(2Mnp-cBhlSRS{xPqzwCR9#HwNETPivX0>9VM*=nu&$cU9Y55NL44Wk2tRfvEoCkROO4<6mP1O4Ye78 zMvv|I#1`btrTWWQjC%?Km7E21{FTdwL#Tp-!u0(k1=#>%cV{FNx}7?7MDjg6ff2OA=!`%Xh;3&8 zfL$61T}7ZSXQfs>@rt4#5Vcp-C54RYfTrfnJsE6x{-+WT00{!6tRMnVH!vKd`sx|1m>|J()MUbk zIFi%cwRde#?E#}&me!eV{{V1-R$0my(4z>XU6w%tf*Q0~;_6WwR#D7S{qIv%SiJ{tANFPwFXg;T4CAwfp zjzlWEH8zTf1Y+fMX)A<9>Z*@!kQSUSCXPn9u%xCk!)OW~L&L&V_})IAMg&@5(jWd! zja#zx!>J|yk(_Ft#)%vr#4RhL6#@%c63xG3r2+~97nLDg+-PwG6z7qKT#Kl7Lo%_3 z;MHM+xlk9WRJ2)JA|*z*GGvqmy6Va8!wnIlSDso%0s#|j^r*4`T5>flWv!T;$HG-#B~TvH&+Ev?IdkJ0WUM#r9pN#4I$M<%*Zd8}b$| zRfdi*U^KSO09+3suC%18W%xY%9E>YXqHQY*py1%qDApx~k%o&|Ws=4R`G_DR0n8=x z2LlkhMk>Bc3T!SLi;M7XkbA=GI+a3KsZv+xPQJy3fS_WKfY1s0qhJeQ=k&&*IfBe* zdjJ|GT54#ueupKD0GPNE&aSu+1WbaMeESfLs*R*Pr?tf>!VYF1?hvO-&oLdM62~(% zU$8(aMtDm|5|Zv&YS&O^jms;;pK$G5O0Q3|BSTkkVg|~pLJhZZ#KrAYF7%d6Az+r{ zHZhbzGOWE>7OTtim}cVDjX_e|h$QXl>J-YRvenDcZE=cdaUL{*mDtn(iu@kJ zO@ZWNJ4=~SiRNQ6+T8+6wOM?6N?4uff)oVYSADX@OFu7Cw7?Kix-_*ID>WfDJOBsO-Q{xmn0c{f)yz zJj^2x_T|6E4Me(b0-C2Y7=ekPZ3akwJcImgoSA1IZx$;zdG(Kw&ufZ)t1+|{WPQmm z_Ymr@o>Z&?4T~cJHs+g_U{->@UwA^aNf|A)b|Ooe08THdgat%+0UkSY(KkxD0jQyyQ3(f;8L|k1Y-2Y2y^^8Lon(|E>uYmL zwa19LW?D5QY7T*Tl{rZ-vVks;fVyhqk5`lf(RKY^Ss9MTQb`sj3N#)AK0A#6e z2N8yk(p8aZUXYp+?(5jcVh&4FA#x#MS*#pW5=Dxdf*-UVx5Y-G`PCN|CpVTFTUApX z7p8JVTH^H^_{#8W97T)U-(rqXt3upi5h9*p!m(_hGR^v#Svt&x?@CuBh3XszK7bR=q z{te1?LZ^V1(lyWZlw}Hqy^hpTBE|v?T2UgeKrep7GH>J=47ljrGZwl%j5d%4ON-wY zy3Bb(zvVM_XetWk4v< zC^4#lr{ZH2Bp|ptX2AU?L@WM~0d}t@GzLD%-kxR%{@lbEU&W*3Sd??ZYzw`9MCjgp zjFk=4DuNkW^bsjgQ2QN7fR0&y!laFHO9PRsma8SD#4>ia(IrB=cYdBh0e>mE8;rEs z{0LldRc&|mGdol#jso#2Yla!N>4w&ekVf#t4|n~L8R)LN3iWY=aIRCaK|yA@n2x?Z z1B->TbmX^-HL$3M%M>(AV?2H#1gk;tm_qkZbWzDzf&q0A{)i=fL5e8u)tst)?r!)HHB=IH|WMzT|)E#r*Eubw5g(3`jF`hmlme) z>jfshGs6X?q58hTo~ZN$qh3?5fh}I?8 zpVfJ_-tL$A8%qKArS+}vPFncIg?9>Kw>OyLtJbkE8 zQ%n&T36504;AHW_0?=V0*Lu;}ts@j=U`CA8kHQQvI%ViAoCC*Fnxz*8Y%#)XqLiyZbmIzMbJeV-uJ`{&(xvyWY)ZB*+TLEhUiYb1t$UmSv)RZ{Xm3`AW-27{O1F6AZ%AgYA1&Z5pb%{vXYid*@7Dqh1?sNVC}sz$|+hQ zgDb%)gSlb_qF$f{O_4|__#@I@S1y=!-pxbVQD=!|sbdA>QsbyCS}k3)w#elPE{j`S zB5)`L>f^#R=;F-Qp&a@!f{0inwlbG&sgv#_0HwCca<>dhh&`7eV4GlU9#)w~QK@J> ziBSQoPOQimvm!8)esfz8Kb z(p=OQpsgAU@0NQINsBH20Gsrm>Dd4flv1gxW)C6Bz7#R(J3_Gyc6&Klbjsn06a>rm z8S)-UYJoN^Z5Bp0=mpHD{7Ws7IZJ~8C?F-0R;lX@VS)=hiE%&@@@4^=C`bu1gdor+ zt99%3m5}Lj>7Ew)>c*J%Vr?!@)woROhnYKFW%7%E0uk``OAS%!*gRZ~n zFU_L))(!$GLN|pC$4p+K?0$@%0}VQZ)*7N;a&DNW#t z`s`4TKO=NZuDuRH3UTllk%j^;4(k%y>_Yk>V)-fs7NX{EhKxYWrBq#L_YR^+*3S|) zw6yFMfn;-1)$^YrP38nf)uM2EZK@Jey}Y_Dv)bp)$uci${|H})r#`EgMcog z9|qS_nbXo$Q9=QxcM48cUx9Kp)nYm6;~ZgHs_cOTv$NB}RxKW(84;jAu_5z%ur0e< zgNUIzY^-VdWyJ)yF}K;4W<~HXNm2IaNpjh0=OD~ouB$*qSvu^nf{FtE$^@ci$Od41 zn=%3L;}|qlg=KtYfK|(gt`@WVBI>A}CSHQ(x6(xK(+9R z!jRNxEiUOAU<_&g($7pUU?C1ek4bbtsgZ@iz`Ze0;Fh%sMZ^bT*@Ob)Kd@>qUH8v3F8IYoc{?`%C5^1Z< zdUlZ7yIh0Kq3u%4w*Xa*$_z0@8*Ajqwg?BYtRr%Q4&!@mN;`mPyj(&QFt%8?vfa3?H5++8Kvh+U5NcabkF0wo zO2+Nw#5z{sViFdtvcOx^QJn3FVag1x{t)mY`tPx!`XW>jgu^2KlGR#o0E->Sa zL|kp$KVy-$rvCur0W#e-4;aaMXrJhq)OEujs5PG*>J_Si{lfc$VJQ}d>1w50kkfgx zI>vPUjzK>}KUD6g;rhQ z{*VUB{lp2<>^y``l*a9qFEJbCU;RgW2FkeOMzaQk9D~_mV8o)NZkq_f@MTLbZ7QWG zzA%Bi_94RdDvE(w8kr&sjlhxDsg1 zl8uncb&P{?YwHS%Wo}4(Za~3Yiz_W4crT1G2*>o4nbE3+ID+L=DXgeRPN4x)lI+@D zxKT!1c3SLoa;LF_12&95wE$~|D`x=9w%f(J_b^yRTU6P847C%Q#LO8@sH0U5la0JmvafFP&IVwD%9T+{?e1MY zf~z4U80s3~h`dTbrwkeyh1f_|@enMzvY?!`0I0InS7zokLgA~?E;e23WT|%Oxs63_ zw&A%T#?sF*3SuiQeFj19e|2Rrn9mjKx!?w`Q*c9d}B=%-GmXk zVZ7p)2ntd51yo*En}VTmOfa!7Fy3ZE0Yw-v8jAk_w~Vr$kNuGdFLo4RC}r;}q!cjV zc3rPX3t%lRM4IlEOs4})`eg=-I;=_o8;U9$(O@O1ChZckM4(tVq-EN$Nw;crr$YzCG7wV-UOA4B=56OOl+8jiyGR@%5g3oGT^K8!yP?0BylNrZPem`e147SP>V zqq7H)1w~gO)RUlmBMaTy5Q4rcCEg}1OdwU+lv+3nLC#_Q2oH{B=7Dl8r^w2M0dy<` zaFFJeSp*t89v_fY2Z@Iu!v!@e3(pA7nWEM-XQm~Eh9#m_Mm}3H#$RSGAg_~Rn1yMo zDiC3jdHxIL7wM~re_~z2RC6-xlY5WD920O0d#J)3M&dLngHrBXyVNmL5Q$5sF)_PV zHY zK;eH9m8@i2@WLpiwXuedO3VU!xW&z7stI5#gc&@Apn#@j-AeNrvy%LRw7D+)gQysG z{{TS;@C_iy#0-Vi@cAm^8ERQ65mrWxA`1uWDmP=b3tk|>Hl-6s*gXjaw7-)n^=|8y zj3pp!QA^Dk1?%zv3ifF{jT&O$ALFE9G#PVe!c@=#sfCOy2E5a)ohoo{W9&o?>Ww!_W zg<~j3D=_T`=1U7BHQ01YKm<7a;~87dBLM&!nz6XZt<-F)K~Z0XE7~O~mme93Fe2Oj zP!U)yisAg5!<#?Me1bJ8X^@b})=QKOI@EgUX018<65B8T0I7+(D1Y!o0t$fWKy1q) zmr*e2sQzzKto|4c8lfuz6Gn%_F0xkE!qnR;MO(4EMp_y|P>iNFty8KXQySMzsSky# zzn3inQHUHaaUPi^vg61d4<=?vDk>J{IV=MZL0L>pX@N_HK|~vYjLRkkK_SiTttvB) zIV!4HE@A~#N{e5`C@aE79G@6WNgbcWw@ei);g&7(AVI3Bh*I`6ho*N;geEQ#e}IUj zx~$bo!|h?0clISJEmC3thw*NuaCOFkZv)0_<+pCb!)Gyg{7JU^T>o9J4GQHR5n&%#neon535C8#LpF{>G6)Hv1K23mzo(~2QT zRE~^GPrXVM7^5!aV8*5a0|^Y>N64ZNF)@bz#k2H|mCU<{ZQdcg93^Cmc7bx{2NAe1 zEsE6MAUUF4N+Ehos;s5znZ^ceVXO^6Hyi$u%lsTy@RVXCU}gZ;J&KCBOPFpltnp$j z-Qm1QQXCen;$2tZHhz}-2nFkr@Yohvd|b(VL%(EFy>KTGODQWPxikewg2rs+y0q-9 znjMt1qJ*GX3d9N0WY{eW`nbjoMO4k0m;@U1h;RZ65xj;pjgvs_aVn@eILDDj>~a+d z1ERseXUyh7gn zFl-#u1WA}$hSKBEchm@nB;$t2c&!g147wwT8b%q--o~nQGj=Y?h8-J(SDu!~&tdB3 z7*I3+0FxO@qBILRF~$wb0+v;#zawr7R@4zje2!QQt8h0$!m45@eP9^iX^5oQ+4*Y) zf+MOyOj3__<)vJg@hV4T*%qdWLEO{##vCt5*=PDAMrwi6(>#vL+9iQE*f*GZ{gxXs zbNVRYNPkXBQm7_KK)57iaR`kAm!en3_&C98Q**^GZ;4~AOeRtXVuS@>tOf)CMbGh2 zC4-}&aZ^kkOo6rWOa`%8)h&AyKsGmdKK{xrrm`$#cEG1z4@e6+ptsJY-juWzdVsdT zLkGK-k_M=x&ifB<7;#XK35j*kV@q36ROZEelzfaS;JTRxV#3O6l4pYy17rZH#Aj_F z{{Y+L=*!wy?>I|q95K18arl}3h}z{dG~zBQXe$sJjRzRp1Nc>KOT>ZXp#?U!0;49H zVt;xCOSlCJLglRZWl+%dmll3XfE>i#G(bRP(-tMq@MP`~)Bfd3_?84G=kQ;4DJyI$ zBeBK^T;qhcJwq8`DroIyMDUrd{{Yk|_~kU7vR;66q_L_l z0D+Y{EZ_6kjoe#c$cT>*+3YfOjVs}L1@>LRkbsOw0@~4tBCJ7M+F^!3qn{8AEhup&bfay|l81{F zI=<={76Gj4GDOn^#A>`-Gssh5^p_Q{>IfGd0^U=VE+I!G!WAPSQcCyC<^5G1wT4}A-MA%D3(T-md zwtu7?Mi}4(SpfmFQ2fLQtY%dzOe~<5K|lQyO)4Ldja`);>?1}mWx*CoRGTd71I9+ccwm0E0wYd8R!Wz*`%{-LL87cNxvcNG~$U7nFu|N>?4O_eE zUm{3aZ4bmg;}!jkb(!)Ah73?K$H0x1Ew z8C!zF#6mVe(!60&hIc*7jnZ@2f+ZkVNFYkPVW~_d2Xh<@5=zE|33gB1agAIuv4hlN z+ILH3-o@WUe2qZr@nQ{t-d0pg(`=)@UMxWC)IbWrlM$3Kv9L}t0IYPkaf;`+Q<187 z1vbL0_7q0&YND95kjZ3R2mZGz6c4qY)t$YPYL zfeYe7tp(7?#d);g|21xno66)GeY1{E?mWnQd-Cq zLb%O-%26c$f(+(j?&ikre>f>_Ej+sG|jhqCT%E%T(zs(^&;xA2xQTRF#f&tNRHYO|Tzh{@ zBSObPGGYd(Z8LrckbznksjmrWaaP6)Em>*OK?sTih2Q*@Fao^~7CEk!V*XAid`z%Q zgGH(`2QiQQO9wXP(8~(L|``5EMW(X69Y#96_7Q{8r0o#H9sONtr~n`epkI z@>4KEA7yQ$DK7_*E8_uDLqjVFcumE9JRn-AOR0XM=b_{nnS6)fahX=Fr0l`jvtkya zGjQJ+g~foJf4FNBQNp9tFXrGbVWzSjB`Tzqm_TJ0P(lh3MI5Mz7|fc`Fx^m%z6rK2 z0jE%F;O+xX#I1o!+r|T=!VX)NRhwNng#}vra?;2~u8d0}wGaZjGbywaI`S)&cIrY_ z00W0&Fr)=tE?WNp5KTpj5~?=ZwPdHFj%%mvC?PVhDguT#!oEc%fU7!v`zkDQpnfA6 zTV8;F4lG)$nOSe}i8c^qve85gw;HuIV3yre4u#A0nMq7L2rWx|ffTcUvn`lhwaH-` zADV^;%9gf6SwG=QsiS6x;>GU`+~IdzVVZ`DDEvxLz;DOfgIO+ZbaNdI@Aiobv*a2d zMbyFupi14xRJ~<;FI%EYRj`(?e4fM=f~iC<9iJn66Og%tU(@h+Aq8f-|GOB*sW>Zpf>&xrAHNs9_>i3)&Ul9uJc7aPuf*R@JeaxTY82OXO<@ z(pME6SD-`?jg8s%DiN(^j}ewcG`crmu!btXVP&RhmMdV(Qt>VnJw)cp0wrEug)0by z(@nrAJu4r`u58fNO6ul7^XvqG8)-7*JOIS?p<;kFQx?Lzg3yOG63dF9f%8AqOXV&u zc~99DP%PB3i6|f#8X6EK08=z=Jc7zAdV)7E%s!AH+J$~WL>?BqANGA+Kw zrnHxMP7#qn8WrqjWiOL^VsH#h&AD@3L-rkGw*STc=|by_m^Gy!g#tH`j73{@%w z2p`jLvkD4{MSp)~a{@z|%lPaJ^%z-F%5E2!oBE=Em=_8p3%ChXTAK!EsGa*;cYpf`mGEB+i5NCLBs*FLfNvU9!kmny#Mc@yE(C1#mKQ+N)4rmHm1~bw z18=Jn$*qP%H{t@?xKH6O+%<{W3Rq$m7E>g;urX7LCG{rpaLy>ak7E=FoOpm39R>Fq zmw;%ak;P*K>LkJ!5#t|_0!pelxbbQrg-aT1F!K`jTl|@f0Q(V9D@;OGo3)-)fgnKt9Z54*Z+VJ(c!U<}LwY@^GRHmRgLM zVUo~HHJW8!SWVv3z|tRJbHH(n8P1-u1j<@*=K55^6bFgyKnCLyU&bzD)H z^kY0yLsSD;R*30pT8p>ILr|Uh$fb;}N|bHoQ5I%xV2R|K0)X^>MRd`{iiL4P{@(sV zWWj_K#SRe#Al$4M(MQOdi~2PUipJdj49JX(gdeN{{SX2 zM%M8avIFbcTQ(fpiB&i7CzrS@v#X3tlp?m;AQqR5l*cF*)s{C6F(7E85p>?-F{e#S zWF^nlSWUGb7={Mre4#VQW+HiT4KEI#@&`!( zqm8u{q7u+Si$K#%{0LkY0et@e*llc@a!c%c3xu{p+CVEcp_k%YZFb`h&JQ0@*@yE< zhbk4?N#L(=C;qWpw(6hcvait)WksVr36|YUQSC|)3#|O)P&rkmPnGoSJ%9=ZRJb=` zVwIRaYBw!%FOx>?cm8TM94G2=?a$<}I`cy>S{*`$2E3O+A=+#qvK9O@7j0C5i+^#e z)ud+r{DMLB8O1`q3y8Z^AJ$!h>a|I~i1?M!V-c`L)|GLD)hUM+l4#8;(1TP!>klaS+77+tv#Cg-?yIi;$T*K0(wd4!)60*gi zJE9ka^p(1Txy#vJ7m)6m^SERsFut9*#i>Yv`z_cNIRoRFzMMZaH zB#SM|4rm$C`Vm4RNBI(8rJkJl%4qRRNy7oKEJjSe*DAXgku6)=syzXCF3DkFwKTp* zkyA9Mp$YUkOxQu4GM_XDLx@wO7zZ;vHpba1S6@ z0{M3h?WarfTqdA`G=8u^qc-Fh^1ee6#z0*O2vtHYN3cw5xs2crG1x3^t2+MTWiHEu z{lQTeFFrtZ10%cAMzy78wQj)Zrr07b2LY*KF2j@m0B0~`kpW<+FYMMkbaG~lh$Peom1FT2QeoGZzK&Uabws{y+sk5CMAcv0+8Q9z<41{V`{8;M4m!bi*k^c4LZ_paKrJ z-bTTdDREO52wHACL{(I)jfKMX6)mrsmiQck)!^xgv@jq_m6-(p0GSoQa*o&+{{Zlr zjL|O~e3|H}DOw3i4eiK4Z$an|TTRB5k#f1;vdYM{o$~o3=a|~I$`!<$jD9r;w?^#7 zIKxGNwlDok&akX$68T{8xqYRVtEgtdO)IFx=Jqb~VVq49=>*6!FB?)2bl}GFRp<_~ z{A#0uHQOaKvO07ZZLgCU8WbrR%8abfe}bv?AOe=yyp(DsT_x3`9`G_ZvOyddRlP|0{0lE2htn|k4bV2 zK@j{PzjF~cEAlA}L#!63$X15cvfLozqWGjr3z#!hi(FP*aj4n_TpKI9UPFk1Rt(7w zF(<=_H&mcv6pR-7Jc#4`z#_ex7?R)?50MJNMVDWQ=I`$V$kptNhfEAoO6!=ngAd*= zHwk>Q`aTS9W6-kxRO7y;n|5uNZO5hF8FWcj!DfSrjM}VzP*M0GO4jLg@-G``nt=w0 z*?3@LP!}s#@&%O@D{tftP1sG7ALj*DdoC%Zz(*vDW?kU_07N)%`*>7H1(s_O;V?%_ z^oZYhh5rCM4ftb+RSu%T;StvQ)XdtH@_vn_&}-F%pyCl7rRUX9L|N%B$%RlKj{2#lhd2cz+t`;n3I zQwyo;u!9DHLHOYpeYCL>f@!0#>T4TfqQzTYLbqlv(Ji8=R76idff0LFin;B~7_s0| zsX@p}9~ejc6EK8$*`H!t7$eh?$4b#byXBXsXu1r$!`7;3q?5c!Srb^};dE~IOa=8HVY;a?g zE}UDex&C7YwOQT|kpk-v*>)*z6m`rlxf2Splg1^Dfos`Y4t+}%H6t9;$dN=)7O8tV zWfJWeN#qk$z#Je;H>3CqsAHwJ!ym8?b1QEAenA&)ifi`~wB0u;JzTE<);@dt5{B(c zK0>F!yW8j@YKZ^^q2$X=*!WZ>mYKOz<$_GN*yrR6fsj1@*a3Z zP+F>6$?7j4QKezH27$2)o`Xd#R9re*IE$oSORutoxzYxIs4xM^9Pn{b7Y~(Ci%<%U{n$Y9=UF+_{KUj*M%t932`}kI6~6by;dG z&^F0e*pVVI)%_R^7+uOa(#BvCn$&sPfXJT`9}_cLzx{?|kV|WA)D!&N!Qge3fr-kk{k#(a8mruyl5~k>0;S?g;%q>#Ww0=NX3b-Z;#X&iIN{e#_V=OA% z5zeEaw|6cUCF~+gMhmgX&fs?z%A0LuV^^lM`7XhRtr2Vvtp&(~HMkrBSfE*0+RwxW z0W`Lk3wZJ^CRb5tI{N}u|n@7OqV?=6i0A#d87(N6aa4%6_0 zWw~?$SKj4TPTBBIqz>Kn$Tn!U8+l0m~w@ePoY62J)FOZab zUQ8*5%{HC5+%H39bq9A4K+%YSu}_g1fotRow+2jN1>lvF`=~d1D)IW1EspUT=|eok zV8JU~nuhHQETC=Irs<8}$md$S2ca;FpqdXrl|%}k#q^h(H6{nXW6vsq6q{*ef4E$9 zpey=B?Fo1T(DprrqOXJL0eR({h47^~NChQsJuwDildjtb8v3ACtII3zVKms8ZoRo0O<*RHBqg%4l-#L!m0+zTf8d1C}*-2rN z74HbsO0BT|lXL*9)iI>FUcu`tn#fx$I~BB}`icabA-|+nB`!*8qFP06vi{VpmJK%G z)kHe3HDl`*;@$x8{g)M73v3D-BTwOu^aO|w^r(Vs8-ffYV!J$uN~O=lNJYs|H(Gp+ z66Wz5X8!jxwKkb2gGI$Kvb7jSmzs+MOC+>UqF!x8a#=2rcVyb)v;@+kGP99w zitZ2{>nsnjz)B=@hh>OWXsDrMJrPne@tXz)kuPyfcEwVuwk4nip=nsBK5UAzt+RQ3 zfaF_}#p27+7CZwCXW5(0_A4qBBeW~JY?RVEo>lC%!d=0Zs>h_Dm&dggi!jxSc4G-` zUakvV4hwvlAqq}681gs8HL!j$6<;I;^|n|mBd~(q-NskR#wA7DDuBlU0YipTW1(&i zveX=V6fBD-!cbOIz>Vto1M-c)N5;uYLkc$wri&F9No`={P_ebO0J`rkAp2_J6i>A+ zY?>h$S8uf|2udcZ68vS(8uke^p>bl`ZlX8~WflsC0534K?x$dQ3AXUp1pP|CPY_Mz*EXut^gcGbqd;dWwdJr)$bn!H@hUBc`AMLQ6QFO^TH z*+9lwZkS~)(Zk4`F;W^x+Ii(pk;J0cV@2F)rPKndv0IKN@1KMfQ+KFsVTNz}fFox; zmPwTvc{gs5%&@veDFr!V3ne}x(3CCUgqg7J`zlLGtDHo9GQz?(eM2B{w@@0mU?p{S zzqc>N%54-hNly4!zDxw`F0N2mg-Xg=L^V$tg~2T_kdzD@#lFM|a`GtPC4yLKpXd`4 zN6|6jW9Dh|!`;!=6NXz}UFWGfQ9D7!)z~21c*< z1BemIm~sCAklMlQT}X}#xCLzt3uLq>s0df2`2p(tkhn#X@DKq-?d%hG!d;In{`{Mj zUO3Ak13Fz)rnSn=Q=}jnt&u7M3f6p&Q|&VZmNl+SsF!G6fAU(ad{i0}EmIf12C-d~ zX{^EEz%TM1PdyV#J;4M39iufVOw!2OE)TQLVi{{XTK zG)h{LOBytZZ$xiJHk>^=emct>L?AR9Or^ODI|k0p2Di`|TI zck(cp4Z{4OM99&zl&MDplEdxIVYa0>6hU4jg(?OnM?BC2N#rY=Rj%XPnB?3wRYy#& zoG$JG*><|)3zba_Xlwg{F196W1P?5Im%O=*RG=`(u$W_58}5uzrZi%A0s#YM_9;0a zDhRL&1=0(xhb|KfI0I7bFYF>+Q{fckF$%2@VuW1MAZ0>-i1futb`5f8V%^LU9unjg z^rkD2+t{eK4(6Jb_6CHMVFBe)$d_WtErp4xl&{HV#mfYUR_SS8MA5pY6+Y}&nDCq1 za^}i`Mxqe@7@%%wuwTg8=Gi5AkZz(tRn;{SODd34f5~34nL;U?nPXm7tL%27`*2z@ zpKL7$64&-I+Pkl^z{yQa8BqB$0_MFRVSro6)JWO*H9u>CPYI!n#(l2@N}5U*KUk%x ztGD^kh!cqGKz@)rNm;oCm{&+_8)G31p zDvpUjaM=TJvKYwIisEM)QylF-(HeEnrXYx~#>{{SVWv@Yd# z94mz$1u<@A=sp_7LZ(Tv})Xj6hV#I=8m zC!#Byy+drPb$Ish!$PJULBJ6D5mv1k!1L*QJ$r=mji6~i$nvIqWL)odJ z!n#40;B~b7>{g*ngH66Lj-a7Z+91?zy5Xob2CDYHz-VWkW#TbCI1ocnl-+v$^@t`a zEL@sp_Z`bCWVnO2JscF#lv5+`io*@ zL)^vq`zaJsALeES6h@03@x4O>1rn9HlC7<5LX3%LDi*{5josE_Db#0`4CbktQvxc1 z1lA%|Qx?Y|hFgXa1Id)FV_Ji|rl3J7Tx?Us_z(k0R(`q1(u z4ip8_D9u0&3=&yp(Oh2d_41(2M?sH)QJ}bM6>-P~`h$^+&}y@y0)(aR2*u#!Ho^DU z0$efg;tnbdudxg;8av2^OK8+n8`dG&RY`=Gp;e(SEtB=A)dc?I7`+oT6{nR1v+^v> zKtTjRz(%_9c!IzZmfCv+3xf8%VLKC>0C+>Xh6sgks1ii{X5;=45kyTfQl>Sv+6CO1 zYMwI0N6OSuz{R{5k`XG=gTiCN$SJkju)v-z$m&1w> zrp;6~4oarI>iH<0P7aUwCIKw=r6)PZB?cINTnlI1KJMlK2Tq^V*c1d>DYMvTHCOe2 zWx-OT1|Jh4ENspFmx}Khi3@5Q6Uw(Mfo~v#4J`OQh(-?+5Ski=2Lp33?ytEgoaGFTVZ5EJSKJ_k9d1`A<)@r$h{Cs`_46v!qZRfIA# zG&bn=Qh@`Eb2Nk-*s)^5wI(J5mY^Ln+Alz0yvkPXenhW!2Vp4OfLfiEa&RRGPOMI* zCZl4*ZWSEDmaZTW3n!6u4w)eyQ0bOyyO`NvWrP5)LSpopm-EI{(^8#uE)2!fC^LRk zLJp7+Ej*7amaBsqf*dCA^vjA=;RYD8xG-8Wn2GjB4~(~Pa$|)+!3sp3hVnd&ki(y1 zAy>pzXsq1KE;mM{`nzf8*zIyP(FHD}Hf{lPQ}|+%!P8im6v84FWI!ApRUGEV475T4 zFOU{2xDz6fnW?RkjJc(6BENYUTZrBx4xT{Il-Y>7P2zgP0#$Q!0BJ;AQc7t#A8r*Q z8~*^*H$g*)`7)@*eV3jc?j(S4-M|$Kgp|NsZ1N!51&w9}=p0s11XdeZNs}`mjbVoR zoq{IV2S4SMf~cz>qYMB}(95V6HOXAEB^n70D401p3m3Ea5thEH7`qR);!pO=suM*C zLHQE{WNhRaWwHI4?94rjc?`JuGWHxZEi=31VSs=k2_mv1#v`tDGhX~)mL{SQYS|)& zV5!@JyA~C4Egv0aVX_o&dz)ymk3{rk zUJ;E&(HWNZ#B zXPHGuH;k}~id#eg$V;+Yv8R^)!nlX~i-Z)jEThyw(?)*5uFCDoL!$Ci2GY&Y#1w_i zu&}9AA)F=?x&}4cXm%+?tXs&tCQ9$KG*E?;1)Ra~T+9QJA6QSas;2{}E7$lXRBCc2 zdtll!tJ91ZqIDl{wa5+)x^+AP*NjP9bu-hnE~5uJX+PfHM+sZhE(9u{BX5KvUXiF7 zN!iG^E7jG1Q;ybCz-lfbO9r^yK~^zaIE+j3 z-2UV4j?szru!5<8CQoWDtjY;V>N*#3rr;4J(JgPVivY9m_BNo~gMaN1Olixq$*e1Q zY2D6{qW z&(t=!A@;$z{{XOoMQt*TxBmblkjk>1+bG`8f{jF7Wff&Eg@ZFBWq?4Q0)} zjL{OYjxwLRf`lh!x>f<{a1?%giYqi+;c7DnR@yAg1gER5>>$fx?+KgjEv#Q21;^&xlCJdH%-8;ut1@LY+S?r5Wgg>I~(}M(hOfj zZJxvxYXl&n(3iLX)THo0Bf6l_;X=Vuoc9KvG-q!Z&WSVwqw;rH-kdMn0?S5$Qd)hyZaA70pNS{iiV( zk}f_(2FsDu=AfKKt|bIn$i<8hVD?btX2qaH*n2Dhz}-YB8Z1E3+*@Qf0Nq3=BC4oF zR!p3gZr<#K)~jXeBdD+WE9~L{P%vTBETRJ?ANvbX2X@OC>cy9F@TD!`zmnh*gwc)5 zaAQKRA@Tt{&^}B85VK6e+gAn_jmlX-e0h+!VMGv1L2>&nImCSrgfQK#85RLs z34JTEMLIv}N-Pu?fOU@|E{szk$54=?Loq~m1mSlaCj^)vG>Zt;QE@g9b|AnJoH*RWj{Vz^7F`50x_$k)keAX?#*@*x(Y zwAUk=s#Lnl%fu}U{EQV*DT5Oth+TdkkiTO!sYfV}4577Dl?+Ax?@;ZdA*jNhtjB0a z>Nyp3-TjujY-%W4TYeKgD@%k6jrJ`A^u?2vNQ~uD<3a~z6fmy#M%*vRBm*A7p(4{R zSco~MP!&)`=dcml)j|kTsE_310K!pC_9YbVGjiNgMOh3)lT!47(C#e?wmgpNTml3l z;g=(}E~N!3p{p263#mxY7j9-P1edoLObt{SsAd|sMG8?;11nG&YNkR%IE*M4a2MER zDylMMBW5gu+y3P?2tg1;vND=Mx^OVCyDkn(j#rJ(-j`LUkRt3}p!*#dkE4VMuHRlV z*8&j+pMNF=Ux*DGO1RSuxq%WJQ+g$;g|l!-1l(vSy2P`nP+<-RF3=6;h)ALu7(xKC zZsE00SBro^$cMYddAoxfh@AI5sFij zE1+<}hcNX)5*)lnO<-NE67*M4HNV*7Sr-29!c{(~p1F=^~0Xkc>_ zcgTTMn*vs#`;A96l@Frr*jaKYnWZZounONY9iI98d;63 z#0T>Af&+_rLMQl?VV7(&xM(O?RE4G|t3``|@Q5-%sj{GZF_JB9h%4%!kt!(#gI6!v zX+`LeT9CP|Mk}X(u(?w~RrWl$xS+iXw8<6FMJ=EhBg-&fVVbFe6j)#2Oj^ZjFnqG1 z@d@~pCU%yqwk>Xxkgb>37}o*2zv^0?p5ta>Dh`QC{ya|5N}5l~j`jRelHvo8tWJs| zr~_Rtjl)#*G>ky%Ia!HnhLToBHrbIZpAedMIzqGWZ0ayk#HqV=l>Y!wCswJJNMV!g zrj&=+GLjR8K?*E%kX>cVh>ApC8%HrMpE(^9770b((Qtc&c#A_Vl4sox*}=As6b!Dg|s_5S8tg>o1IPdIdR8oPB~_%>jf=2kd;eR9L^byS)@cxT#9d z%73tz-x5K_mwG|K#3H#p@Q-RmyWJ~3lHSbHCZr=fEK2AhT7YK# zAcMZYsbP?iRi4CQs8X?|%tz4%pURX8d0CNnD!t}1&2%nf0M8h=00!<{fqPM_>{U(z zVus_Pgy0a*#vF#?&Jb7t?R5s;mdbGl8%oV7ML^u(rx=Q?DT{fuqAnE1ipW?`h*a4h z@1nG9We`IOu0BgTL8TFVQWu?N&5@i1tZOI+J`kIGKEY0!7EH_>AAo#>Xm>`mvu zR;jsc#8G4kik%=mTjax7WVh{_W~3}pko@%;DCVxx3t+=tSEYmwJx;t5r`-5 zVZftm&+NRHOnI0zQ_-7_vc2CXD(v=V%E-3ujcC_#5!l<{u^X_q76~mvF={Cfg|=rF z{PI!?Xmp6e;gP7daRmfmSeYRFg$k;<`~a)NL;=FKz*d0F;w=H6kRgVeh@q$1hg%(o z=;m03-EyTJErrrFF%pGgv>Qkdj`wnmF!hxQn+7#N55_E_wrWw5$FLbQ@++eP{{Rrc z8C-w?K+AqWi|Y#F!>H^Ok&Mg>_+#Njz6uwZX6Tjx^cGQ4 zh70kTs$PVsr7kIZY{*>zR6tbLVwG&L%) zSqG0;hUcrWVbC8RZGaZzb;v8Bc@l{fj4Zqb7^sa*#F0|2=83E{`!P)!yy;b!| zW;vxM9PjVQFj0{Xj~S&@@Hg}akxjHrg1Kzyhz*e?n8RCQnRu<1>SuH^bbu1uZ)Lp} z#>R2=5xuy$G^`gc5EAT;0Vz#+DzeF17EyI8x&ShS(rLJm7VyJ_-s&L~JxnZti)C^{ z43KtJ4x;!z!Liw66;n3i8yTn=CHpZDa{|!{;R=4a<8p&P{{SrYi{c?=EVCRhFJd;G zkt?7%9?nW>uB48UR|D8hoUgoeRla&{C_X^v~6 zmGud+ftAAs=2$C#s0yQ)6|4&Y63jFe_7f3Rj7x=nSYt=lAwieAWdzz_tBMC;AoZzz z59~zg%-`-95om`|HIq7(S)M}ZqH<6eD#DeI!zdufb`)amwfiqJx5-&z5fz)%N}zm} zYJv?AQgbLmZ(;PsH01Fv42o!u2lKHyVRm4zUrA5uQ#cD|So&=r$kIrITQPpj2mxBW zZUrDScsr?*f)w39B?l0j!16U#T^`r|M9u;ZA`z1_60$<0*CE9h7i=*FT|q2a*=#_Y zBM^?1T#jxO{Xc#aEw1Hx1EvjC<>VAuAXs{WRpNOO8P@~#d_~gZ==Y?5`xM>Em_GwqtX*Pwj|wS5rwr1LI#RV^r%=CmG+*H)@Qp^ z^0uQ*w&j38!+aEo7p8cnE0Eaf$OSa2KmCE*QGFm0kFhkJf-BOyj3)>5fYCaIT{43U zKI|8fm7rZ*M$EZ}!9rMm%|bRqN7>`{i%p;<)XCgE4d7S-u~!}R*u5WwK(tYiT8=@Q zt11MoJUV$9y*|S6$zrT{A(QMW!v=oFp1=Ts4<Ix-P@8o7`1$HMG&|R9fl+0h)zMqrMVUx888XGo2fKlW|BG;Aw0Jxz(uyUb|pcDL( zsre~W`B{_@Yh*@%c`L|ORtG&{i{-nlpCSt^;TGYNpFT_8*X#>${>yQSEZ!;?M%WNu z3)}=W&g*f?Juw%Wqvmb}NC80Pg%xN6V=Y=ZK4>O)no1Hf-QT z#ICUm>SU;6hwNi1-X)+swgBykNsnr11ZC;p>~kucg_)EnFa98tQI!H=Av8u0VVekE zf0qw^gLsZKJKtTKz^@v9$q@+^-{5iwk@s;D{QKRLzuTmo<-?v$TZoQGQlmJnW0S&Cg5e2s8+0(Jh2v) zir9Gzh!*S%iZ`^iH-vH&)ktsW_mNvs0FOX$zcu*w1pr+U0}R<3l_9JX*@r~7YnL!5 zaq1;0n~7Q6KxB}zgjNZRsHd5$B96q16$lUjncX-J8G~w`b;XevfIY9W3<3fvUtl%a zJp4(3Ky#ij(w&8ag+n(r`wwInLqCW<*U*uGeHRR@JB$;q7)e|>e>j7mA{0g;Vm8HV zB617tCl4U%Fd$#E=PjemfY(@ ziG%$dLHK(eL@h#=QpP}2z%Vf%S`H6^@+%r)3{llVy6YDVVi>jDP9d^cCSaCC4@H4> z^%{yUqwt0$l@>(3oRHMdtki^NS1?xQslz_StOFP`44@-N5-$V2OcjcP*c@gDrh(); zS+$>pTY|Lc)#z?2y3Q#uwNq0JegfBTCuTOv=bY_u(ej-$1sk=TPT*Nc2A!283{@en zRy3>D0yn5#AZ0@6CQ1_umx<=WTAc`P5Rt4UF6xmrrj*2=UqrXY6Ux5`Mq!n}*5dX^ z7|-f75bQmv$Ynh3)tXZib86kx>oRC~MAZa7KE6fKEm}B3$Jts<%X?CYgHA;|FX~lY zSha|DIibL7>_nB!nzGu2$y7C%!v28|$xiB@i-!dmWS zOg7m>7JFKX04sLPJvcpxCEwp;Fx9(-w1jC&myxRjedZ;#4`OV_agrag%>hp{OY zPGZz^Q)pMP)pDkWP@d!~pR($@7obZ-C3eCZ*gJ_;>txg*;$)-n(*(6l9jB3QCwoF_ zH?YvSaz;&%1|r?S)hR*AYV`v2&HDo>1!B+`4pFlT6U3JtM(SqbjecBP5|nIIS2Lag z^|??i5iNg&2w}c7-Z?^3!dENsPPTo)7^`j>(=s*aL5n!2c6MFwMb1&xFug=q_D zfch}PjKV5YAE7|la&$+L)Dcpc4z3v< zLG+0ZfI5dbYt{=+l7q4yuxaWEq3D*)pGe@M*U6kv8n=;^BJ|=e z3JbtQ@1VjOiOMx-=%7|=2uW30a1xTWm|?dI<|lJ{mtUjg!~EN z)*x4oZ?MQ3idUIVWm;fx0jrFV(9*`Brs@L*iMl2K0OT+>nPP|*rIP}|CEkZIe-8-6 zWV&Sstnfn@`2Z#HWV^B(rHTtmcQBvpFhecHm~3+hJ0gbz7Rs2AMYY&YvjPC-AuQNr z76jearO;(*f<7Z`K(~ouEz2rYEDWkFnEwEvkCK=w+KWZY3=~}Y4v|ux5rmj~4X7q) z*&Qst_(ecbc|jej*?#iVRWwK8#46yo{dpYeUouBXQ(qvf=;Ny z?idBDzN$Y-M)T2zipJK81l+N;JYuE;jjae89?UBYG2*ZESin_Js>QAny47+TBA6Sx z#0M*U20GG~I!8KeWe3ZEfJkv9VR9qQm|*;bskw|*1DI{69hNj01kdFXvGO#RSl6*T zN^Ph>!t_Bm{Us8Y+LTh3yW~hSqnMD;#NP$ zR5{Ur5Gq>DaU9DtFKrrioVp^oQrOZZomG-Yz`kt zR!l7}Cb7)l-7#Mo zO~N#`JBghnIuUNkNID5ts!;^Vro)Ds`wDRh+sv7*4m+45*fyt{ri8gr0ng-NT1uHD zQiWUqu7MLcfE_x47Fun8L$fViZX)75xpn~!D4jITdd5N`F;zi|Em*qNAHj=z47*Pd zokG?YFDrmLZr5WigMM{}08aukv7{F94PALC^zklJ^px%2DjT3>NS}YOjpTpWv&e2L z@8Jm&fU0bckkL-&(2CsiU{T1cdU+9QwyQ|nqbFq3m7$p!12%~6f5LNu8|T;|i59$m z#8}SC;==A<05=F!9U{XJN-!ePomu|?$e>Y7LA*Z(Jhn?0wPmiVy?a;a0XRo7Qwbe z>k~8VL1!6RYq1WsaEmcRvOQyW@kJ8-xEV?Sh3D8RSH>gv=UAb|BS+yFJ&_Dyr<7fX zGXvRMLWhv4H~=mjYmgG-pjc)`5;z}>u!e=UtHa1rWMf8+L}eH;{{YaE{{X9AfzdM{ zS=d&Aus`HkbF8nh`J$Q4YS!||%^k%GqQ>PY>f~Cvzi3c^B#LYListfZhQ+a~MR_dC z00^emD>i`-Z52OA4sDehtv^Ne}V=C8g&tWC=S60e>hHe4Xz~lQwbm?Fc zU_Oy_q?>0&xI4LkXqc_@_iz)KWuopgkikER%Q>W;8`eyyJ9yuY6v*2 zebMo}C``0+6Dt(dsiR*aDS{$lcEfRNZmpUg!QsprlcOVlxW&kD zX_d9Yi!$45P*w!yU~MB{SfZL7g&aw#qi7Pze_TWSfYb4HBoy z5(t%>U5yo3A=@foVH-y7k!ay6*ft6wxiDiyn41n9z!uEf4Z>?jRw`)WHRY@_&9mVT z26g_vKui+%Qu07HQN(!WR)dhmV~rdx^D~812>?W07GfI^CIVhXKeQcpOYM6at1-&+ za9~2JWkS3#wLgzzD&-R2%o(YOc(Fr$-NS*rP;NP@Ty!-|LwM1NZmR<@zy@%hlGg`7 ztZ&8aM<53j!QHoMg3#M7hG_>|xc0*Y^i4fIjbf=`a-BX*DiW2HwmCvF2+Dkl>ZM?{ z7;7jCpM=WGPHQ3oVA~Ja^4X#V>LF~XU{&O1sdo_S7);UZ072Z~PRcNgqGI0(vz?JV zgyv@m2c#u*rG7&VcL{eZR?7>7Un~mIagUneAN3*M6|5#It!3l4`i7`6b!vrIJZ zX)$=HUBoPF$Z47}hT2{Lq+$sa!CBNhd>B&xNSOn`%#5WvVsT70N3HJTAlNiNQY_K4 zEzxRJX2wG8A7xUZQ9khz!i*~oT)6a|!t@_v+rXmJxF;4(w>BqW7}BhLpH?lAc7x## zBgRECSec8~wpU&-PCGKFl)(t}0kB5CpHxi(J)9d#F-@TjTKjA;PY5jA>V^JDho>LW zK0|vOy2YZ8f85FKRMT|&O5Fiu%6eck;VcB?FHVteXncqs)!xb(%uWJ!Tg*5zTI@h* zE}2d-qBJ6eiK)cLXbKKX#&m>>DD+WkW=(1`U%omr-u{YT;ihsut}vJFqfB zD&v<12o^7q5?j{nj2@2r3_Df>nPh>5x`H;9!b;$CD~)TB0OWpVTCf;lEDTtwd`0%{ zS(>1<+G3VVwT*J;C5UmB(;gOQ5CcL-_(*PW6d0B^{{W;=H${)A2g@fQ>$YFi!hp6& zy%Qg?x2-tCMW;;6F5m6TMuPEyRp?|oKn@-+kU*;^z>l~ML+7l-6(U#Cp=vRvO+-LT zZjqP6APu=U3Z^F`IP9?+!L-yw%W#I#cXxhAkv+hY^8hL1{{YEuYLfka!3^4|>lv1Z z{{U6=j0xN8UL{5|Zq!J0-vV0VzQ>?p&PCHVOrU3$!=^z)>r#>$rfn<|wqDrwTWNME z1W{xg7;nJzf>HdJMQS`|)`+D`rjaGV05htH(0O`F@G%PX>}t!q6Yr3;W5vVJ9c9Ob z%m+JIl%*MC{P$E+}4rZqiaGa4FMn2JB?HDyh*hh?1>K zA4w@NahpD#eU^^%E4N7ML39-==)G`b`p06WAS*}^)w%XidtxYV{v}izZ#;zB;o87- zYg8zumH|#$lMsltqAKZwX5EL*0~zW9*#c@<8IcEyOB{-d@92f)D*M$gMP7--ql#rBSx=QS_~ao2-V5BUJ9G8-fdVhAe99GQ5@1 zqXS`xp##ri#al^&4VnY7iX5ei0A(G)8&%>Ff-t8@+yh|2V@irg!3Q@jvOIvb9>grJ z)L>KvA*6xOxf4=!PbF4>*9gz_7%Wf=xpJUGu}0fFYmg2QU?cJyvf|uWX{ZgLXZt0f zT^K%0g6=ked2vRKeU-iwu;>fZ2gS+be=^oTCSEu(TaU(z_8IXq%%Xc0d70HRjltp3W|@-|^+C3SI%EE<#&t_6bX zU+ytbu$Bk|Tm(>tQC#>#5Hn0)03|JpPuqns;^2e!XcjJfOzKY}s(#%S>T+;1H2SD!aVGKboQX|B*7RC)q1$wp?>=p(OuV>`!uE^< zh~txelOJ%Vp6?gJBfVX6)c%;;n^XS)@_aF17P{Roz7_$M3a7hm4>ax$HD!D}T7U&- z$g8X}VluQp@ZmCd;3HRvM+6YdD856Zaji9;u$ir`%L}LxqUi95Z~=ye*2ipUGP#qY z3Da11zY3sqD}qeC_qrc&xkYX1KKCJ7LzEfB^`<`66w8Bq>K z^GBq=)UaSV=~3NhdnPEAZalG$pNj?3l0yFg%&3BuY}`0tV;1$5TQkCCtQ}G@XL&ko z)V22IpiN9?Y!+ECFb!FY*2iFPil;eMGc1g7bBT*z!mTMzz<JeOv@`n`m;|6Kx5Abf^CKA?U?N)aGa*##~r!JS{&Znc}TV9Pg7Y>1W!mng)7 z-8d>Kzb)H0FL+lD8-}rR@CalD)1u$Mq@Rb!&e41 zwQ!f!`-QkLo=OiTglTo|>-HgVcw#w?(y~d>P%~36mb~qm^DL_>Vvooo#9c_^kfIwf z!3ys8amp=-OVFX@da$6iEx1Vysa)6WYV3-bhxIWnSM_Czi7WKGLn?FXpC!m=3u;^| zlB|PPkO*PI5O^DHK~{og67B(ID<2TEBTs~4ssObqqLjr}Vy-+A;*z|HXlsT>2q?Bk zXA49Fake2)wZ)ARyFj&#vC>y=Uj0ts5(qPDC#S$S|pyHcYWYC3lEN6kKM0&dUy_iDVvjnb5ZVS>5 zqz>?@)QC5(V2c-VIv0#esc5>4Y&}46eHlo-?%?=Pr(<#XDIWt@egK3gAwd#fG;TBa zZT2NXh|mGwu~}?7?=@3xMdevn<+66=*t0kq{7gg@mps((S*K?07~M?h8Fg2;C`u=qX&isC znEaZOoFVL*h{m189AS(vyB6@>qyVV6E^w-1Du7r3niykug0{8lLg>&semoc<)FiZx zE3D1nI2Ta}OMgOT9o@$PmyN^=W0H5qGUqu9uAhER>#dAM7;U4~K>qnfX= zLpR$v0obkvVFI<^CV-<*O^1qwK&>5v8<9;<_R$$IaV91B*>M@XK{+mUSY-fd392J09;7iBSvJNaAxWOYtnqiS&^mHT z1Rdrs?gVDSRtbpR9Ikvs0PO1#n&a7&@7RZBVabt5^)(Bi@U|cbla2|V_tAzpw@cZa zH94_hhj?+b{Gu{A1@kOO#cop4A-IE9`|=h^aypp+GjM$$B_{`nJs9fpWpEyzMku-; z_Qr|IBA=@;{{SZD-oQpqc$$|_BH3tHLI%bFd@vN3CTBU{!u7Og(z0aHzDDgGdY&>lU%9 ztX^aL>2W#}EKubEWV+(B{t1MPq4C+%}6<%DT{e*QOIVy|+{`n(N&~IJj zn9@$j4Ig5)bEfLsOG5Hf!M)HjzC+Q#6|9fog45vq{>mjp>Hh$M3@=57Y>2Gv9WxuQ z+vSdh5v6zg5mkTD0jdWDmW&#C0xBL50=;r2(_Lm^8nyobuqGJGM7f21W%w0}DH6zE zR$kPtu?2fP+DiILr8QPDGA&2K8e(WXjX)~7Q@fc$IKkP#Bebz0ip0rX zd}4MOya+Hr)P?1UEmkoTG!|KyEOd*#pn(OCLJhTuK?SlaHpJ>e;kkIkaqP~BJeJ7a z+W0XWmS$h!Lqq@;R!p!NHJBOhW1b6}u?%H4(YaYzHu5lz(uA^C{Rkn6BrYHK82^Q2x?V=2RZl;OhLc@IO3Wp(v2N@-3?yk0GnCGUbA zR8mR*0IJ3wFNy)JFR!6ID>Lx~Mt)FDKRNF_lQog_LxRvPxCc zYZI8nG`m&gVi5~P@1T{dfUrC#kr+N_j_y&C6#a~_wP24n-9UGUmrm<~-66=bK^Zp1 zl?=`ueE~Sc)DcT*boo-eW=XDXLga>#96w_kQZn#QQcN?pdaRZxuLA1TUyVsdIwsO^0PTwg8_p{5 zjkw(1gAQgxz7K>IHunKcFWQv=17q}zTqGC+m<}FQ84f+^Jhm8K?3rP9K0?=>DA8!Q z@dD*sC&D!fJqpoCXw#On6chS$_cD74ZRYKTJY>{R)6v<`L#b46n8ENm&N5p`RX;uC zy8zhk+1N#o!-cx>5n2V3C`T`mQ1$I0R#FS8K#9tguk18SHDJ3OmB74}`vPiRF%GIx zrGISF7~EzkrUEmdp~8*iU`B}WU^8w7xK9Y>n=It6VP~C-!DcA9_bWuIpVmW>Yid{V zmK2^wlpz=NA*5`=H$@$U1WJLHt*L`m25yv_4z*H{thUx-Hi!!HLordekyhfi6AY68 zxhRq}fr(32;Cn$qx-lvsv_)qOQ$4)JadaU!OGhFO!P3+a18uAdlo-ViL?vW!`2+&> z2B6H-;Z~OIAwXc%B`iXFu8n+<|E$sDQ z7`7_bS?Chpxx%4*CPo(SRoRE8U4t&-Rg$*=UI&5}9XVhfj;sC*h^SR1-9c3vj~Yd~ zT0pf~B|c3+p@KoVYDj0JbA?8Kv?AT@i zKj=!zz9rS;$~k~MI~J820N@aJ12SDdv-L|QKPvTDaEORmg)U`!v7q7nqEL9VQpHq( ztjbr|N;se7CHzVGC1izUS8Q_Lz?}e=t&?y2L2MAoPh>jh$*HqJf5^Gb(lVb!J2k9z zZGFwg8i9idLZEK4_NM;;C-(WlM>m9*!x(eDQFI&&Av<2q-aY|U5SVoUZeeoB}oKUxe@k$-nO4JY$eo&0bTwP zJRE^*Vf!hdD2dtwgeLJ*g0Q)9flJ>R!8_luaqz%LR;K}6CTfFnas7-Vy{;R79EVsf zfUQC}kX9iXtg^ui7F`r}66S#B+#!WB>YW$*s94Ly+eL_@lFEA42 z3VQY%Md;+Qtu!3|qn5WgKz~Y`5{ec9ia90O%+HfBLK?KEvX~iRt1nRFuH>9A*NOaiUdQ zC9;cQW>+Z7Gb>%mbVer{MIaVhoF!ijyt`%>F6B5>wlM{`c%_jo(E_U~K=83@y?%QG zR^|pAt3IWVByfF#SkLnjL%oTanhxR^$;ovGrElwSkb|G@7xM655t#&U`ha_kMHiG_ zA(UM?ibCLu+^YvKdnQRp$^mx;=H$#aoeJRF6^}fUnd*NqcA!M234sm(&JyWmFK3WD z1=S<7{QZIzr0g+(T-nZJSVBv0u-4ce{yC1X%aFHq6$`rm073F)^`r~xSD@^yMa4SS z0uD2v;uqYZe-(^8Xr;z+@(85`RJ6X#m3p8WM9AgFV=6UrbU^|rCeC&_y@mqAuy5l~ z?5d(xnG0!YUjhwF3sxycln!e6$$`>!gy91*41ylyTw`w*A!DXcgUQGZ&t>bB6dx`;dGH__X4HK7v zgs&yfm|SJDy;;W*=mB^36uWb3^Dv#XXFu=|@$cG+jdDyQR#weH<7~|s;U-S-c3jH6 z6^kmn2OFGpEwWXQ&?%OpDO(U?B>~mMkBpS&squ?^RTPYUQ?U7p^vxSP9R{RYOMD+u z!icsNdG;5qh2HJZLKceW$H_nuTirLW%v~l;T)MoqKmv1R{qY;jkQ)`qQ0Be^xr5S7 zwUODNe|G99(gCgj`$Zfw788)-!AetBmX($9U76q$gb!FL2#fxXFczNdR+{uexn+A! ze{hgkE#JTLbdIFd%R|cSdqrfTnH%~;W~|}aABV7J(|io_r(yix>7L zG*dbaL_`G*SJEOXjX^7)q*tn+)Gkt1u>!$$(3DCT*VL7{Rh_Bx+l7#>7orOQd-eld z07t&%5EPd1WeH6{`xF~sah~KL`fg+~(SOx5Si?A*E3g56#31|qy!Z{XY)js51pw6q~ z8y`6u@wY?qo`|LEEHAvMSv=0SB9$r_(Al3Ii&8neYsMk+i@&@K3N8xh7cW@j29L0( zOqA1{XEyeHC7`&r$Ai(9>w3i88mH9iSX5>gCK^x;5o|U~C~+&8$?s4+txBcn;nd${ z#bI=?u9qS97O(+LRyFK#ZCaNA3q&5llfc8%89}YehB^#an}97;wq^*uc?{z+fY0>L zsirf*cE9W)3*U59!}j4p`r*LLd;}E+>NqTwjAuH4O{J zxMhy$k7}voP>ZOAg%Bgo8Xy#)hx|_;QQ|MlvRnr+n;e_%3SkAC zPRDqaWyQxWDrGlIy0carB9Kfh7+^lbk#dDVyB+vLaT?|oAPuCsP4t)qyc|`mQ?XK0 z=!s%=Bg*gsf6C;;#8j^cl(D+XUn?ntWD9LE^&;?2ei2)a8qo&iz@!2cj$AMeQY>1; zr%c-%zw7Y2fFye%Kl%*7UXaDIvkK4x{uAZF1Xl3_!30^4U%*|EN%eyoz zr3=?VX5!6Ch174m(RsvJSj+uQHCIFcFD3rVJ>wN&8%_cQ!>g3OaE;)S28Im?wc=y% z)Eq`IV4%U6PI7JF{BHs(2MpR$3XGVT zIaD?r$FU`b(LJgr-AUvlnT;jaB1E9J!y;EJ*Az^~57%a)OKKOVYKvULg)2it^eJS* z8~~`mI0qSl+_2CK*W`Ar7mgw0u`1Y8qu~tUc>PZdk+JJbW*=lC!u_{-A|_y##U3ftJe62% zijzoNYVROR0>d&zkCqoX+G6A8k2LVdku0o>`rZuY3lL@&SwMju1-h*v(&s1OrORdp z_%yGa%*pOb!L}nPgs$PEPi68L75b^aA!{7!Xn;|bb7oF)pkS7zK~;SV5sn}=kEgL) zyOym(@OHx+{bI-mLCANO(MgWfxs~u(P`twsa>HnV=h;9)j0&tf5rmOu@%(;70`YU$ z2iW1cQLN{qj8ZHqy{18KtvIdwTpqT*^Mr(UYO3!HXnbHJYjJH-(gh@}#ldHy;nu2Q z5Ls|O1i-eg+EEx1Ry&py+gG+_ja)A)CI~+aq^@;)E*;OY*yqM!l=(oa{zZkkivy)G zLG7fZo*>{ws{){$Wn2Xuk)D1C^d(AtOkHp6?a9(wFEHrIenNQRSW|8~_B6-03Eq%$ zg0@n)uMz6B)q1EiVh~Y;Zza3Et7s;v4{k0ETN*lD86{SZpn?m)f`!+n6Hv{t<@hv& z?lhCXnb*Da9Z-DUMq~P z@IsK_{*ynmwhl!bc)=-B7?`5=c>{CeO`NY|ic-e-E?<#lfL)5Xiqe+5pcg8ohpVdo zCRNFrfynwk!X3|rZ}9sS0HgZcE^Fjdmqmekz7V1p6k%s!8e6mNwiA|xRcOHhn`SpQ zD+`1Zrb0lY7*2gB(y%#5;K2x~5sTV;Ux(~kup9)vZNTu{51S!Y0eNf}w;I-!lz#Ru z;GndQDwA1-UPdOzl7W7fG3Lr9cxhr_ge9skSe)7`rUSSo(c}_p_O{JLv&g`$bS0?V zX0fX|00W*^vBm!Y1X9FaMw3~?QHf+5#8GXNK9rl4kCt3Ts~(z);u^lD6aLixXF4zV2|jPx;| zON4D6pdhVN&OS)&7Ny?`1kU@*Cy}8Ek(1i+5}o4vPS5i%(+Y+hzFaS@aL|j_Y6e-+ z?b2kZ(B7b}zfZ^&oUe0xf+4jyoq*W(S{-G+&%rBZ+$n&WSTypUACAGjvB-I6M1?pp z5*dB`ft%2TLSQwL zp0movAl(yoQ18^HNCI@b$WKUBP^qV9gFTM4_p#AIl8mffS}$8~=Wt7ov3*u_Mbkv- zVzF@fFv26PD!(C(&I{yBi>8TJ!fN7#`40vf5LhQp!E&cIYY5UqZ)#|;+rbfNE5|j& z%A~^b#?EKBSLaKf@A(lJ5mB-|95RKcw{{u)C1aR2CcCqL--7M+b{`oU1>H^CGbKZ! zH%>6qnuTze-5(HCPNAu?UBX6}t7nsI|7kD(M zl;?baaMU^v3~EBk84dTQeBjDfNR9*>Bj@l1mE}1y{sp3-#j~MRt{K@HjB0 zEv1jPLt}Yv{{UbNxXaVX)!;DFf0ei^OLnmHN3_L;GFlRXG$~iM;Ek570BIfeF^Pf* znv3eYEubc}G`Ib8i1y6lW(cW#;wWEjSJm~6t2b*!2>gL$5D}M! zkrg6suaD^%^tlId*}AS0X;TN9D*ph|_Mx(%VfP>MCYjSHWc-9m*-%((SK%Mj8Fg^M zI*1bg0Ki0nN;WL%@?54IBiK1+z+goe(`vvKifE7`6r*#NMrA)P9kCxcJ8G zk0E1-QaS03chL4IG87nNeOC;yDt72V`YHl#91GYHxOBn9l7~rmPsD2bnQWp*0DXoS zIboB+?jx`QjZeBhS`4Hwf5&Unm$C8 z-S&iWh#yqmCY4x8K?5%gdf^8*#R6vD0s>T{JnppR%bU~d&)B#H%5hVnx9r6}77q%T z3xr2cmASoeheFU@u6N*WSdn^N_qZF;8$OJ-;I9W}P)CTU$!}rMjOZ{pI-(1lX=PZl zl*+!S8+wp#h}yjv8Feq3nJZ1k!*j_Yk>tD0)O>vqJkr6TkEkcjYIP~#asYUf5L*GV zy2daj>6ShD9>ZNLs}>ju%tYK*sKOUk8pZPPvjtN)GBiDk#@okvNY%T52360gcG*f8 zmZNUrCxBI31FDW>HCa|HG_fS3LQQBP_YZHh55U|xarEwArfyQp6=`4&Ap_nKW!I>O zWiew_H>C)Y^Qm9oU~>p%N>70SN`Gdl;vwF8EjKQ*%=cso7>AJ)g?*J+EW*`-Fblim zLmXsTl%5WlVF@XbtrF;Xg#A<@VPBUiAQ|l?{*qMS3>@$7F$towI^(LxJyBL3-|&hT zI*LKaosj$d9EH&Of<)pCg*>5OxkHw{a|}qvK^?T@T!NX3XzVE0tziIr8@>l(aNJ$6 z4f4P4gguEcI{Nhimdya8{lIk_RU;kjZF>Tcr9Tk*2IakM9s>$B2rBYXbG7Qk4Z`Gh z5@!yeE4G)cSRJbrxqq%7osJmkZdu#XyddFF6R7YBqQhzwR;i>2)Mi>`4%APPfNSgW zHen6sA!=}##gUH%_rVCjz_vI%t&4<)WCj*?E()m^*y254wQN$K5+IRU0mussxn4rb zI}azV(DEtm<97Z{Qea%u;mlThlQ)E2>c~OlKlvL|W+$^l2o4Miv~w`b7%{4p!Lk@3 zQi30yywxE!9aP~rj44$DzM#Ef?^=~BGUVWU09>(08FhzKIHPJlKt_BCb%yCXFwT~N zh_x1`SX8N$s4i6U<3%j{+-Cg3p~_hKuiRO*quEnd_(cWZ2~#z>&DdtC7rG))HrnXX{Z?PGhs@+mP4%9 zExuSrqX#ty`$Q9yS!XAp^d_2A_SpjGCWLfxBX6KnL*5nL4Q>c`V5EqV!bH2(nZ z0FqET6z;PNpeZf>0t@&OCJSALRa$K^V}0=m&Y3Nb3kfj>$cFLur%}O@YS6CeJNRHB z(6y=tg~ZD)?wej9HkjY~+m8HX!*In$K_D-?0AVHB{RqskU>kWq1aK}zfv9-Ih~8@@ z39unq2O?8}b%vW!dt%BrLuZhvCeV9}#S#%$Nyb#bNyb}UJden!Aa{hoJ&Nrfo8)@%m}L{i zbg9o+SWdqaWLmT_u_clSVOWA0D8WK72~>n^EK9Vzg%%Yy^<5>D?q=Y9dmP#&GRsRA zP)e8DX!H?*mZ|%FAXMLU_AbC;4`8h+Cn3Oy28^gVsrf6!;u8*~Adz&zD$A|!Hga9j zGZKjWBbHlfn?jyHShn3&b)_Kr0aRgrX{Xhee5+ho*0L=pU>Cn-0nHwcn)W;TVnzl- zduwXFVatmlMQkpKN*T59yL=+iiMB{>rV46h{GL6~_Vl(d{@h2M9##mb#FhI)--uL1 z@xe}%Vk*D|rSh4G8QiS@0N)t@03_qOYF{4?_LTZ5LFYVNzlfq0PE zQAjL13g;jslT0W(`Q#RvJ8Iaz!j#B5v3NTbR@D&$vvpnlhe@3%@EazKsprU6S8Tc* zhjaiLBV!_-$VywTFM;*}6(Y=85Q3wYU&5P*z?fE_W$M)w_CL0IVdo7vxcG;N@)cGl zT*o;;uOG7aCUCijkNz^*vD_l(>r7h9k;c0MZ(XB5^JIE;IT#;rCk6h^c_E!)g21*~ zR(Ug)hRcHr464+&mXgAteTK!L;5P0xY7&_G9!HGp1c!eH6$k`&4fRoInJ}@|7zQjA zF#zpwjO7=AErI(N)XKuVuug0|>;?*0R1y6XX=DEYz3?Ecfd>{s9s<_oWERYWGu_1OhRO!FYhNyHshdo{TFahiti7og5MQz$84Ye&Z{!v5`dZk>XVMWaD}XD`8_A->@Rou- z3Wrb?1a5B^qRP&jU{6qJzvD-2xyc^Qt>)&XY2MXJtKkYz_K>G@TCbAV=M)R4M~SM0-zxgoQqh_Kjt7LN-}8tMG={w4UO4;+ zl06%{f3Q1+Nn3=Z%}ZV04jbX(>H^THmTU$+Bc1o!`y*NIBHC`J!O@7|1C}UVf!ip3 z^CtCl&jbOzEnz;8_7iIr92^6Xtq@Qp+35`auqe-7yDHM@1Qejq!7D%T{{SZt+1;ul z$)m#%mjJ^`qxCa!L;DJn_I^dGm+(}0o%fFl5=U8C8j-4i*f%ONO8)?+2n%exey%BW zRQoG#;ejQllL{P>6OAbFQj+)Cl}f^p%2Xadr{pr0$r$DwjX7u<-;(eERgL7m80s8@ zm$>j{@Ca-f{{Sx_RWnW7*f0vTaB%+s$o7koY2_X(7j-5~aho1|JWEa4OhuE#MvNDEWY(TQ<6a>pqBH+nU9_BOONY-Ng??`OYJZ9uVUyE*PwOBI;MZ8FRhbtUyr`81SeU7vq` z#9dV#+3d6@76fECgIbu=l@O{EgcF@=Ap+yqZ}cp@3b_fSNKV{~%1=BoRK0i=ewXB% zGDLnKatEBYk9YCgDIa9Tz()NbrooZdES*>t+de>~ zkU`OQL$?uR@8&kObC+Uu0M%u)`ykl@T9>w3P}E;+nK)zF$9W+!OpYN`S*{k`7RA8> zOFkMSy0W}GLiF(i+%^7_6{*mc9{K+O$h)(JMPrkBK?zA^FQY*W!G~PlQ=tV1RVL@y zEx^l8bZx2+ULf=A;WsmH@`#G-QaWwbES2!ntQ#GudIkCy1JI38Q&x{Qbtri;6vYa6 zq$P3MQ3`jI!M+=i&0ccGsH>>Zz4FFweF+lZ!n2J92(PqHR;GA>w=@)K$KT{{St@$TB#$*X{^mo9n1` z$?!!ZwG35!5dxFqlLSjma9`F^6xMA)7DMPp z7N-V$TiImTjD!7w123#7G5AJSEO{HR)VQy6@t4U;5R84^L3ntvY4n?ee45uy#I@=G z$~M6AAMa!UiUMC+m%6Df8yE&ITCWm4?TaWh8CztdqAcOiW560m)JeQ;uoQcx$sPDQ zco#TNjf8)iFnnb~ysNbX2VnJ#m%#gfOy|=$aj% zB*@!h7eO!lBu--a79XFqWy})8qJ~>kz|QWhdMz1qV?l^&2DL|3Zp3~WiZl8*1gLu1 z8ujE;9Q3JMKnW#nrpoh965N`a{!=wnngkc;GQ+pI?9~MUh}$PocC4>^or&%YQyDD0(9u zh%%j-jM&JFG?CFC_e+LQLlD?4zG2yA>@#t80joCw4WjC|^bU{;{!pt*of6Uf>^1lg zR-ii>_1nWiM6q4kCFDM1PNik_WSk%|;sVxjRu~iJQihi4X`*2hMNh{U0JA$&fp=FV zx_XNRTiMeVZc_xLMYt8WRa_wB5&r;nATlU_p5={MqmsoIykgV*Lr{yp-@H#*d?wh3 z)Z~>(&7O~<@zd-f3sqopHmn`;NIlrvaFi)(sy%&B;gcI0nnX+t&$EieFe^0icFt~G zTxyZii}LTKoxU+`S)55*JJP2Bdt|h)}r=Ymi5Zefaxoy1^_=eay-{LeFz_IAao1320nLAZC4E!*y^zh zg29b$gk?tYah@@i0+E9#hH2HD&6)E;R%MZZIrQuUtaE1SGsvTsTaBwf)-VRtQJ$zH z+VM0I=U1?*+chY-hOx;Cy8_$%sHAuH0_3jVyhMiu-mvY=WQvp(&CM|bN3zT*&}JWo z1C!7%PzNPNJ#F)B4v{S5akUN6E7lweDwu>FDT+X|lMzA6Vh&-INeg!^kRVyKUSZot zUdV$i7=b_#VTcplHIRU^*U5zh4tR;32)`~6yaLivBN!OGmN6|l0u&t|bH50RkqaR8 zBc!nfH5ex6Ysdg5SaPya4H4S$5h-?PF|f%af& z(Nn89!2@9J1?RwUhj}4zbofe1swIz%R(N+BlXZiF7X{(-8JPxAW(KehT)JI8ctCX- z0YZnz{YPucsB$3AG+KH$f@IQCwiUcvq>S8v*321rlf!e`;!kdCYckz}sY=LsPSp!C zS4fW1%&$ck)xayALSeL|o9-u44|Hk<*llGhz(|uD)p<#I!3O-@3L8OR#I)xfW@qF|>w7>K4Rdj!}jtqTNx(1pQ+Stzchepw64 zC4Mnb3^co~u2ZPAqzn)ES=%#fD>2s_5+$-s+?du2sW8ND{`g{sH4X6s{{WK~RcX`I zj{bRoYcZHkncYrsnZKKbih3R}${brW`XrQprE3}BoyJ|0DlRT0bdCY~34Az_ehfVk z;xf%DXfU3xOA+BMIN3j<5YQ;QYd#_*5}s51jF85lab>tzMA@P{Kfr^QZJDqz05a&2 z(oI=)d7DiVwVVk$y`ndkyI%g0(FjoXIaKe@@`q=B0oZaDg32v8pGM(V!yfj9)Ce^t z%4|dZLeJ`18&2k=4}F~H$Ruylo?0Jt5UJlR!D;^hNY&w>D;_CDP*XmDXJMVt;%Klv zgu9~p)4#(Vk72p|F9zWj7$;N?Sq_vVV0{m;k&H$)evULdbGMs`T?j77P$kluD=Z}m z8%>UZ>?ml%%Us8^D#o3>cq4*l5W<>q>S&s6&1wGtVi!=s%-0j!FqpdSm4{CNfeU=7 zUQzVyOIF{kZf4C&aKqNN-+v17U)p^eq3T+H0_>5FTCYAf^ zsDaVdG&wHRy6XbA@-4^Ffps|o^oLA!CDcCN{UFUUF@x#;WZgi#X7N73H-=zg_&`+w z)vet*pn@n^rLcGD12M)L8ZFT|GDf7dX8!`b zJkao-Owly&60!I6E)Z#EuP;t)rPGIz25GG`Lio$FJ766=9H?!W7lLi~AdHVBZ&jNP zqO7DNOumDRwaZ8ss(o0E<(G{XIzda6ak_mw8@o3CV`dFciMb(gjzm#&qPcItL`$)W zvO7f#W1$jhE}4NqCUx*UWnPI@cM-&3gj@^$phQJrK1!O!Kg8T^RVlp{mno}g)MSBO ze26$QkfG+0d=+<`q#+*C#SK-}u4<7vMNmju2Im zUj|jWtSV`QwRi`iS=*F?9f3ykZ?NRPAgNrj8q@f76TTHMTw@FuF4 ztZAl3WHyqplC<4%4N_`1ZJ?3jf;{0vXfqI~=r>-SLp|5C&qt*#y98pDeeW2|dnnxh z0L7Gu-%W6~lsCYI2e=1rqNY`eUNF@=9P2YPFx8hV0`RD7*Pq%^T5`3=R+G3g6k-=I z;FZ6}k~~paf4o-h$@VAf>*&jCVVaM2H>$1Q#saaK-f#`PL5cu#> ztfdi9d{FWrGfmPkA|NaKE)RAXlO*i#3k^|&*dVz#NN^?rLONF&T9R>k#FC;#3iL`? zD*?3NFE+`hE28Ou)A$@BM8id~he}~;EeP>LyOHeTw<;*LR<~Kx_vAvrU8T~URKG9~ zaf_XK2x$Clr|I=`4hn~e*9^;taBRN5JeB;02{D!upev@Xh|&gv378p5ppkbme6{e@3>D;~*ng!BeUPsY z!K|}8r&~=2k>VR=JGeyD6?W&)Z4FZkn9THEt86V*wU~&#M%8mLF33Dn)n>5R^Ngk) zFqIyO$gm^7AlPPd%K=zAlxppD_8--J-YN3J1(5?M(7>%`=-`_^fubRW6Gu7KlJBj? zUIxtp5xQ!WYLV&F1V9c6Ql_i=M3d4kCpxU6SyrW;CXDYGTObi_Nw3^273o!6>GBiZ zv~?h!WyHD$6^5q*yB@G53p+zmuckJhK3fDFbmMlKhf$RdbI(wg`|(|TFb3UuOyoIS zwME{@W%?!n_4KWhdi9Mt2?>5$>Jb5>d4)_2ZYk}#Nu!kqGIMyZ2*m0_#nqUm7ETyV zsLXW2>8omUQDP1^_;8kJgmxvN{Q_S^l3ttv7lSiXK(QTqieX50+DdL)@lU!PE7A-2 zu%gTy61`&$MpZ?S%A^bIAHkr8vlV7J>ih9Cg%$@u!bOChSx4j@f|ul+8w|spwy`P6 z@PZOKiadqEO7v46Rda92d-otQnOl7clDXY}mEKNSSICzJ7jrS~iWKhvj z%Y)A&4nq}fmAz@)oomu9m0yxc`s5cSpW$GRc>a%3p*aR()vS$*^k6>@1!Cu6NQ)UN zx5_XtMkzCXOKQM49EpRIRiR)5L8zsmv8GS?yd=0f*ln8X`oOr$k$u;)g)j$O80P-~ zC5_B2k59%tN{a#5U`fQl#}dH;I_g9!zBRi)ySPHYln#qMeMY%A)%am6a3)(&8ZdXY z)bj+rH8TxP$_ZH@_it<+HAqj=XXpT0_FN;2n_jnah9WHpNs>SPOrGFpbmLZz*K4)~$i;LX&5! zq_o2#>6XlT?n2Q{qOPH??Zijb9~u2M9yP^A4oCj7;C4_5)BNiR{hN@OKE`^^$~gRx zpkPs}`*Xg+GD{QGfh8r7c{{XZUe-I_CKMtgPs3=NI8YwY;?%IWfARG;aSDM7M z6x&>5;Rh~UskoSNm>1T%(x7Q28QClH*y%PD782$>VrBB(kaX1y21B0mOW8NlEa(-c zO{__Up(t;H6|G_~z%9s0G4+(Wig&$u@}@~_JOgVYjyElXLN|PJiA3!OLrW~KPrr?S zU4yp~wgBjCz;Z?blFEQe7^cL);&8&iJ!L=Ufm}=jj=hUJO=A#VFMGkS4nC$3mP$@j zv9(5|v4+@OYr@2W?r7lv4pgn&_>2&zc-u(hBOpPo=Y6FvK(rZmD@ww)#umvQ1rD+) z{(Z&S6>Rm($m(wPPxkyrUid9TBf>dW_M?Klhc2;jHV#P=!tk(UD>m%X2gRg*TxPRN zCG?8QODA0TnEFAq9b|hqceM&Gl(s|Z)53F=E(J!prQ#$!t2HTc2zF*N=X6D~KqqZ> zgywQes75+QiLsEGdpaItT$Yuj20kK+SVF4gzB?Ey=n|2QuhwBj2ABC^8S@AP5B2=v z697=va1S)t^_a!lz_(tb2t}-ldPkX`IoL0JgqY0~W1+=WkcWgl^=OA8&2;MRjFGDo zMRdy6(Q^Y<8A9NFrI_G;BHaF@vx|eVNlVr*k*zJ{r8#>p%!~(!M4DYY zGxW|5d+C{J?5G85Nv%0~EJhpaztH4+nh-3o0rzZ73>oj(@L~n8Rn&EVIz-jvHiKRZ zExMqh=eXfLn9%7EXne9G1f^6K+5{HPx@hc;FcGZFp3wZ5G|>Q7P1r+W-w5OUf*SUj zThKi*0EwI|xfyViEYF()?cb(nYnB+<wPhrMkb~I064`c%UgU9Nhsribd9LqK{eP@xIe^T`-cfoq#3WHO28Dt zO|GuficR!|lfw(vfO-D_fea7o!hO6@BRYlIzNn~m%WUECQie+H;3(}tA}2%%;KmDpGp zu!gt=fX>@U_)z*3qgab#ICR{t2*mS-z~MRe3Wp8Cd8p$M&4#cYavTGz=Ykmn&ByYM zokp#@YG4eUThdW7zPupP!>D_?r~})iHo7op%C6;gR7Z1mq_e`|*<6wl!tn-IQh%_v z(o5MpYFEDLapG9y-g^ugo59b1y-a5bvwCkN6B5v^@A@X#2S(r~w9Eeh=e)s2^BFTO z--BiYx7TP@n=1a+2fmx*n;kuliydxek2DB#Lr#W6@Gu5h9-)XD18W`_0nphLXK{EM zg$#U9ffrCpL-AdZL*prhg6&MwILlx>fvIIxVO7T7{{X^m7S}s|l(-x1nP|!4HdBPH>>-CG>gs6B- zQJVJ|-NmO8j}RxNL$8s7krCVqlBo*X0|R}e0lHfOyAI90Y7~w{I6xLpW_Gf^3kj>v zE!uw&t&ZzfvvSfmFjb|w$*YIC(3-7qb2|}=Ajm?`0l;UgXY3pFX(&VH;5Xl84(GKP zCQ-0({{UV;py~_&yry=#-gJ_7*P@JS~~-5+Jy>@6y1!U zTH<$LMU)LyOQq!8dHM0pu0euG!wG77sKe%(cX6yKq!R`%0pmSQLhsDY8mOd{2nSxc z2)^h(lRw{tsq*l6!8k`qdElh)pd$seXawWrD{L5)gC~W;^2samY4^EttV8*{m&f;8*U> zsEA5uW^hy+ptc7F*&lwvOp(Q1Rgg@uj(Cj&DxJJxwYO72qn>h$-s9@-_&JuaJoLA$ zb>ty}qa#)fVFk6Rd{{W=1=QCBCz}||A>W+06kGi=)5X%Q-JSDnqa;0}pguqJ( z{qGLN1|*uqszdUl&Bt=o}c2+fBdK*_BBzlxIcsj%q9H5KK zJVxp~)-+v)FM0}7DuzZtMI)KX0RdU_t;>EQrtu@wTL){ImQGnFpEb6$uS)GDv9rXr^h zx4{dRxh%_qTsB77Bsxahw}dz|Ul0qxqeu&5pKpK6yI#)P3_uZ>WO?bq@h$bm1HXhJ z;~TsfgYsA{x8?CT`3P`<*f?9yl8)L`fVi`32t|dbH9Lg`-GLOqxpKz{3CM3M5i~o; z5Be?!r6z(uM2GD`YkhU&iKS>GO|;L%CN)JwZT|qG8Pb5A4j06H_h5Ql$HY*1$c!{4 zmnn!aVf5AlA4P$2ZS(d!1|Uj$z0rxeN6j`vMjwwng=oeN$9$^cai?0nrzH342E6HZ7 z7JfX7+9}&5$-o-(La44#mSTk-1DWcDp;C+g03b6ukJovpS_xrFOLbQ?j_{hMl6r4o z?d)M@5_qYBOt#TFQ{M3N;_#8^Jx0fsRUKeq#D2vJURng~37IwZZX04QRh0|eJwG5i zhX*NWdz*qKcKg1^v99(yT2Pp8n`HW$uNXcV*%c9aE(*hnEbC$eSF%vO(|AC)htMm4 z`0 z)x6oUC`#$u&uYkkINe`i!cC!XWHV?4P0Y5KPCEhW7^x})p&?or+d8rKNYA86Qw9xt za`DXCi_2P31(e_a0Kl5WI=G^yO;96`ZlLCY%u@u4C@ur`;VaL)mj!ih6DBNJHkd46 z9}ssQnraRVPfq%)4a`}hA*TiWB@{LTO@pB_LZA6AK_dg$=G8;BDa_okWs!CA5MhxR zrjz0#;sT0ocIgfWql?m`uVXD>8ghza(xU?owVh<*G*&>xcS@!cX4ryreUj#{kui0C zCCzW<@04S|Afx~;28d8xn6a8;B>d?I9E3`irW>3 zF;o5yET<=7dA7~iyB!xQCZ$x3Q1nX{KC?#san2}7kjjtmH8NHtbds$BEODP-z>YjQ z7g68fGeYr2kY}@iW<+flS-u;7lJLcbOt$8rWO(V{M%SsJHC+tKL+~YhoXl}4csxq) zy%Rgx8Nd+QVzu2>LCO6IX3YvEvyzV__!6S>J98JNs#0zStGJIRN;-lcitX*4ud;#) zA-Tn@(hxzHQE8BsrzCbPu8KN-!e{LZVjo$=1A-NH*eEUHPn0&Pxn2!-fu5Jx{sE)< z9F`ekps{-NSi~@^bWzO@5+HRLJVt?fBl62&-v&qp2T-V?=W7WSTT@_cPk2$ST80U= zrnA{YsTPHm3fN#6D>zx*{b15^Lr$qPa6=5c2oNz+P(-M5-r#;{LZMxFL9vRcb2o(A zXM02AA8oSqP)fZYr(-qL#s2v+0#mS;>D+?61)rK2J?qeWQIgq3u0E9pQtm1Xyb-mu#ZrSh>bgbNl+K-k<3D3GA#k6aIFpz{^yV2dKSk*~F@ zm9`F(*YuSO#?!za2|+pmPF@5HPYvn^1W@roM?hP(vKLwc0+?Wb99gtD{1UaHSnYMX zbi~eGQR{AmIsv0sP_HgwyK2W5PM)Aw6-`31;^qgIux^=CH3k7-P4tF_B;6*h4ei9i zUio;Z)Rq>4V0c$v#2fhx-dEZhiC|QQDdT~tDuI!&czoiA*BUNI2T;J@?;^+A&{ej^ z_A>L-OD?)OUcGa1*s|+-M^8~%^l+_K^f3-MdZX0bV-O#C91%^2`IVPi2s)!J&OsW) zfainuH1yiB9-pEDMnD93{{XW&fObN^q>P^LTGQ(AMTb?khE-_n&Q5V)svqeiK!%nC zjc9IdME6PG?osBhX404Tbg^Yn>?a%J;S(7qCQg;{*<>N>92D0iq4is{2=JzeNhZNM z-+AT{2{_&eH1|jOY4Qb)X zhs_i7_IVx<;UjuDRRN4m<+;<1?dcP(3N4rYt(%Y$c|MO~(9|}KBHS<3X-dtG%^ks0 zFRe=d0JN38JEfowJP8U3Y4!&rXfQ)l1UeTxy|JOj=cj->(wMBXIBhREc{0}?%Z{>_ zEm9~b1Zxr%&e1t6>#;UVqsuL5XRl2kfh>P2IY3B?!G9v@a$p)9WF&y-NglDSGrtwg-5YqE5t!Gz2}2!S0H$ z8x2J(LN)eN4sfu3!V!-Vm98o=5=LiLzfxKeOAR#0mJ zCdwHbxM-PSa{hkXernR@rOEE@ooI=Z5N#0l4w2;qBQDJc+K!FodLQn)^f{~&B+5iXv0s#R(0LPRv zZpk?kvv+wx7fT0&wL7yHmF9-%ScYsWQCKQd9uZh@#kk3j|;N1vUnwC$tM&m&6&%x z5*a=f7_o~(@HQez&)E4nvhpRnJ0>w&PUD>Y36f2l!CBgIWQz_Mo)9&R5IRL@5YUkj zM#vy`XkH1+)+vtBk~zC^n#ykiL=Zs)acHU=@QfQ{9OVhts;!TnlvSE{h+Pdb| za>h~5_{u7VX`-dt%KlfQxBc%TTg0i)L3XYe~oN92JDxzro@>2U+VseweTi{Xh zr}kCUrW`qC9V(ksrGBpIAoL;!$kuAra_vVy;EF1pGP-+_U&uo`e>Xik`}x z#nD&9k`+io5a~~pK8p0u<BgybB)x5uU;R;9bkyY?8m5@~zgyr@^QZPYQ}imTq4FmwJ9Rj^@>Kr-leHZG0D`qO zN-Oz0(eg)E;=g!wz9nBLW}=(d@wEc z{{YKZQl^&5J~Z2}@<&VHhSDgjzPg>O_*8Vhbla<1rAM|=@u&4_J-@qkshVf#>DAj( zck6sV(vO`#yH=vQj+en(sqxBu3#i8qTv<5vblP$^E^ewx%oSGZ)54njQ0kT@m!hiO zTC!uUwGCM}N!&>P0Fr_`cyLW$Xr)B`l1SSfJSBbF zCQ7MQJ+hSPP?+iN=B80XqG8&k+IuPKq~$TE{{UnDB>k~zBsAZ>3tX~BoA;ys3Vzs= zU-??99ZDTS=%mw4i8afTzM89iGKw7^`AW5a7kISeH%dk0_uyEjH+}__iIbv6#>T~D z**YYWMQJ9@l1V!|i6oLn$+O^sEbka47Lsoyi)8rX@g!PARf@s~WXUE)Ws?<=7IyaR zwuIgiNSqUkyCjlH&$=;;xWNtj8ziA)FX-7YOp4WVCQ4)UMb-UV(Hh0u*!Os{YR{2g zWKRgT?E+c0PAv9zkcqTm!Be+tA}u;8+ck&zi%Q83-t4eeXhR;)S6Jzqfm!Dk)!V@m z+4~e7$W=}X&d8A|Ash{pENfyLfz(p|#wP^15|N6lcMXbfC~ncb6Bw@D);`erw3N2i z$7p0;E|Bf0vy=G}{)Wjt9mJga6(?)-D=RSwWQp3gA^Ii;+aN?T7@(9osXLK3R_z+_ zNjOX~iqT|yA2W<>l151=n@I9e%Q+n=*u{v_<%ORAbfw2uw0_Q_*5+o!? zgOz2Jc+<4mS_GJ^(3zp}l(Jj*gpXudr2|b8OBMMZg=SReMI^Q&t)U?#ElChJEJ#bv z?I@Yz>iWCzEO>TYj|oJf5>ABVL|yTMHzG#RsTw4F6KYd9DrF+3pRv+1mAm$`Dg3e% z<40%z0AzNr`+xi)AvQFhfupsGp42g3PDm0V5pGq{!w{YgXhe_h&dm)pE((Os~3vO=#i;A5<5h!?vd4mHzoH6asfmzydkv)#mLS#lSfic zv{PC`>QA99A))wWs?gY%X!aza*rv(iiluNV`w=3mWR0E5AWn5>zcdkN`w-CSJ6Qw} zcDpQAtjd;|T(f^<#giL4e2Yn0@+LG&S@Nu%n7ASqb8b6Gn%mDvsr7vK^55v$o)CM)6ks zjX2~6hfEF8iAF#g>=}e`xBi&yGKz? zQoISythVlxS$AuLa%~%8lqcY--M$)M^ky_^oDy|t+?3L%V(E1L&dLSTPNZoLU8-9k zfgzIb!A(=)Nh}_RSJ5J3t)sZ^*ydn-U}=h^NZBZr;F5fcDi-9fsny+} zi>IM%>C>rbNNzTDDNRV+6*yMc*$(ur*{k&GiqX`rj>zUp>4#)LD!eN+?3VZ9R(F`^ zB~;zn6#oDk8~1}vC25aBZRu$mUz24I)u^daMC_loHdOS+RPXv^{p``x_A)INpUGa` zpni2SN!@5fPE+G<1$f>lt*A*|BEO2a9GiDqi&0!@ovr)P+v-ZH)DI{q=MK}gk!Pbr z^GP;=dD$*WN8XM(6;t4xYI9C>xkD+crR;6LWR-DfAdkTd=w&?KSiM=KI!dTZ^vHq# z07^;nZfxz_`Lj}Xz=?68VA)L$NQOfet?B1WhmCqx?te#n`a9pz-T1XM#_a7!3ksB? zyFm|`iq%J(uG3^FA^IZ*K(@S(!8tENDqOfJD_go#QXLARs1lJsg+2sA+?$mx-4 zQLzt^+MY=Jc0*{dgJQf|Fw@F$US`tqB_%AW&WcyytDDmkW~7KDp9dre_ihmOhh!@u z!%)h&{{Yf8J}O*DlV5}_xge{XrbeWjOqwHhZV;=fxGL`ZCaMR+!ebr zM9C)^CkDu5vPrU^4(AzSejX1(v*!f%E-t&bH+&D2HipVZ#O#JABho3=PW0YN)t(Di z(>AP>T1iAELm-V=dD={aVsJ>SKJGcDIjT&o7JI9Wh;g)er8{0sVyM4J^i zM6BrKrAaHfQwIIv+$T1hRZ~kyN@21QsI>2a6>3D`k}{Ttwj|i-8-t5UB#~(z4+u0! zzo4Au7p9Z6RE;FDr<+WWJI6Oo`zl??L|zCqSH-BcJ8IJdZLz3KW4w|#;+wDNMjVP_ z`b`QMw0Fm{r~GXsD^c*k06t0=Bd2F$6%4QII4FLY(F8Ian<0?IpSD1g_Q?E=Y2b?fHcn|5D*pgQ zLrx#|P`n=Se5`4qCCJc(%AWib4n-ugZ7h+`av_k;)-|EoTEC5{;>btQR+!u;=7Ju2 zTk!GY_OL}o1auFYhWjv(>pL zaCNDgWKbo&TApnrj;4m?&9(M$N!*D;r7_TUu{U{HtrCvm)a?SKgfvBxZ0tKw=tHHV z4T?RY5eS2)Zb!VBkeHat{S$N{-i}U5M<_!@TcmWMC=w}z#ZvkvpUI|Fg=v91$f_oB zl!+Q45oX&V;-dY^(dI0tr?`=k=aq(Qu`vLY-gE z+vr7V2oVfcXoe{pCe(`R(`YyuEKQKazoSdif>^4OSt&%Jx?_mJFLqlJDu^JD0x7C> z4$AGLsXU34d|+xwJ0q4sT1yDL*{KpZ7XzvU$u#c*k{cjNWw|7hd~`qJhTQ%KR$WL&5!$D)$9YRmInWpNhNLB%YbPNz3w;Anv&rKfe^qvEW`F{?n-Sys@cvSN{K$ud{PlO&adVK!)w6kZl= zn?lBi4)xMeROy{WpHxBBuBDR_CFOa8WAlxAzGCEm8gPm z7JjVqp9B#0K?eK`NNdMFN?ay9TDl%I@`U#m{{RL(GN#`+z{!Gq3FkY(5#ZgRf(Y@! z7k8y>eB;f~@j~ENdf(ntvDz&gcjnMR1Usb;$~;m@B;%{ko}UWF2qpcJ{_LuJ4JM#z ztRl zG3H(dylmMbsGHK8;C$g827P!b+AHV5B;R(Q6q57j2(or~d+;XuYyII7lN;g&w)SePk~^_BN)LHobW^t$VUZf zG(fXf*Rn~pk|tEKcYZww<@pe{%Fj*o98vZ^F&EQ^m{-eq) ziGew@B+&I`_c#+}|3J$N9GJmDmhl-@}v#}`c~9@a2b&Kt!%B#~aH=br>w5sYIt zl5&zsCpuox#zc_O0v|X@IL+i@By4i;36MaMAJCImc+ZM_b81Pn?3=N8RkwIHz4&J} z;??zdBgX_<2=LR&ya^*n(;9vhCj^XXg+KhR!T$6_k7{qJQ)&2YDjVl4O%@*?40nN+d*+f{C>M07`S* z_!lBKNf#BgGMUCEHeLO??yi8#QL1*ofG^pns?m{EPQ)NJ6r-lW0tZ z;GYB#@se>?PU{p^q}wU3x}Wi)7uzcDYvlzky*y-6Mug^g=lM86@A)`Vfy~ zeofoi1fyR^`{SGNHB$i1wi%BlZ(czKWa9$M2zU?Ao-M1;tp6v|?jd6$R>e5fq zJd-|+5|J0%X5OH3Z|+1gL^Ww>d)WT~(mytcSt4$uH+Ul{8zl{r&4^-qBJT5Kk9T-L zi9+EX&(-GgB3-1NT5(z>NynpCn{0!EBz_pdS+krS`&lnn)LVAYpw+hoJEA`A&AyZx zo=GE70+`jeZ}5UI_#pSlm*&!jh#+nvS*}oozXaKC(6EMkG-!e{o1`;#;EiIfqhCYe z8nhf*IVB#rlWqv~GEw|e(Ab&XBS!h0BHvc}x1&Q}OhivMi8Yevi_DCLb$z2|@RDsL z+d};af>+g@l<0$hN7$94>QD5Pi4#`aB<`3TAL+Ap?rPHgo6D7p!$SNkJ8RjiFVUeZ ze}qM*FmWi2oFBDkvIxNt}44-GYva}LJi9!3jY@0zBf^zz_l5=^C z)3+Ac!d~qHvJy$?gP%h;8oa^XvQI)E>~Dc?Pu>tI86?>$+CxeEKJ{jDK^KW52(xkE zR@c!egxU3u$kdT0$R^r1?hQ&G2HZfW1q#qgll5&J>kt3L04@;#0s#X91OfsB0RRI4 z0{{R30TBWaAs{d@0}??|GC*N*B2a-71VWJ%Qegku00;pC0RcY%*Bc0STTepJtp5Q1 z7IZBt&-+ELG&gD8Lw{C2^V?rSEdKzdS4i=<<4kK`LF&iVdoV2%y&B+xH9;1QPV0FO zWg;yfZY=Et5IvZ*XnLBn5gH(ZEViVZu`%9B+>MwZfgz3UC8g@dnHwh3P5YWVi6rhD zl1U_zM8wHEi6+x(a?sHCB@<~!bw2Kzv#y_Ka)Y@)B%x-_rO7Cj?(CFJ+ayV`QaN0r zMCHOeYV<`HnkaQRLr#|uLZYYO z?61+;Q}8s`H>2dN(9_(f;)p9)Dp1NQoHM~s#6n72Wp4!>l~X9A;;q#A6#P)qsHX^4 zr{pmU@NkYQU6D*-yxVT6z^tJTjiM@}zyeN=JT=!H<`EepLR>wkRmA z!=?Js(D<{d^Li-x(se!+X{HiwvMBb-DpgXlb*YM{-TFT=zl}nzrkswNYgt23+P6=e zvFm{mYCbB}@J*_xwUj^NuV2LJ{I1TYB|Ix9HAU(9TD(-x7U|}+hf7VXbl+_?F_CVM z#gCRnsrgg;I^PRXL#dVg>bFDU&acghHdjw=6suA5r0RSfx^zpQ2&?4(0Cum!^=^$( zRC_v<_fqfC`IY=?wGL^d>Zq;Tr}EJD6}u3zf=8ZMtl^6ni4_W*rb#w*%Mye{`4uTz z1wu^7)Q~|>@p4ahD2jbDr^liQ5-F>-VHkc08Wb-DT}M)ekK_LU>MG%4lsvg0rmoe5 zHk+1(UvCtmy4`%C3B))bQMC;TrT+k_{{ULOA?3Cvmx1TSlS{$>0C(tZKNhC7OO%J! zZA1_BQPgyPQC(`k8MPlIC!#dPWsi^H_K{&It z>w4mB^-KE6m=N3yi_XfXM2h&eB#xuGk|Zi$o(wJtBw}RFm8%;L>s)D_K6EV@kIm;q zX?hZDN(Ru~lED7}LcqkO*|ELJ`qR4_V(?58HiMlC=@hReL?o?F7}+f3nG%7!&YbN= z(%*VxLRlJtlc$?Fw3r*Z5{p#TsY5%Msu16;5=t;iB#}LY*OYf5xfZ$6=I>?&WbBxl zvVp7+$Z{mv+ezCCi5)CSik8mL$dWq~e3hr@R8;W;=`m4PqqX`Ks*(iY?qrf74$a;h zJ6YOxGqIhF;}2~{#tA2Rq6lxn1S>04Nj9BQDunbw2x$(IFTjV$$skk|^yk334U7K( z82Q6)rq+1gMe~UO|VGoho zlu(l?NkFTk*qtoFUsi?7E9xqy3Y(Hiouy@^4|kFUi%6m#0=Xvrskw{;aQ<$z|fOrbm5gOvw;jmPuWAXGx;OC+R=-pCvD>R z)SNN9Njq^iqNr%0qL*h-)xYv9?V-Cq2s>F3WHpis+>~!DRPeDwI+Rx{{YMCcU9WBMB>ybB*5uRbiV~kA;{H7ZU&lr4RFLh zFEbjV*kXae*1{xJ2*!vzPSjSkt>qGbB+iFcuGpw`zY0gy>T%eA(yzf^RntpmYGx9( zF9eB=iII1a(9)eRL(qsK-Km|YXsIEmtt8-l>5@q%$=##0bRDd7q6ikOXr=o*(rL*@ zSuRSt>QDPqCsU}aME);G#iB_Ss-iNqJ4U%BilJ1AM{+}QcNl0(+9Et?oeAkq$WKGG z4wYyk-MX11tHBn*B;7bBM&MPlQ0&CS#K%H>4K-z@WQ|TdX+mWC5aY(&iQUvHw%~#Y zvy11^B-%+i;Sk3v%IV{RN;Bkv>1s~aD7*-PraL>tj#jCAGp=BfI4N>S>N|-fomDs| zQufh?_!Ts^hfO|?)#!LCp~@PvLliqiiv$osfoQ6aD?(W*pzSK5G*d@uRVks;)!)*? zAcv-wRadJ>p0~ls#b#toQY6IHIYl)}ayHt)+krOBYF17TNV>XZR8CNrv$UmqM3PA) zjiyyYL(udsxg_ozofB!YDR{cOc4$^;f+i*fOEUtdrNE!HC-TWO_#2BX4>&^5?3@!e zVs}CyO3u$qq>X-V!Flbh6~9S)yS*Gozge6y;Z6@JMWw!b6Io^LM7 zEcnL!PZmmaI(0nMw*j>aO7tpC)fPynm8vYp#PoE!iBgk%9bT{fAteb~L@W5%i?pFb zw`+;CzoC)@q<8MdsuRn1V%V;k$|WmOvpW@WboHTYV^}d7V$%0#5p`&Gg!mmXu^Jl} zI^CL2ltR<~pXr-b#h^<>iOrC<8_}H@!31tXkIs(kCk*b9i%J{2;>(@IXtZ9Zi!Df| z-Nd0gNhFhK73W0f={Od`c+iF{6S143bv%exdTHRD2*B0T6cTq5%!!T8jQFzHY+1Bx zP(6e+C?Tyb(IiFU^J%)+q;X{y@%bYhiXV~lbl{ds%&)hY+E;G^y!~~SapZTM$ogqE zwZ+!AZ#IpH*jkna{Uo*aoC&A2wPF-dG zOK%z}5`IX7&cpbty-=d>1DB%?((e|>tsb>4sW3HY9>?Aai6%7K^%=iF)ETu^Qs^wdIYZ#`fKoR?^cNqS8qcazO+r zAeU$n7fD(zCUit@v^5(qVUhIG9^4QmwGwf%_np_B3wlY@jVh@sLe!S@v}Nm!5%hdo zHX~vPwj)AAS6q*aJt@Y{Hlyr2O_rr+w>llE3Wdj$-&-^6nf?!p#RE#|nt{K|S(grp* z#Kg%%sU6327g3$^Hocf<`b#8CeC<68W$~?4$&yCxBeGV+`W4eiZ89#1L_1Q_Cnt5H&08MD1_{9^?niPZ4Iw2Xg=`RJ z^QpYq;F49InK2q&-QKm7RGpxUK}yp$#hDS{TzzT!Dm1+iO_kti zTD;yY^((iVrK)4^J(p;*)ri>hrRwvd2%QtJ#iQt}PBxym8r_z!I$s+zw#8+t2>y<3 zJFjtBXj?K!**i<`ukB}gNxI&jvp-Tdqv)$WQ=y}So%yp{@uF=c=*6+2X;zJ;ys`J3 zdeM*Q7VFr5ess^!U)Znf;@B7Td~8jo(XRv@q-?!wWs6Mz0AC^*7JpfbX=$D1y(E&L zoqf+rZ(-=h%NELb*jtJ{Xq(Qsyb-E&tK->?a7NOy`xB-~Bu{xM(HdQ#ghq%S^7`}i z<&sV0l6L$?gf>gOV((#WH{<(QdR~dzUqU~tmPne?^}T43Ke;*<+|Kl9@prB2#A%P| zXX-`K1NsY>e_|Qg>E+EL;5qWRBXvVW&Jg0tq?&E?@!U= zVqTTAI}7Vgqhc1;He>o_v5)H~LcB5=0w2*|W=Z;yvlfy`-s0-(LT=Je^s)EwV$x&o z=S12*n$skcb*eN(jUKH8OO2@h&Nin)W*G=}NPPbQU4sJqP>2&;6%?yKuM$BYPISl9 zohr#$b9b{lY6l3BGc(CB*VmG5h|`S?GEqN*Z953_sqLiSiz5dj@hDI%$sduBqk=SfzxiZ{{1KE&sbvWv*}*E^$z#bZ?l=`r zqXQKG07Wa=QBDyydoVP_+l2$7vOTlIhi?Tm*8N#2V(Bj*{bys0G=Hb)hD`fA9CsNT zk0NB+GR%XL=iP0bQkl*%%>R*^O(Ra_|=Xokp$nUZJNlOqF?TTnxAB+1C8No&#n0Kz{6 zB0Vch;Ln09Ung(&3=>Q6O*4cu(>uQm{#c9|;Qs&xXkNyWx>@@Q)22*$DQ=VGaPT~$ zo}!M|kt$oM#Ez7pPNch1aB{}nEDmBIhQDY0oOd@YN%^yD z5^}M(A43Dj2w#*+8$>)2BK|Ke5hT+MB+ppDs*Wi_sviaz(7$K;a>p!`xlOS*Qpyry zPcs8e#|LXfvYKjs2Q%QyFhwLKp5b=+$rQd5L}f|Z$cf-+UNS%Q?VQd9g@HEk(j8dM zB7V@?j|$SgkVZ+z2yy61#|C__sHtQKz`J}VK_*CfA+J{MQ4n|=J7zL)ch&4%COau! zN%3q6yx>g#034F%DhI|G^T{iOD16PM9=}KF5JB3JiR6Mm`Y7`UB%*)#BO{h2SF9Yk z?nG7K?X*a#Ue*Oo9Jb__F*qt|jl@aZH?ulYAjuU9meyK3T=S9`lI6)gHJE>#kxQ3D zaEbgg{UUg0?VYsY_h-r)Pl*zO9}N*K?ZLxJPUJ-R8lS<&J5SWxj#2DMnT#ST_LCQe z>z9G$*zI2unPQNa~@ zGweyTFTj$Mx*SFcZ-zs8hIdbfG~qlBR$Wj^rg1I%JD;RxMNd+uqmnv}#ZUEvwczb( z<&KvkZ2lzvaLxqgZk1lliNv0=PI-g5sl=Vn%`imr+Y^aM?mOd(l#<_rF~Jg4zXn9y z4w*^Jj}L-ea6CpBlgpB7@<5?_LwF%hM5&2vg_s*cX``7-ObIiz=L4sVz^V6=9B_6W ztumCSEOMBWZ-WVmCOT5$qXvD6cX0x5@QH$+>EV!^OpP_{U!w@iY^s*0lAh+XK%p;+ z96YlVm2dgd^W>DFcroFQ7m>7L5ef-1+8T$E5{$svEuZMIiL^%pQ3Ml>hwjZ6F(C~G*$QmQ5fo5|ZeF(&*ZcIU(m9&*_5O#8s=Yr!Z{ zPDfQUmeTwwF!M`oepFkQB)qZHRXAymFiQ5H;zp%rq|AN{NWVlu2k8ntv61A6d=U`Z z#i5>J45ud~OyF^hnG(sBW4VVB#Q@rLs_r7+w($uL4kq5x}Xdw+VKO4ax2il4_?h3`7s~kN?^3 CjQYp` literal 0 HcmV?d00001 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json new file mode 100644 index 0000000..411a04d --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Login.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/login.imageset/Login.png new file mode 100644 index 0000000000000000000000000000000000000000..2b534bfec01786a4f91a391bc8871cd4d4aa36ae GIT binary patch literal 33698 zcmbqa19N0uw2f^~>||owwr$&(j%_D1v29K|wrxz*aWY9JwqL$i^?t#t>aMQ3)wj>- zd)D52?RD0PR#B2hM!-h^0|P^rm61>b0|PhudMClbd|f#jhXZ|mfV-4ntgY-xw*2-Qryg}Bry=XiX$Vh(j(ICCZKYR~ zD^<)3rS8F%g9 z(2Ux+F61gtTb6-cQPm9ULW;XuF|XwA3wOM^B(7Y zRkBD-e9G}n{*goHimUEV|Nha8`xYvnR)aY>y|Qiz2Os7i@-{~@^}b3Wok$#?$a$UL zg4*@b7Vf*&G~7xsSx*NEff*- zVg=^AwjkLG-=&;%2DP_c6=e4-sY*IHuoS54f%guzLJ*@ ztWuzC0u2pu^&6{2sBk9&g}VWl;08~8GZh9`D}_c^u%vAs&jY>!_QWy5glqxRLQn$A zVIudDwA(mdxvWidRcW2|@dK+D3dq=X>j4L2jSDm@4Ek+2^pDkJ$RSLU!(hUc4fUVb zAMe70;q_m$_N-ebxn&4TXE0p9sQ##p(nW#_GQJ21q6^C#Q=1)IMqtDbH*3EY0i!ot zkLk&D-x=D`2J7g=>4koZv!3E4XCt{na~OC`3%^fg?QS9B8kjxDXJw*Oj@Qm$}(;b5GhtNP>qcFDq^*jUJBiu!3S0G^6hQ^ zeELpQ?y9-I?phXUdZ)s1tqAsSmr5S1yI+sd-$_q*Sw-3TFrj1~_8v_n|4iB?=eNSE zc?J%uu() zatk#F4##8!nm>#*N+cD;(~Zz8rh|og58ipVd41Rt23Ogy=Kwy#7=h1LRqdfdc&zLx zpYX6xL0?YcC(M5R;Q#`9=No}`EGSKARud7HutLEGtCN&Kj8x?cCv53?|!$+U33b3Y4 z4LqF5EgyN^8@c71X~=TmnuhV;5k&EMUI=&Q-0PhKQIu&FJIsQ|8>1g(hhkd{hj$NEo51t`a@Yzt=;v8yZKTR*5 zeZEqQHF~t8a@jvh04vPzFOBb`P%MGb5f9M+nyaek$y*tf=n}kRZ?_@!gGsJ-C#$Tg zDu%pijQfaNaIjpvRxfq$F0I~o7hqMI)f+^hY8#bW)q+s6e`H)7u2QMw2x*VLTjVV+ zUb>K$cU`_eMVHzI^el@xmaeAZXi=LlOj7T*onDaShUBi0qp!+eYqZ`r-kU(3VOX@O zt?}6f-#t9`ytCN}l#OH1(v*kng;Z5xH|sYBuURi{ces8lM(QB=iM^+o*LLV$@73e0&NaC`B4bHI&j}qe^CF( z(e1BYW`XqS55yS|^etKe4RBqC>3x!$PnGhy+y6shCy%PsLo@(aJ%oq9yBK{u_box~ zV(y&tv}&v}G*lW!GSLPCfz;V4^=Ql4&`fH{sSxy;yTcX|1uAgxHB`BG*KuU{FQrjK zlbTv}&HUH1G1Ohpc?J1r=i8jPgtVl|+Crs1Q&J=Qw5Z z7Xd9S&D%Z8Yg&FaS&5p5_1E!`35w=0dxRKkA6|b3Jm(m69P7$IUYEUt$2?C?!_myl zSidy3Aj3uAlOr4n8#y&7x0S=ZmSeN%?fAII3EFpI)nHdXQhRQ$B z&x*v@+Y5HhFIi)N#0fqf9q3bwjO{#}u+^DAs+i$o#oMYi$niIR+sGIMyduW_&=A>! zp7pmoFpRX**f3lYN_VIWVvPttcV{h4#lgY>wl+2RGv$AdB>r*V!OLT%{3&FYYV*BG z^_wPR3@iM+$@i6R_ZzwNL!Xqu1nz!wPSs=tleKCH=f{_9Z@0#l z$DJP4iv^~!#5r?yFxoj=PFFFZ@dU7q?iPpYEbn53MGbLl>`n7aQWk0@qWyh+L`6YS zGf&)bEz3p(RUU(PG*hiHj`?cHvMX9bCod>Uy}eH*PP&xq^5q^ZciYQSy+3`ptuP`n zo_K^@Xd2cSfX4R{v@qZk9qPu$3k5{6R;ps2@>s7~nlSNh?S(<1b(D{i*^tO+{(xXA8>DL)eck$ZR5b@*6?-D?zS;ii@ zgHoUk+@GP54iRz)r`&hO;0Yq^5Qg^x{r35VpP$D2_pX19Ehhd0-TuokUUId{{EiF; z8hHjXY5{^OCX1Vi$5 zDW%*%ZjaTPR*$Z=SIw zPrVyIjJ@{Sa@!^|+mppvp<79lijIaC)7-x8=)EeOHHH#cSzSH8e|+qO$4tP?Zi?Oh zR@S|PO335V)d~`~Yte)>kGOMx*gxNB5%?En zHp5q}IVy$LeN`469iu1duDD0NdZNEL^dG-R$ef-8C7n2>|N0T|Dz?5S;sKg5%=E6^ zPNfgu5LRJ+GIoEd9$rz@jao4}&t6fdom=CTQF-cD7*h^@e9+LeU2xcCvJzFsVonin zt^`y<-dIr;2Pf4Yr%zRC()_CGWQY2v8)5kn^yOV+(3{I82(nURvU*_dgQ%P@t7>JJ zQiK)m+XOb=1on5VP#%q9bd*wbL{Ssnh53myV_+VyVr2~f5*_wxjJ7q~pe6RGs~MA5 zc{+sE>rC#b*sd=*IYuhk4DXEuX>(d19etYTT;~V5lWuQ}yf(wgqrgr0RdcwL-?qzY z1dzeFE65B@i_?P)f1zw{>1Pi>_wAA{5O%cExNhVt^E7BP7;O>_jP9|v9KY?+kYj}= zQ4!T{`fp(WcW2nKkp4UIW{f?z)lcsUM9FS2=+a$WoRyRmi}1$_fZt3GWckW^^h^I0X; z1Cix%XGR|<>j9MH*Hz|xhx%QWMS18N&9$423G5qRqXxjJ^rC^BYlTcDQs9Q&0Qj-! zWJLA#Dzdv~2XdC`vf$=OFzmQHl~kSOPyBpJ?=JoP?+zqh!UA3{tyx!0_MV-h7!tag z9hxQ0YJY+$Xs)~9FC)21p){ZvxHKGE=&^VHRK2cOTi%A#>@{2dz-o3lU#&_}czOFJU_4~SD&%_}Eh~zu=FpgHQ0#-pw89I&60%#reke@Q zdc8o0{iQY5MMIUb6lWCw<_MB8dZ7xE&L+ri)vznhk1V5d4mxR0PbJ~kR~KkSfZGL> z2mfup3Stxn0UuH3_%-fFrG{j>iid3gtY!nt#{gnSTRF4k)2Txyv)Yge)u39WU%X#g z5B2NL=`_0@m{&qE=}l8kyPSx^bq_u=?fUixDs5VFg?Z%)Wx5XBou)}X!^-~u zQi=VhCI62wFtQK99@bb+y$#dmR2PIG-8PdMRK9gRjAf9jnHW^6&5Hy`@0PG{KM~Nm z4UW_pLv~i3kRC#8EVGo!2n}JuQ^l7btZ>((Q=3{2$1ywYcej824dx5im zXZLx4L(tCg1X2783$c#@TpI6jQF!RA)F0}isvpPZoev*$R~Bf0=&f4X3DD7@0vJ*% zUA8zzGX*!Nfa~Q!4%@-8%;TnFS8OxJ zYhv+R>Gr5=cxPz8`o&1Kl+%Q*S0PwGrvsW+3!iu7%;19I#}$a$6|LrmH7tz#xG2>g z_?(v$qEYa#@BdVbU%Cq>1UrE`hxH9of;9O>pS=LjoXs3D1l*lSwHr7Vz!8&VX%}-@ z8hjP~50YGNoS+x;S2Dt&0unK3;&Og4wB*=5AQAO?a;fZgdWCvIQ1o^nWwsJESkJ>= z*AAKn*#uE}f7?ziAT!Q_?c3`dY~U?~Hp|R=LFh3c6AcH;6WaRcE+ZaY1ePBXVrzgzGT^rtX7$!hryYX3#{kL zyy|oLck#--WgXYepG_Yixcdzgwjpc}Xh52ER*F!2rarv2GZ^Es_d zb2)`OxQcWb^O<)QCrj;jt#GG;{m%t2pOuOGg{Mph34M2;*?)4Ia6M)GDO16!%=d+` z{OG?CB?@Jo>uDe%2b~A+JI=DMLa3e$!r;@*ZNXJFB2~5`j|HR4eZMK-JUz7Dx{aKg zW%XYT6DPL2r-H!ckM0VXDD-?(C3>&QA3r?p{3}3^Y{Iz;CYtaeNh-^71_^VtCz$S8DLGR|pZ9gG z&OSu*u?U!63<>P^ZK}xFYG`ax7BCR!=Xs$V#<73+8^g6p4KO&_kjsIg@(@Z%bZ>E> z>VO*ZZOB)Om>;ONf%z6KB%$Z3c&I~+dwF?K?#Fbw*8^{V@0#nZr)9oIeTd%bVbJ6-pU4}&kkwx9R%w_ksRuO8hD^P@Atq*3}i zE4lM!LN#ddvi@4eTpJKyaSou!d088IJ4#@WZQrR4vSLZ;PZ0$I-p@n=5eH$0%-fLo zjJ_|i;93xk)QBJ87Guck9c)*5g0by|T9u28JZi&<_^u z(*n5+9Nvjb;1oPJE=IRse#y(U7RP~XAmVa5MNO^9APoUMwhL)S);2?tKnFnYi{imZG+NQ( zIwKTZuk>O7og{HgEzn0cW0os4|7~=yZ~VsHh2D|X$RB0zB;Ax`doJ=j>`ff41<@|C zLE`LK@U^#XaXX5yi4}wduA>&4Xeg)pNA9bTeW?(Pin8t=v>VWKn3sc0EN;bIYn!Xq ze4U+^gPrWJLG>&Mno#|tcI%MImnjFYlQ7 zz#i!xUyE$D9Gjc|k$TLLSS=Jx%q=kV(27xcEGq~ zllv^XZlgu;#iqLi-$@I3CYtu5XHJvB@jBifm)Vlm`MEdTc4s6DQe{avKd)=I*%PDB zoxdET=C_aS6M$$@XKuSlD46J&iZ$%^%X55KXk=qJLraEathWPMEDWzmNLm_oAg%V> zCaOFC=cwi7R?*#~ufM-PSpoT;6cvwBs$%mpm+#$!4-yiT&tz(EJk29o#KclKQ;r>a zV#y%Toakd)HxkT5>YLaR{7E50EUv-CIK9@u4r|CJt3v=QuzFW(r^Q$ zG8D*)YnKVA7=vg+VDU61HL-yg!)vZpHB69}dQUWJq_JndF29QMB6E18CJ|>7769B_ z(MAD7l$bCDf%{T`y03LASV{zSd2VMm6`(m%|}cp9@1D zNc6j^1tWNU9h}BAGT3s>ng4>dJfAK4xHP2jX{);Ik{I1^&T*jB=^VHNxvuI}5uGG! zmVoO&p#FxQ5OM>np4V0`dxCqyrX)w&jtcSeyQlDu681gD6YS$cbKq*&1Tt8-$ImkV z&sAcho-0f+3`S($M&>=98C!#^yh09rMVP$lV1e0#mW4`Igb^0N@lUU3!i<=}b1`*x z@9Hdxi;b4%edZ!mDfNF7TWeqQ)AWO$pZJzMVm=uVkP z6dlq^sEGzydn=+T(GVO$ld{&~vFm@$583~v?<(j(Yws{{pfR?}2>C%Qlk9!tF+Yxa zp+Jk6dOb;SgUurkX`X?_f-b(sM=5&YMrA(t0tRjUn;{#`WC6^_iS^kz*E4VXcnD{Z z3{BFkcwb2!y&tg3O^T*jLLE)Vb}W(`!4*1RG2EbT8!R*iP_&s^C9sQP8wLN)Xf&px zJ*s?kg9IDMInE!ML`fsrQpw`)DmZUm2n)icHI=jI!CrftuB*HKPv0K;Z|!WmVK!bQ zlW6vn!8{4O=Eq#rSq9VY0=5uqoA))$KN1Mv0OuspA-t&}4-d3n%EyNq zjtK3Q6-0sGwg=;{J#!G207(k0Czpu}QWzxCyat!aMN$PiCNqfq$t<+SP7OG+Wy#P) z)-7K0l=XItW*1u>CAR?Zmo45y9?SOF5{R4lPf+CP_Q+wx%T}%^_$-a5jj*CGAeEV0 z2l0fX$pxLyM+H$t6r18@*ZBvdUuN|qpOQC|*CbxR8N;wL`Z}gWp;|i7NVH!$NysB8 zZEJRTQX=76C9EQKV-vzqzEFn{7*4qAS?e4JKd)$fZl~XaJ`l&>N@%Tcu}53XA*j_N z@Iv|5c-I$9wEcCNQgi7sd0*NF^lp%8YFTdA)#NhHGb*{OuK`q)Vv>n{yq?~%H0WM+ z9XSYT#qjr^zqJ_n%qR6jPlmeJb5rTV%QE&$7>YKpIF4uc*C}!n_m$>oBEtjD@cX$a zaXR3%o4aa{cAB<<&IVRpXLdqbAr`ht?39(odajGh(Vk;z{WK~@Q$qD*%J%QQQBB`n zBWPkpR3vbkMfG8!BuBiI_rkC85lDwZD3RlRqQE(7C8-?pE6 z3Q??oN7H4=B!S)qDhFZra4vZOa1c6k3C%!JykGXc_~9(kvIRHupGJJGg2dZrdff@^ zA&4LZ7O|Cey>tJD|9$}!6->a%9N?CXDlPz%rRBeUp5xv zX96YWWPG5x-;3VjRdzetFdck>nj)=jM72cLUrhyk3Q`MJPtzgnCn}jUWpg5U(iNuH zh@HykbFzSC$oV{55z;(LG4vrzuUTQ$eK6NU@8 z^~+`OJJ)=3C}s_|n{%)r8}Yk)P5J{SI+E+2u+J1So?@dT-jz3)@U!Xu^^+8GBQVtB zRH>#1Vm^Q6;{tnPvpnBqvxga-7Aq;WI+@qK7^P+6S-eX0_t<2UVXiade~$}?$!j+G z?lBUfsJpx8!IS2&dRr)tMw`5eDd5#e_15J@ax1)+KalMs0m~JZAUC$aefNnfdfuB? zv*xNV?U3k<-Gu$3%iW3>0Im@nw6IpW&|6%$M*8Z=%J^x+XylP58cf@qSpr33Qftd*VZ4NMki9dJim40 zBgN0vS-#MJ8lPSd=50(Um!{`*KC*;2W@+mkVExQj50sInY4UiMkm8E7fPl-Az#)CR ze)KI;MRC%~W+!Oh5tLS|()JmD+J^h1A(5>D(+ph=y{LR2FD5 zRr5YUt&CtKZ_VFad@gf?-R z#;G4`hFf6#u7hR7G3{#X-A7~L)f5GK&JFXX5=Px3&!er(a5tty0ZuZF#hV<%#u4kY8 z0%;8hRFRW3)&ptY(Wr;(x%C?l^+q@A;X-T#Q5~HYX6y}mjLLpaETE}BHsqinprWWY&HK%YR+VedCef6Uaa# zcIm|ZdsULmLf7lFmvoG)+>#wxW(an5^3jnEAZDEVrn}3IWpzvr0)#TBO;apNcxe@$w~v;kfic`Q{u~2Y28;HnE(6s9pFxzUplb z5%wLOf{a9VN%;N$ya0dZ72UkN^7c7caJw)I{QXtOxL_}bGGbLU@e9MX^zy%8$vW)i z51NmX@P(!MIcAwop*W4Hn-5?x5?wBf+jO~-8NCE+)2mVn8@V5?Ce&Z7eWpsU$!74HDZotE=o$Y+Vuo!1+INscYP7;C7mgEzo zQhzD05z@2z+$pwXb5>o= zxUpI1^V2r@J`|31_kTQ%2z3o>jzd?C9Dg^ikwhSYKcrRUCvW*D(^2+@=cnbJ;;2nD zXuP1|7RZC%cGEZ3^|;$4J#t_ULt4#30p?x$aE>y9wWBJPyEvDN71krDiwky^$Hq|x z4Q5T%sqrJTl`!scHO`9JzLP}%c<#TZ`VFG08@D8x1v63=QrKGT^hy+CG*J?`c|EYI zCsWGGy#;g3;_rp^kwmvLM)F~;Jv!{2edDBOxZz!`aT@>Y&o(KTQg5vg7R;WL?Bv=&8(kp!5^C8 zA||9Q1_-LLo3ogD@mqhb{VxXze#ypJyW<$U1Tq%=c8gqzityPf+Y~#>O5739A2-R(+MjsykT6%9^D(PNR|5V;+O|G z1AVD8^ahh>YtB`RPT&k}kwBE7*OlsUc;U_Bg|T+UW@8^|)|mCR2F%qlG)>pLbqW0a zj79rP!nj=&NUcAdyUo6jIgbFh)*cBfzxY2Ybv{Yp1|UkB8!H)6o1&WeyD?@S6!=+m z0r}kfTR>8qun{}t%ULR^TFjE7^ z(sGO-|IXqaPGU>rK)GB8cYW5@%^!6HrU}DPDmnBE3HKoI26Qol@%~D2&0fCKc^CV~ z!&L*gn~pZ?fEA-TI*4|L%E8xYvDT3CqUIli_uQevlA$8MhGdsnY^MlXJb~NDNtJ&i z-E-Ezg!Ph;Zpdxp;9RQxAEQM<$Maohyb3D26Xw@gW?DvJ2Hu=Vd2vz#8pa+o_|JWb zIE;4VZG!7Ld>m(?+M<-9%jpkO;&+V5?PJeSvRxFCw|TfpEVKYG2`B__i+PL#DsHXr z8U7F~P0sN4e;Ll($U7^pE~nEqs321^fXUQwg`U;xZBfv*&DuSo*H^eJvX9$WyK%OJ3Mhgoc-;FY z&WVd(0k|&tFFR6m9W-UwJ4xHQ)pvNb9}eWUCxrh;=2le(_64xY1@&pthXfrfbU?9i=>?2`zcBH(Br+Q|WY%AQD9W_kAOcQK$2N!?@vlCx)GoyAx3aL8DgY^z2}UheRwu z_%wa(?M7ilgej82Fu{8q+2$TsMp)g};Zk79ciZY}PtxN{lbr(fH6Ah6b+8CwLp}?f zh`$#1YU|n2q6eD==?409G&AJqpI+VnRvq818#W~BMM%n=K5kS0ZM7`>4HZwl`}y>+ zkDg{JBzrhz6lK>MmIl;+2|Zy|MyuK z!#RuTKLRvcclPB8)hqw6T9eH4gK|C8u?Pw+wEdaO#);Y}%!W?3;!m?odih6wn$X`b z$_cbsfvOK-VL_W#!0aZX*s%-R$I!eINTErP5})XTU-1TygIyy#7(s4uxz?DmAdq#d z!kf?EZn4;9w(3LqV!Y)MQ&~Hut*e*~>zzHgsr1E}c6HbqX~#c#h@tE6-)zRmqSYkz z^os5Y%6f(oRnNHYB>MiK3iyGFunCGJJ*;M*FP56u0OSbF6eqKu?8|foF+Rj@MH+T2 zm>0$bWijpNsdGyl*IKs+UXsfu39OTx&4Cc}lz-g-ZaF6`^dZvG)>T_AR_K5K8~OKs zqjosmR}8WYL)cM2QTmu$ zkb3R0x8@4s=d{<#3HoB}*f^3#{PDPcp;7#Q5{O6W4~kPKsOjNY(tk*cPnP|l-jKnd zHPy2)C2tNS4pi8pg|((uoXiydDTkY3)cb=>&UmwZ@hY*?PNUz8GJ&Z7mtNOT^jVAj zF2rQ}I%&j3wzAft0}W0xx7ohE2X6SkLB6B=Qw6d{lAg3Dy-2fDk#djp0MdXWfyAYG z@eFszYlw(LF{mK4J(PJ;{W$5V7Ue_DLo8K99 zc3+#B($_a@Ui*`>LWv`NJEU%h%VSls*2kb*-|`=222z zzdG~xHT2E%Jxae1kORPTuQ8HlB)&^@qFg3!H{?U^OZql#xe+uKApg6Ac2H&=CIDuH*Ny6Xx+dZ3wOtdl&5a-(>YOzY8I?1Jqr-T!8$>iug$li zbAYml#D{~t_AAwO4VU(%XPM$4%%$zdYm^c1Ze#h($xsrX9~kc{&L!MYi*_2nMO8*0 z21l&Nw<&3Ez)!4J!zA{2d@iqNGi3v-t2*fe@){t=&3>*N0v?(F6Iew&|DTy;O^ac> zgChAtp4wao^nMaGWIX}z=c3~CK#dER(aN$2Bywoe*9X#%QN<_XHnu_DC^_VDJD`^& zDeXWPw9KXad|{!@Iq2jVRacVba(#W-H9e?<%xcENW^5-M9Wf8F6(ekisluHiBz-c4 z$Ghn6Us~tr(^AN#Ia4pji2)Y$wMVNDIQSW&l!Q=EY4v+bJX*&Lmvt4V)z!l=qki!h zq{%hJ@$Vaz2t+kx357A7Aw3d?B+l;YdZ60JT4ArBQi%lS?Y%osP$n&4Aq(=?7 z+Xpi376Z$aAy1f*<62vX5cBfQZ>PY~fRu?OwMvuC%`Qs5{8rQ0V-l^{RZPOw_{~x6 z>tzS^U|jzVj=*Vg1z`gKVC)`Vx2doC@M@ErFh=k0)QZXAL#{D2UD)Y#S#(%8<&Kl6 z0pWMkTfZ0p>QxY;k#!7*!4*oY+Ilu_umPrWmJ6;5rwvw@or0ztZZytJGN*mA)C-YOy?DjXHC1FB92^b}nnCO#l&p*5W&|OM_`*&?FS94NspAi3laO+lqft zl_?nJpzn013mIA(LY=^B$7dMs-_w;%5eP=m$w*qx#;Ib5_}ZowZ1&gkgX2~AKGYbF zh|T{5EQU{Q&LixA6*RJa^c67QS?SSknNjlrAc)|(cn_DV(!!ARo}RzgSjV8S1{WCL zaRQ~2%)1+1O1L?@-im0^y7pkNDNn{L_bSt$8TJkt@5j!J#p8|y2O9F`xf1*UsYDu< zRuctz4!PcScvgP+AUJB;J?nke)@2`4b?DhagLY!-&deh$v@5r&7TE*K;2#b#!dC3@ zKel)l>r9nMp-qQlDnx8_BGKnEw`V%#<~jC@8p%T7A>IlLPZf&r#v>XmzPs(((at>m zjYy^}ulml~%hTYo8wt+Fj05i7ej(ah;^}fV|FHuiS*tAVamuI+ zO`?o2F476rk&5UYlYKQBCmSE#7!XO?%gtA>kn;S(VE_HfA`i`si1VEeLjQ1IOdG&Y zip01;Ze`tWWN`{3iDhW=xCqA?NUXEjKa#^M^N0;xT4zKDXRKJDys4{|=i7!rXVgf0?GE4w?}^276sAQf2QALzN2Nf+lZKoqpr z>OwWuX-yz`1M$KN(A~6om-mQJhUtVFc)WC*@pOL>>**6YP{5nS(tf8P*<4>v4&H4V zjLUOZdbf$gq{95vRbYfNj08>~3AcnS@Ae@R6u8%7HDN?}g$v-v<5$+T32QLvgf}-& z4M}CBvIQ|#q;MT|Z*=epL6MqlQ6iROu;VLf{*3;-yHmq}7f1fbl??px1Pg~x?iH=q z#WjS5s4%{0ukdB-X~#cmm7J7Xv8u*Zs(#M;Pl@`74{4pBc5$bhL+hviHF7o)ubL@p zedh|Tcd9}E?z=g77Hh`=VM=$S0(IkUu{_M;9MG({_RFuh3cY9^W!>VSmH6WHDgCk; z2<*7>oXDIHs-iwWku7Kv%2MR~JzcW-O?(U@_u89qnM{?WCrte=qNv$P+!wZ~z_8Kt zdI(-biBo~VU0LYd|73giQb!HJn0v4Po8ll8^N9!k{N$c(4ZBa1_26Q5o0e^qEEZVB z@E^4J4)#eRL07S6JmpokYrpLRE?Pi3K50<&fVPtzg2maOJf9EO2o*DK&rIg2kXNMg zsfH6Li!)u533-f`bnOY3Si2}09p|6#cGnP5s>X~h$Lo%T$;WzePY9eFlUyNSMn;?p z(KRhnJs;DhxdhNP1WrdemFP+lwBQ;m(-z@{zp8bCaR!;vd$XKUup3cd-bcY@GY5z( zr(WOeJi;!2mZf^GSg-47yUY};ADZ6Y%PeFJDo@9e=|6f1HeJ|{J?;a^E%tiO*NsIBQKp#wjBDp_t|4J}b zF1PF*J3W)1HLwH4h{`DW--G7&q+25Xp_{b1`3w7Fpigu|+h_E%<8C0B1E_0lGN}D|_&pKS_1Z^|{wnNNl{mwi zlGH};ltbbzW$WQDtHr5+&%|D&-_zdqp1wcJ`&-A~c`sdbtl&Uz6|9z>w}?!Gid)Ve zSE*FIB1SmW^RIhp5FU>Q$GCF7Eww*eqR;ZTx+(-S2~-l>-Odeu;^)qf6@k8ycmnYt z1?LgiHgD3~-k$B{`%4C)DjUK+z1Vp8e)>NRe}2hP!RTilH9n$2IDC0V z1V6l5t=KZv=>KF=opM8ieJO*MCZuzqYEaPFHaNUhg=yyRw9sLfscNGjX!v{&$*4!$fY3!X#u@HtaL+Iy`)pfaoM13q?mTz)Q6T}PxpSc8(u-ZuXIzO zGyr^OP(gmyR? zeE3s%jeKKw=^3oSbFFAHK7v{O5Y)_y8%b-b0k!gEpBhoBnCtcOd&YKe=*)@QfQRIJ zUdvzQ3exY}?3ETF{SL(Tp5;ZtFdtiZFJFGJvQUcNgQIDGBV*&<)Ngq0`x>iDd4B3L z?0DlQ_ea&~`)kbRQ}{JsPOV{C6r9jSoZ)Y==znFNJlFbhpq=~B+@Jk#$$FSpSphF0 zt&~t2NIhU&2b2Skl1~{p&o2q!yu3F%%((zi$OCO%eKB!*5@2d({x zi&1YI3>OM8mNva-qcpboMf5AxORBvfVBnEz*Bc2Np=tvB*XO|RzJFMsj)fi}<(F6SZp*FZsAplk#b~=qPIgCxDndG_^6q@1SjiKa zrxJT>iqRO!e*FVH$F5<&Fy~2Z4)eyvSC4cZuw->-;-#CYaK-QApQ9AU%Ba1D%-&wQ zuRyL}s|35$*zL{BGVVrX_4smF0mRD!fRLnrwP$07z9%|`zSNp?ZOa$Wd7^t)X zvOf7mcv#U9KNSh8T`KTY=58!ucr=e4m7lPQjO7_Z$VP8#4(>tLJaY8JoE$>p4YXQN z+fQg%yeNK{yO$)Ne4hvysEcagszHuKMDhb1xUXZ_cI}3e&Wh2pzuXo^fTr%Y`oE44Sh5(a0R3>61K_x}-V=HS!5iA^ zXMMXm_1T?d^rrb&G0jGh(($?O-pFJ>KTGkjR8kHvv=w#jc?}4A)z1|m8020u+r4Jv(p4zL@4%8l==tQ z)FUVZi>j|IDvL14pH3`7#L!G?d%#|HvDTD(_Rc?9;Od}MQL9|o6nc}Li982iV6UgU zp>~^Fy%KT6mDZ!X*R%?{QE1eDg*?K#5dpH5=egdA>@g{HR5kiBFHrTEcF<+k_`YV~%{ zZ*?^f6l5sprPn-@$j~a?S?2f6;vKgVaEC3-T`9B(rh|i7| zW$eqlp*pi(nj6)^UY`8=ONKWa+0a*jkdNzSGa5Kn`OU&2!dQG;zHDip(_!P8NIouA zQ?z0diD7WeTSu3v=$PIoPxE~cv=#Z$JMF(U9{Q(sNn90vx+aLDw-X1qa&JUa7tbwmqd>lr6GTG$c_W^U& zK3r2(w{;_mD%ykk14h50H$Hc(9&<-FIjWGbV{tsRB0uf$*_Vi3|2um&9lnNE?RQWx z>_1D31Go&|V*E>8vX;XT#04&%c_$XdF0Y+6WLNkiET3%Qw=>7ezE3;4lX_;X(CFOa z5Deft@2w;l__Ery4m734T$%?P>#xa6oWmLZ%k4Wz+#X=1QRph1&bc7~e9xaCdANWp zfS>yii$|xT>p$E!Q~9ZRYC5T44eC$lUs1Kkdz`O$(X$fvjX>IqGR}gdz7Xg8-r3(M zob=@pD}MQM!HVz`pSPgO%3*z4FcHe@6S$g?v=F)@g`To;z48JmlCQL|=<^RS!OY^k z@}eWta;fDks$=v7Q|FTG?Hy%F_uFI*QYkWTC@=_U?c{fW6drNjk&@?oB?6PrRVrIc<$y;R{F{4YL|xZ z>&wzck6{d$zyGQ1=4m%-%vq~?9Dc40jKcR{(lDDN@$b7|6$oSxx{tON{5OjoyGyox z>o?(ONoga`cT)akA+055g6U@u7rTxYa~)!Y3sgfIupXGZ0NN#1rNBaH@Or!*s0K?H z)l>ZxQqHYZPw)M?t833)+Z)mRe0h>b=SK;Lhi@&K|b z(8ke|*@jd|YpnK%!FR38JQ8bfQ0i@>q-b@TG1Dke+=}#RA;0^iRBMpgCodhPMzHgU z{#u6{TJ>DJ*cb`Io7$8&$~3A>JrZUGPq_I6te(m=cACs6)@#pxo-WUS_o6lMRF$V2 z`eG^JrTs!0ukPAOCy=}6`OO2yxniQpjsKRXbK>Qrw|AEJnCZ6#1wk+aDI6uO zj7xvKEZoF(x&^KDm~sxQA+~-m)QVm6^JW z(^L_nYs9Y>_>mb)1{yYCUifsQn&oJ(Zpl!te0hp|O*x#=GwFOtVtEVlYD)Jx}nn@pKew|46H6 zNfWxtN_>rXf)mX!3YABLHl72`D@PS7F{zv3(3TfSeJnJLMt3fOoihwyBAECHCamk4 zq_0&oUp?cK*+Tri!!F?tHZ(}<#o{oY#Q5=0<~hR}ioy(wutH*mjGVdsaGicthUwU? zy#*$)KO;}!{D;NV=CxO5%2OnLl^*WvXT(z!5RVYlH;VFN^iCU*N83W{SUP3#`U^e? zLYSS|9Q9U~v8UNK?h!CNP`^G&| z({KAuUoN6-<2tzZlWyiP^3YV>B+dECFVVD?rA{NhJ3z?xBlw7XDFWtNI=xol=(=Hu*AWzag`}pq->0ne;WNrC2_E2oSh~jWy1J&FG;Hjg z*tTspw$Y%m?X@~UvYsPIu2Vz(v{hN)I7>Oko z8L2rBqL=72g?x4iqsh--alGygBmk3CHow39;aarY%Umyp+fJh+XXR}k_a|r!7L!iPfgT@5PBAEeykm;EZY>||T_?H`Vn*CixEy6Fk z;SD&@0hQy()KfepABlv51`5de=gW0mw#yzXB>uaosnXM*#lVTzqQCFv(gCvsT8A!) z^uH&$XLS@-TZ-$1C=^YO9AYN%ol7%!_gP22Urx<=e-eb#3#K0%6$au!ztu!b1cduF zrC0NibMI3FL5eQq&}K-|`zB+`o$>#Zw!4VQ`-%c5s(XWpWr!C0T%kA|1 zj*7d7)8+wT>QysywfqDp?%(l4;}g`EC~+-L^@t6aN~n=uGcij4yz14fjcW0CP5DKEb!5k$hV z;LpfZ!w^1x;n};5Rs3XvgGD%6NRYrAsXqv*7+i?m$F2)~5#nVWfe!IN9A|=<%;LF- z>h*LyOi_FOhBZea-luvBg;~m@=MB|}jvmD!%z{05yx{WLo_1n6?J)lX;vkL)HJi0L z!-dDCZ_n^ONW0Ji>fYOH$RSMj^BX_#RmI(Osz8fB2H_IGKUCW$>Bucy=lNjeDIq=p zF>?bYAdlW=g!E}}(+-Rzk^dT&hD&a8qmDX@Poog_BFKw{j(XnV>_Y_MxWYSt^ii0y zK~;W@j9V~Nn8leIVy1cz72Uy0trHS+eA`L;SWLk`-7dN9JYvg5r+VLH0mL|H z`(_5&em7}K?PL8NgQs+hqH|w)7Sp4Yr=py`9Ssdj#}2vnpQJ(T#l<#|4U{dg!;rXs z#f*WIr4lN^j86j$S_-|QwXYy|^V{JggFfB6ybyye$2 z1RUR04yAvR7q0xhz7ED6gACwXK%kJAYD{x-oIo;)G1W|pYY9;;`iYOaN^IGIN z_8$49L_{s=rMXB*MEKEUEacXazT=1Pi9cYMEO)$`Skxt16H>!5VOjmzdW*a1Jzr(( zjzBM6Vvzjt!}4qrt{i?2ufZOg`YEQ$PfY|H1ZhnSm z#EISxr&JR;_2sLuOLqHTNo-}L-5{yK*)9``@*VFBJKrh7&g%tKZtNH5)uRF}0vx(f z7ru$Jw8wwOD`vf(gMP}Iu*HI8Cdp6J7(S4e=*~=+FAq9y`%0SyT1x4>BZ^)O4lwA6 zR)bKejPllJ5?_F*>=hQ8QaOW~!X^NE!qNA9l<4n+jVctYnq~>&xw%bwGat9c<_5~G zse8$mTm%dx#~^gqRjSvn;BY^OZd;U7tjHVc80>9noqf>KA)NQQg^n^xg;bf7_&Wf1 zmniu{0=U}td|CcsI1z(ac6a}v#+(vYP8t=ZK`pyz)*W4if#`mDmZF1L!D-0Sp6)V% z6x3s+IwSDG7K5P)FR|;n)s@AH;c%X<$gfBx>`>l}i4hkGpYl@VcUKsFcVv7}oS@U4 zl*RVAf;zl|BrnqYnfOT)1}x>sP=E39t)l2RzqUMK)vmxItlV%yuSfSU%N^Om?fD|I z9q)60`dEoj-8|5_-4e~yV6DQL7XKO`SUpT`PX(DZU`&&EUB zgyXK8;N`oQ!an?MnPQ z<4cASnu6QWxw+$@YfLdAi##VY;iNUd2$bJIO3J{`h#fu7 zjm_G=g8869c=qFhEr5O1$Ua7mIFPkX|DuPjBl3MTlV^`zcPQ2vOUeB)v~U+@=KK&d zuq}nFj#m;(tiAAa{~AfwiV{mQ-FLd`Zeu*C7*IjCV ztAqHujpfZ9>0C~o)OLyDtuV%%}wP7~lnf$;^1%6+f3Jtdf zwFAut#VM@g$^H~X3U1`#r*zU_0dKZWBWF79lo6IARSu8GVXNyHHD<(-zR(%q?#1z) zE6~5GZQs&$rJF{ofzo_#$2-dPcN-Z-T&PCCOJz3fzZTq6!CCyTn9@_Bt!L}qkNt4U z&PrR>HKBT$zsb{S5B{yr9AEMDMyV}hMpWdE%u3&@21e(bL{9GATJc#TpFRKFONqjy z?$C^hWJ*HZxMSoJ&86Cb0P zjDC2+#@)`W*auLl!id*sJxXBQou=J$KpOwik};ZVchoPVx7x!&dfhK_aU^WI8DbqB zMJjCtb8=Zz(4VBDZbRRd(hrONQ-WpMVouV(06TH*LWXFs3?5ZT;&VTzVH`=H6UHuN z*$2aDqH7R=>*9VC7u^Y=+n=~1*=06#vs$n&4J;sij(OuZRmL+rt;$?UEa@wuH9HwA zE^$!8Se&_toapP*f<)MMC^d0Z7r@l{Gg;$%h36Ml$d;Xf&es38x6alc>XEMdqGa((Ah)x?} z<0gKSxxbcDBT|mI@kf16FZb2H$Rmn8AMP|;t7`bxByO_|V(Lp?P$==-Kn?T6+mlo-% z1OK=$n1WW3o$sD~1;lyXuj(nvqRU%9U1+_C0g;ASrsZ+#!luTW7!2OODSnE#f9^ad zWHnpQM@b}bBoKTv`v!mm%Yx<*$JD7?=0}e(kI!su(r!AbVq2gssoHB z+Ws$|FONg!GI3brF0{!L0mIu>lX?0_$)Qw!#?Cl5Qt{%mDzx}7H^ROTr7No`7TVgG zIfir(MDP*hu97Pp_=qlxfd;X3!WRNc8#qZYu}SCpxNFBV#%{AIz8)@2_P7N6G6I(0 z#kdNDV@8Y(e_sowz_rwSgbODO~mDrchcbdG1+xt#_59|u^QKE zSa|^nAEQ?TQir^Db_<2_8|_Do_$lbMY@QKr*Ty?GTY&# z^^;a~P9u$e!|(aY5`#TZkpHo(Nn|*;o9=-G{^aVGZ{gCloF>1MW~&s4dPCt0La8#l z!XP7tgI>^^N$r%_pW-z%1p5B$4N`3#3E@{I*$thw&ZGyRE+huNm0`8KVI;^^U+J91 zk(>T2k4Z%&E$#pDxPlb$mG5Okb6*zTH~Cc*S}BvL@w)@wwzi=1SBXKeoLmv-NeBtU zp~75<0O~CR`)X@B!F=QWcL^DkxT0xNe8ZYBIGXsBU>lE&$V>1N0dt^?%h>(8-PtmR z^ZTtUDeC1b5Z=+5%V09~N&DY9b?lj7+TT&1D@8h-cZWhAz)1hm&d1`_c7ds15|Ax>OZ6># z5*GEJZF>@6X(GBz{HwLXCHOEnK{dEUwp_+_pAqY%Ey_BLD_I}w{)XQSW+e^uC z5AuMs>rdN|LP`JE*?QTFV5J35UcweN)NRD$K0OIMSiiryzwm0%n=D55{6-qZsaRC) z#2)XSFV5tesu+fAg+RcqfIRX3A)-JSi5^m3xL?K~l2>OLlRXLIC|*w1Ns{t6rt+|# zUB0t(oy(US)TjwhJ~YVpm|MFlpyQ~#!auLhFWj4P4EJP4Lev!MLx>SR4|@ng>7}~g zizGc|#=fVC-5c@2;A-NIi}FR(tgdoMfSGgicIYgVXPNxrNBGd<8Q9kYdtXB(IwR$ThCrwE`C63gc69!PUNmm_ zvgCx+P?$7bP#*>*pOMBYUN=T60*$j)6k^yQzrx(jl@BN{CYs@*}u@(3Wq2yMylg3jf#vgNYQ<>T+IGapcphOcuMt7)c>TUcRox>rFoh$_Q_@Ckn3aC|{rJPpkxt{)h@B zZBO@FEzHP~#kPg+;PMq$4Vgdq|5Oy@lbX7dH+DM zg_&^*8XM+C{RJ}Xxx6lW2>YK3CH#+|qGkmyVlE4b8|Am4fz(ea`w%ZkXQFaVAwbu@ znVmWkcVL9mr`B9qHi2&!#%7Kip?pHl7o~bF+LTZ=x|S>f0Uob<`ZcengI{nAd63}T zl?Y^y?BM3<%8w+GCr)O1veLEGIC^L;g(cU_Pk1NPZ*c1&>LR;BdmpwJdMBI8+h(4s zTd$O+Z!2>|O)2``UR4r{nh)n1ni|m9W}<>7r1E-i4q6)^v{R`GF{d%xWvf}S<>n7U zoV_Sk64x2}gM=X|#%}n2X zQKsDJO>tS?PrmIANpvM|kc|M?0f}QD9Fy?mr@3m`Gnq`xLrf$AVJ$9(G-EJWRN)>F z3~P&3jJi}|F&!i5h7j&@CZ9MO?!5QfQfj7MbDuCq$V9M!-c>`)IB?}tA6*Nij^*i4 z3fv_rn%0u^WDJtGJ8OfFCGSdYFIE=L0%N{w_8R7-DW6ckh8-tmpQhB6@6(Ot*XJZT z_$oSRy6*YXF{*a7&-RaxzOKrFzssvlCjqE7J_VIQi7<+atD&Ldkm&~CNo=)7GU3T- z&8Li-TWV}^IRit}APvOIT{E~AOzciP2OsrCG%+nE1E1w{4@doXij^G+j9pgr1!XT) zR^gU^5+)OMDg<$CV^b!aj5|Lp6NT>$*vkZaG4QptwgE}N^HYuUk5o>AruFfXw4MO> zXPOzop02k^iS5baE?lgMM2Q^0Oj(zseA{PS-P_n9$$L05&z6_jd6zdXWr|b!9Ty2} zO+j`p3r;Q0(|5tn3MC8>IG#sC{C5C~&z<3$Hnql@fJyJ9`m< zeuKaAh@3DnEzi29Cmk6~d8vPgqffn}m1<=V(=ZGHHI1!ms?D)EyJ#0viqJ`KW{24$)jr+SATtq`cCact>V&4Yet!MKpQ;e>^~Q|sZ-`F z=vIj$b{sGEn@M-0i$Oc6B&dBK#6>&_GnlTcP4f%;sNViVN4!krWZ$mgLzy(@rBJ_J z-)$)5vNx?;WV-<3!xcFXH6aK~%HWNc(m5$u>2CVn;Mi7(_%mP9G!yNxl4JVG{>90_ zallKBCt4eALE1}^V~p9K42+iIT`4tOS+mOrh9rn*>)}n|Ettst&%Di*bkU<*n|8#} zf`8(hQ8ub7Q(wH|_5DaQ)Z({^-VHOz>OC`Cw*T0*-2Tk;>v`kj>e3(-4&uURg0^~H zD65veS>yULp2cl1SEJLg*C&K(x0WqeGQ)&}$ghg84LV=Lwsni7-$p}KHiXjc{F{%` zZ1oSm8J+a$>_$uBsIkZCm8!4i`c%$JWxz|7XSZezaK@N1JTp4+N5$(UVEnZusL7dj zm5m=p!%*@m)zZH-d+BFSr(ja8)Poe5pT%7QW?)QZ<(lmjOPjE^=9jquiw#>$_ zGx1RIQ00}Bg#ubgRvV8TZszLt&r^N_!rQI@*C6EE54KaSA!V`v ze30LQR9pQ|Qi&+$zOr!ozMq=5%dM@xe+G}H7&IvH#?%?i?_A?!GG*jAkomrXs|Y~$ zYc@+&d^$EIDnG{FPwPULZ9vT?q{dLh;tBpvSOEgfLMr&fvk{Q)P*B8_fA>l>9NWOBJk~3}vz7=uE&luO>>Krm)SJWT?7s@b%ad3S0 zQJV2{wWw+zrEXL0y=Jy*s(Mn)nF&N}JaNN^Nw=#zR*d!ESKv9xmGmSG9H5zWxK1;2 zkYdV)&kYO$S)OxxV3w{~Ow%jYWOJ;Ca5W0Ntl*gGwJ_0_zliO@!=VP`VV|pi3mJS; zZR+IZKe(2G^;eb!V2IIw>wYBs`wrx(4GVe6=O9*|@E^(&Vsw%V^of6FM~hm)#2w|sOn@Sf3OL}YEl(m2P|9iWZGHQLL zE$Zasp@O={b6-3=da&9CPnSyNc}(xs`wMvE(7+?1ZC19K+TmCMG8v5)buRrSA;FcA9T>t9(?7IE7~|nc*22g>PLzg|X5ykR?oN(CNFZ&hNX(^!w09r8H)#p$k z4bgIQX=0V@0M@W3&O? zZudbYp0%(I2}AcwQDNv?#jf^+c)psAIGK$g(ntaNU`py(l*O+EskFo!TFz_=^w92! z>8aE)-i}@6Q&i|E%_bK$RAdFPytvUBDguZNor0qGsj*>lq;w&IS;q$NG32?6uS~yRouM~ox z$aPDcPOP(;;?0D^RCfiI!%4Lnb-H#pyk;XDod;AGfN}9=o#+@Oz#&ZSl0=kzClqit zjj46!aO>6LUoy<{zt%1Bqm$M=BdDFXK32Y?*F*tm1HdoVLw;ue< zWON=`pB`LzSE_pK^$4=s9S$vS*A@roNYtH zW?jA=N+2^q6={=>6f?QF^E&>Lg?oK%rpU>o2sK+{kP5bI&f#m-P~1kj#wdfW$7cm(QMY z_-48Yak6uWo9K8Y^ zVuH{O%;^Z%;`k?^57%m7a%})n%RZTMPfK32N7l}`wu zV|RDl4+ODam2(F&s^ky-cQ^1wYvTqc@xAA}snLsq4EzLRVuZ88V)Ao0SiI9W4zQ5Qwv<2Z59v z_Q?9M}5lL7thL+b)`2wBPXf zFwVgBfhQ+r#;viwCODN9xse9@bq>GdmrxzJ5zeTGY&4jdrtg`Nqd5zovcj2a>yQFyoxw z!qU0%`EL`0trMFmKR&5{!wltG4bz3FGV!5*zWoKpa-`L4r0aAKQlf8#bleQ;?`Kfr zd+0q_?hm0!qIXI@b)Jcnbxf>X3)z-we{GP1t0M0@Zoh8>%Ph)DX}vBLMLVRkRVgVgxJUnZ*`Ap9=$JrK zKjW}zTFi%&&MOB4lr$WoOf)7Ss*YGX&lgGKT9A?N-72X5<6LsTbY-`C95#rB?Ie7w zGrHC2Mqh1CnT;LbjKsn6qA`-6KYmQ|o^fGgtDd(Jna59s4Aj@Tn1&|yq{7)w@6=nUpFyo-1A4qL+-jWQS3j@Cozsb-^!&U`x*4|f{itcVr zc{ZZtH>nrye-%31tIE@xmMPf4sIESRZVR`Q9 zsJ@#@yby1SetsAUxo$bO?F9uEzi$BNGOtPiBa7AOHOB5cjLRDSZ4xQracwb&D91jJ zj-3t1J8<>mB+=E(%#%E3WC~@)(e|;|l{GErQ`NV2VRQ=e|Qs)D`mavD8%; zFtt~P=A4#oK`>Pl{yVzYE1UxlRQ=C}g4AemfKN%_2Czy4OSk>wttB45rT|m2yuyxbe z>pBIauVTIW5YP`mY9bao>U)hCGVGoH`hCC`{Eb<9p#1NlOM^}34#QN&LPm)TmUGOk z&LVE2Y4Q)PBT`3!$8`heevt;dC6A~?G57K3fE+-K^cz2`-`D)6q}^y{H2o2RH^pk& zs&PfMeym)`TL8SIl0u7=#0S>TmT1fxJjr+F5#H7ku%ri68*g7hZd^ZC31{4N^BhP2 zK+I;vtwNVM@e|M5+X#JhU5x&So5=M={DrI5^5sM$GJy3=G^N-7g!|NyqzCMrwT4ZZ zUh2*U0$5`yyC7)M$#24>cP$V7tqxXy6hB+%*7mxcZBXY({9 zf3=UfB)V#pYN}nrG1tsHBrp(k%;)=ICaDxr-5;|P>;J`xIyFw8dz*?Ve~t|UcQBE* z@2aM%CFo6Zh(u=z5Fu8iqHr$Aph~z*5N{!$pF5EC&#Btc@e$l~G>h8nHq5B}URSCf z(Bx_(^O9*dWRg>0H_w=Lj|J?!p6K#^e$2?YBqQ-rm`lTjiD|~d{%|QD7?h~`xUSRo zr4Q3Fi6YDG5bo=;-2I)$4Cg%PFU!M!-wD636FTCoJ&&imKD!H{kp5w(PVF8*C)i@_ z$r~~BvE8T$S^vT(ax{+E+lQ$9Y&;-a&;9ZFm$JK7(g*_Hc+D?d5G~rmJ{Jw<9bk z@MCEGE<%PVRwdgf+H>Ea8ln;e1XL53FBC0B$y zTuKz7s(vGx2z;o@x3^h=gFLYx`_f7Y@g~K81XP;NPZtTqfLQa;YY}z(C~R8-;QM&f zB@LY>KBMMfOBdC}C*_=ajRBSNN)4If%aw+GDDs;;F|~)5Fw#?@;R*g>VE^JQ7Bk}9 zjR*}K_tNb&Gf@09HVCgjeIQ8|X;TilXxrxh`k-8@R#6ufK@wH~<%c#S{Uh_3(R4L> z`zL^;dG`8V3_4a$wlWg$xcAq^9HJ@uQo-i1^9f$^ppF$wuNw==d*6K5-N05oA$e{% z8P2xe5+n_A#C5yO)o+@yii(=(U8^-B(VeF-8x6vnLWOTb>dRGyU5+1f0?bi$mbH*G zu2x{I;$B@iBaS`HwaNSyQ}S_>v>OlxV6o4S?&VW;7^@Z7bLDrk>% z9X}Z9OrG6z$&o=%bkr9nKmYQ9W-^?6A^|O-0;f({2xN>~aKD@y43d}WWK0a;_ShLt zzm{y;xp+ajJZw96B#QS~^oKO7*@qOwf7wd5Tp8A3RZR+Vhu4Qo7PUndjZ`AC4ozqk z0=CD=6v5-Y)}$OhT=%$g175~~5e;GDGeTwrzSHV7m!mUJ=d-Ubj=(t99eN~|lGK~nXm(Z37cjn+e8?0H6p?@MRTh{HP2WY9@bA@Q`6LgB z;!d9>!Eijf*`H>*PEFU8e1=TON!S<7S|jbke4QW*K&v*o9eK!F?lQSFhWhOEu&)W) zARz8E8;x6rO2a~c0o*9ciuOs78PN|G-fA^D4NuTLT$HSI$E$6VjfWBs_^~vl3B~hG zOb@3Z(B_jv=dzYjP32wStBuikZ@NFicy2Vzxx4+1pY|#G&_M7bd};&z<&|%S zvTQ?OSyKHoo(Gvgpj@Ua_}l&wv(aaB^;TXM4ih^^N(S6vsJ6_y>IR3uSq_g@xz4!m%^Aj2^Te0aB*r>o<4;{70a4?-A%Va$Lo|O z;Qb`&aifpYZ+jtb*wLb@rUZab1FF0>nGpKzz;{-&%9_IYe5S z9A)BWVXHpEk|sgqkX&B%ZQJlb>3+i8z}X#B2K zM_Q?rrTo#~;pvC;@yxO_&svMX_6!EIaWzb_ICNMDOOM^U6>dI=iRy#Y=IY^Z z!10uqwLL=N>T#~z(T%A4b6%|hk9vR~Zo}}i-}Chz2q%IY(Wawi{F70qr9fR_K5OBD z&-_NGJ7t=k+?F;}xT25U(Sqcdd3B6o#y^V674s{+InNciXGMWuw%I z`ynp#uDZ*E0&v_Q7O|si+nm7CHhu?-BnT77stleFJ^pC6S|>Mr!Z#jP?VxXx-}$a< zrgwk+8UJMbgU{u_0uGpab|bd_bMQ4ZN^GPFk9YEn4{5Dmb+o#&mA>pLnTTs@=mm6V^Gy;)h&=zh z-XGe&ojzuNn+0Gcb-iXnU zo?aWcNd1z?#fuH@NAix1eD6+d_R3{!nmT-hG&b;D)D%8nimd|rvCldU=!=PV4=!rJ zrJ^vikxB+n5Q5%yK1FQwp}u%7JkrZtSpNIWZQjb?mPzJQ(%oru?3b}SetOl?6rB0@ z8>N0)6>(D_2-8jlqAcM-$fDJJWu1dN5ZF|X;MD08@AkK-FH5_6c3XY4to!E=X7P#> z5$DO;V{-1v=pu@f6M(zM(8?;<+iFX&z4chA=W+h#SLf0g5ow>?L7-0LNT!H?=J54i ze2%~A`q9bznk@9kT>c=M4&m^7-#aUBwGp;zeMR46REg7NYn}h2d+#I2{e98obY|_G zGe4k?W&XxRNvQFc@{aEbv?O!nPt6i4B36p5${9Adh*(PqtyQ;hKLItPEAk$M2tbSm zIZ1ZO!A=uc0GpdDzzs8NUTE>==Vw0dy%Af4Jf+UqhEi3LKm8h}G0!EH_3QH<4POvH zF6>)xr=xjX`cDNQN@()>(Zl13fTS=AJy`rR94xseO=(cooiAt7TyJ5;0W`w7iVy7daIEXySGOHJQDT0w2H6g`AeZ%Y~-YcvbPPLv4suIH7b zqC7*cjf?hZ;X!($G1gxpRHr@_zJ4lv>wU^>-TZjIRa%b+^2Juqx&V67yex(|LY|)0 zPW-kFmINrg*!s#uatKy&@IxfM%J|5|8weZ91ZK8!zm)vjQxsKK33c0HtD;l%hqH@> zQgyK*?ofQ;*`y*t*SWnWva5LO%@rUaYw+y{EQv*VLCe)747M{3VX`q1tEgPQ;x2SC z*K}3do}bNJt=%-*vwZgT9{b!}g;$V9yzkOD(IG_!0lmvp9-%an*cExepe3pNg*rR^ ztjgcGL1DQ-@bxu{*K;KkuTH-Lfg^K{)AEaf;c%MVaTdbmnSF;uZmvO){^9%=G`&xw zviDwWzr2PiCDmrTng~ZpHD{ixwe8Bw&vbPE{#vH0tybUl;Z}#uj!O7P7;Qs$O^7}A zfCv8)wL4k*YoU<@R0(Kx#&Ezv4Ua!)9J^2S5$FcaV`Q-&vXbj)cD%}8@UO@ilSwkL zS?m|cE&5Mdk0so6zu@;kM9h(KPYZJ6jq#~8Ij%E!l2zkc2dPetm1^)$WXmSe{03UoGXF8zrxs_U< z%6mq7X@Ot2&kE6Qr0f!HehbjY`LNZyz~6qkMKjQO=aegJACD9kTG1(yF++BsNK{M>;5`nYWFV-aE^ZJBMr21D)GBAIou0_Dd!UGl1XeO|CX zRW{1aXI$YbGMr}mYH}&vrLt`L`hi$-%gPycV%EZaFtM!?cQZWtUZm{EkfMOkn(9*w zum9FJrq``@+x4^aJa3Dsj}!(Vq9}58^Pu7sZT=#B$b`s8b1!4a?tO+Et4(0tP!AFo zb1(QVkKP{-``Rw+_ZJN=7PlhxvLv@3L{q`6CUd5e^-6pT#^%fY0WZ;HpmkIKA?-+} zD?TPXL9@7SRI1#U#+pmOryVK(I-@9L52{^cQZedxbn?U)nz@6bhkVx(0kl_QrtCjm zwi9O}+wXU0idoz>OoOl_E*AUX)Gc}&11vc8qQt=btML#uYWU{;wC@ow=gFspHLCG+ z!R7d6`%As)?ZnvE+Fk>CNSm`+T1;x##Hddm7dLnC!jYshojBMH z)aI_mFT8N4eU={bnG~(Hd)X42sF43wyhG9u^r2PnF<$(vTT3Kc ziD_G)mnkR|*9Z_5q2C+OUB+Ka@h}pbiQou+Hux8|=hxRQ z#onCH(3Al(lBS4ly;vwuffVPgTn^;q&JTZ<6rxfo!m*-b$u;&@)>~RytW`$$_*Nym z&NZ0G!8OuyhOJ1ZE&-%XTMx(112f;2nrEqtP9i(D+&)hM1Q%?O{{&6lE7u8Jbu8Q} z8#xGD#d1OZbfC%jX# zr5nSB5mtb2Mog$t+#d;3ZX4d+mMz_N42Q{NaI zg4crcM$Df>9dTK;-DjVr!8?v}s>MUXBV@pi2(*;wNj<+fb7j2?6rz=5(J_mxTtvZE z723D0I3fWD+{D1Am*w6M#KaY@!b;(t%0Ok!ur5)Gf)_nfa-SKfEJsIcYu)+nWluMR zo)B0{Zs`<_A9uRy{GyV3acu=!#IWQljQSlY_Y@;L*;53QQPDMa$1sGm_xBwcu*=)x5Wp96VJvr0hLS5XzR7g`Kv`wcbl>pE&}aSB+{FlE%g)fKMKw&fJyW+kRvg z#`~-LoLEj~M^>?@RPX4F<|jM7V-~8v(?d_f%#88HW?ME64)Yh=YsAO~GuhN5*Nok*Mx z!2D}Ggkp)B8huK@p7&NKE|cCLWzF{@BVWuj$$LG=^_EMU?Z@8I%G4*#ZRHZRkVGj> zx?^8(C4DfID#(suRri)P;N{xGz`z0Pkp%Ynm(Wa+0dr9$kG^d$%0`ph>0B^GB|gNg zxtm1HS#`L?{g@Z9j^{HM2(w)&$sAev*nehEzsL5EP6{W0n6at)b-(qUXLDA>c|3?S7b^oSyC>3D0oG zZQ6>>GW=ZMKHhu3weWbjoSbnC0CwZaU8VB>nZbt3TS8LD<2}-&ZRbudqjvsb3&hkjzJJd^DCvp~vZwaUTQP))Q=I37B#kP}L!U(zoIy<2{qZc!#+xEHoSB(v z!^FZ8$dxwnP90|!8>dts{4>JT0=%>x3j$iKUP-bJZFa)U%nbO0uHyOmc_S1Nw=w#S z_2J3Rx}3=9+dn3PL-te4+>UGH-r1)L>qDe@ji?MN8lD0EG7^#MSFd_vQY-3)Intjb zm!>2Zgrod%W>^TJj+nCq(b3U))P;$ilRHLjULeyYxi^CfjW54nn~2i$5h?ksEVN7j zXRJugKXj?qTk6nf*BKZX>NYw(f%4$}$Bar!O45>8n5tQGiRhEn^eItX0s^+|w<=`} zsP@A-{PQS|Jwl&EUmS=TaFoF&z=N-CjxZ5GhGbz{NcpKhe*D+nZpayFdRp5Th=nA2 zeCyo|7Dz~RA)xn`ZO&_sm!Php7CrX)-RXQUGfuQN4>vc;;6ZuKcCQMp3gM^~cb4nq z8$O42jw9}*l^cVQIHSy>U8`|%a(B7ME757F+P89(`G`@`k9d&Wk>5XuQAh64%9 zg-@RDhd5nxv->K~)!X{i!=sN7@WHFh-7&DY>1)e7=;6>)&$HKl^;@0&WlK)?8U1_> zF~9Nlw_ca-voOdL4}!}UX)G==(coWPtRDc5&n_dxEuWh)0sy4Q)%+9XhgfHa5D1W(0!K8SWmh zbk*XSd(=eg4^=FwR-u_r#$TSSD9)7yX?DHeTEj~}v&+}<5@LNrz>Mxtvnr^TM0T2mL=@nWFQRyFHgKK1|uqay;m z-kv}ppKcU4N4F-mD2Og7HWlj~Yt5=ft`aQP{H1N-@dtuE=19dH)`%1EmCJ?k71oIG6kQ!aC;Xk8w3=9%luFxNbFd?DF+_PB>JBkzk2)eZ!!2Ya(1ZGdB z-avN!`Sa(_rrRhGvhR^_lr3wDnm0oz1$nQG6h1w}(fw5cG+WFhjyWb9_IgU&^9!aB ziXQPV<~zdGQV;Bw(hqXOD{a{rO1TjWd{gGWoXhjDGu>c9$kFtryt4A9mfk)8yvVY+w)Sr#o19WXNZb?|buN^BHB!Rm(Y&S_-PP z3zRNRin}2VEJ(GcdbyiE_}BmW`FZzdt{qM?mNrLres$tdY!M)v__**tQ+Mn>4kziD RTfjv$44$rjF6*2UngG>dG6ett literal 0 HcmV?d00001 diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json new file mode 100644 index 0000000..fa39443 --- /dev/null +++ b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg b/Examples/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/Assets.xcassets/matrix.imageset/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19df7338dfbe10f6bf657186e20be472facab8fb GIT binary patch literal 111650 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