From e59b4566b8cc3f43751ae58fd3994f0c55f8ac81 Mon Sep 17 00:00:00 2001 From: bagusandinata Date: Sat, 31 Jul 2021 18:30:12 +0700 Subject: [PATCH] create pod RHViewStateKit --- .gitignore | 2 + Example/Podfile | 12 + Example/Podfile.lock | 23 + .../RHViewStateKit.podspec.json | 30 + Example/Pods/Manifest.lock | 23 + Example/Pods/Pods.xcodeproj/project.pbxproj | 1187 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Example/Pods/SnapKit/LICENSE | 19 + Example/Pods/SnapKit/README.md | 136 ++ Example/Pods/SnapKit/Source/Constraint.swift | 341 +++++ .../SnapKit/Source/ConstraintAttributes.swift | 199 +++ .../SnapKit/Source/ConstraintConfig.swift | 37 + .../Source/ConstraintConstantTarget.swift | 213 +++ .../Pods/SnapKit/Source/ConstraintDSL.swift | 194 +++ .../Source/ConstraintDescription.swift | 69 + .../ConstraintDirectionalInsetTarget.swift | 49 + .../Source/ConstraintDirectionalInsets.swift | 34 + .../Source/ConstraintInsetTarget.swift | 72 + .../SnapKit/Source/ConstraintInsets.swift | 35 + .../Pods/SnapKit/Source/ConstraintItem.swift | 61 + .../ConstraintLayoutGuide+Extensions.swift | 36 + .../Source/ConstraintLayoutGuide.swift | 37 + .../Source/ConstraintLayoutGuideDSL.swift | 66 + .../Source/ConstraintLayoutSupport.swift | 36 + .../Source/ConstraintLayoutSupportDSL.swift | 56 + .../Pods/SnapKit/Source/ConstraintMaker.swift | 212 +++ .../Source/ConstraintMakerEditable.swift | 64 + .../Source/ConstraintMakerExtendable.swift | 179 +++ .../Source/ConstraintMakerFinalizable.swift | 49 + .../Source/ConstraintMakerPriortizable.swift | 68 + .../Source/ConstraintMakerRelatable.swift | 115 ++ .../Source/ConstraintMultiplierTarget.swift | 75 ++ .../Source/ConstraintOffsetTarget.swift | 69 + .../SnapKit/Source/ConstraintPriority.swift | 77 ++ .../Source/ConstraintPriorityTarget.swift | 85 ++ .../Source/ConstraintRelatableTarget.swift | 72 + .../SnapKit/Source/ConstraintRelation.swift | 48 + .../Source/ConstraintView+Extensions.swift | 152 +++ .../Pods/SnapKit/Source/ConstraintView.swift | 35 + .../SnapKit/Source/ConstraintViewDSL.swift | 101 ++ Example/Pods/SnapKit/Source/Debugging.swift | 169 +++ .../SnapKit/Source/LayoutConstraint.swift | 61 + .../SnapKit/Source/LayoutConstraintItem.swift | 93 ++ Example/Pods/SnapKit/Source/Typealiases.swift | 42 + .../Source/UILayoutSupport+Extensions.swift | 36 + .../Pods-RHViewStateKit_Example-Info.plist | 26 + ...StateKit_Example-acknowledgements.markdown | 49 + ...iewStateKit_Example-acknowledgements.plist | 87 ++ .../Pods-RHViewStateKit_Example-dummy.m | 5 + .../Pods-RHViewStateKit_Example-frameworks.sh | 187 +++ .../Pods-RHViewStateKit_Example-umbrella.h | 16 + ...Pods-RHViewStateKit_Example.debug.xcconfig | 14 + .../Pods-RHViewStateKit_Example.modulemap | 6 + ...ds-RHViewStateKit_Example.release.xcconfig | 14 + .../Pods-RHViewStateKit_Tests-Info.plist | 26 + ...ewStateKit_Tests-acknowledgements.markdown | 3 + ...HViewStateKit_Tests-acknowledgements.plist | 29 + .../Pods-RHViewStateKit_Tests-dummy.m | 5 + .../Pods-RHViewStateKit_Tests-frameworks.sh | 185 +++ .../Pods-RHViewStateKit_Tests-umbrella.h | 16 + .../Pods-RHViewStateKit_Tests.debug.xcconfig | 11 + .../Pods-RHViewStateKit_Tests.modulemap | 6 + ...Pods-RHViewStateKit_Tests.release.xcconfig | 11 + .../RHViewStateKit/RHViewStateKit-Info.plist | 26 + .../RHViewStateKit/RHViewStateKit-dummy.m | 5 + .../RHViewStateKit/RHViewStateKit-prefix.pch | 12 + .../RHViewStateKit/RHViewStateKit-umbrella.h | 16 + .../RHViewStateKit.debug.xcconfig | 14 + .../RHViewStateKit/RHViewStateKit.modulemap | 6 + .../RHViewStateKit.release.xcconfig | 14 + .../SnapKit/SnapKit-Info.plist | 26 + .../SnapKit/SnapKit-dummy.m | 5 + .../SnapKit/SnapKit-prefix.pch | 12 + .../SnapKit/SnapKit-umbrella.h | 16 + .../SnapKit/SnapKit.debug.xcconfig | 12 + .../SnapKit/SnapKit.modulemap | 6 + .../SnapKit/SnapKit.release.xcconfig | 12 + .../RHViewStateKit.xcodeproj/project.pbxproj | 665 +++++++++ .../contents.xcworkspacedata | 7 + .../xcschemes/RHViewStateKit-Example.xcscheme | 117 ++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../Animation/EActivityIndicatorShape.swift | 75 ++ .../Animation/EActivityIndicatorView.swift | 167 +++ .../Animation/EAnimationBallPulseSync.swift | 50 + .../EAnimationMultipleBallClipRotate.swift | 76 ++ Example/RHViewStateKit/AppDelegate.swift | 49 + .../Base.lproj/LaunchScreen.xib | 46 + .../RHViewStateKit/Base.lproj/Main.storyboard | 30 + .../ExampleTableViewController.swift | 125 ++ .../ExampleTableView/TableViewState.swift | 173 +++ .../ExampleViewController.swift | 133 ++ Example/RHViewStateKit/Extension.swift | 45 + .../AppIcon.appiconset/Contents.json | 53 + .../Images.xcassets/Contents.json | 6 + .../ic-arrow-right.imageset/Contents.json | 23 + .../ic-arrow-right.imageset/Vector 3.png | Bin 0 -> 246 bytes .../ic-arrow-right.imageset/Vector 3@2x.png | Bin 0 -> 418 bytes .../ic-arrow-right.imageset/Vector 3@3x.png | Bin 0 -> 481 bytes .../ic-empty-data.imageset/011-surprise 1.png | Bin 0 -> 14040 bytes .../011-surprise 1@2x.png | Bin 0 -> 29431 bytes .../011-surprise 1@3x.png | Bin 0 -> 40954 bytes .../ic-empty-data.imageset/Contents.json | 23 + .../022-workout 1.png | Bin 0 -> 16671 bytes .../022-workout 1@2x.png | Bin 0 -> 35485 bytes .../022-workout 1@3x.png | Bin 0 -> 49090 bytes .../ic-internal-error.imageset/Contents.json | 23 + .../004-cauldron 1.png | Bin 0 -> 17195 bytes .../004-cauldron 1@2x.png | Bin 0 -> 36815 bytes .../004-cauldron 1@3x.png | Bin 0 -> 52156 bytes .../ic-maintenance.imageset/Contents.json | 23 + .../015-question 1.png | Bin 0 -> 15992 bytes .../015-question 1@2x.png | Bin 0 -> 34346 bytes .../015-question 1@3x.png | Bin 0 -> 48080 bytes .../ic-no-internet.imageset/Contents.json | 23 + Example/RHViewStateKit/Info.plist | 39 + .../Main/ItemTableViewCell.swift | 78 ++ .../Main/MainViewController.swift | 101 ++ Example/RHViewStateKit/ViewController.swift | 24 + Example/Tests/Info.plist | 24 + Example/Tests/Tests.swift | 28 + LICENSE | 19 + RHViewStateKit.podspec | 24 + Source/AssociationPolicy.swift | 50 + Source/RHButtonConfiguration.swift | 51 + Source/RHDefaultLoading.swift | 63 + Source/RHDefaultViewState.swift | 518 +++++++ Source/RHDescriptionConfiguration.swift | 18 + Source/RHImageConfiguration.swift | 24 + Source/RHLoadingConfiguration.swift | 24 + Source/RHPositionConfiguration.swift | 42 + Source/RHTitleConfiguration.swift | 18 + Source/RHViewCollectionState.swift | 67 + Source/RHViewConfiguration.swift | 27 + Source/RHViewState+DataSource.swift | 82 ++ Source/RHViewState+Delegate.swift | 13 + Source/RHViewState.swift | 133 ++ Source/RHViewStateAnimation.swift | 30 + Source/UILabel+TextWidth.swift | 19 + Source/UIView.swift | 30 + _Pods.xcodeproj | 1 + 142 files changed, 9159 insertions(+) create mode 100644 Example/Podfile create mode 100644 Example/Podfile.lock create mode 100644 Example/Pods/Local Podspecs/RHViewStateKit.podspec.json create mode 100644 Example/Pods/Manifest.lock create mode 100644 Example/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Example/Pods/SnapKit/LICENSE create mode 100644 Example/Pods/SnapKit/README.md create mode 100644 Example/Pods/SnapKit/Source/Constraint.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintAttributes.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintConfig.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintDSL.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintDescription.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintInsets.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintItem.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMaker.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintPriority.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintRelation.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintView.swift create mode 100644 Example/Pods/SnapKit/Source/ConstraintViewDSL.swift create mode 100644 Example/Pods/SnapKit/Source/Debugging.swift create mode 100644 Example/Pods/SnapKit/Source/LayoutConstraint.swift create mode 100644 Example/Pods/SnapKit/Source/LayoutConstraintItem.swift create mode 100644 Example/Pods/SnapKit/Source/Typealiases.swift create mode 100644 Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.markdown create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.plist create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-dummy.m create mode 100755 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-umbrella.h create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.release.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.markdown create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.plist create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-dummy.m create mode 100755 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-frameworks.sh create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-umbrella.h create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap create mode 100644 Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.release.xcconfig create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-dummy.m create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-umbrella.h create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.modulemap create mode 100644 Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.release.xcconfig create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap create mode 100644 Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig create mode 100644 Example/RHViewStateKit.xcodeproj/project.pbxproj create mode 100644 Example/RHViewStateKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Example/RHViewStateKit.xcodeproj/xcshareddata/xcschemes/RHViewStateKit-Example.xcscheme create mode 100644 Example/RHViewStateKit.xcworkspace/contents.xcworkspacedata create mode 100644 Example/RHViewStateKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Example/RHViewStateKit/Animation/EActivityIndicatorShape.swift create mode 100644 Example/RHViewStateKit/Animation/EActivityIndicatorView.swift create mode 100644 Example/RHViewStateKit/Animation/EAnimationBallPulseSync.swift create mode 100644 Example/RHViewStateKit/Animation/EAnimationMultipleBallClipRotate.swift create mode 100644 Example/RHViewStateKit/AppDelegate.swift create mode 100644 Example/RHViewStateKit/Base.lproj/LaunchScreen.xib create mode 100644 Example/RHViewStateKit/Base.lproj/Main.storyboard create mode 100644 Example/RHViewStateKit/ExampleTableView/ExampleTableViewController.swift create mode 100644 Example/RHViewStateKit/ExampleTableView/TableViewState.swift create mode 100644 Example/RHViewStateKit/ExampleUIViewContoller/ExampleViewController.swift create mode 100644 Example/RHViewStateKit/Extension.swift create mode 100644 Example/RHViewStateKit/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3@2x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3@3x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1@2x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1@3x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1@2x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1@3x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/004-cauldron 1.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/004-cauldron 1@2x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/004-cauldron 1@3x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/Contents.json create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1@2x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1@3x.png create mode 100644 Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/Contents.json create mode 100644 Example/RHViewStateKit/Info.plist create mode 100644 Example/RHViewStateKit/Main/ItemTableViewCell.swift create mode 100644 Example/RHViewStateKit/Main/MainViewController.swift create mode 100644 Example/RHViewStateKit/ViewController.swift create mode 100644 Example/Tests/Info.plist create mode 100644 Example/Tests/Tests.swift create mode 100644 LICENSE create mode 100644 RHViewStateKit.podspec create mode 100644 Source/AssociationPolicy.swift create mode 100644 Source/RHButtonConfiguration.swift create mode 100644 Source/RHDefaultLoading.swift create mode 100644 Source/RHDefaultViewState.swift create mode 100644 Source/RHDescriptionConfiguration.swift create mode 100644 Source/RHImageConfiguration.swift create mode 100644 Source/RHLoadingConfiguration.swift create mode 100644 Source/RHPositionConfiguration.swift create mode 100644 Source/RHTitleConfiguration.swift create mode 100644 Source/RHViewCollectionState.swift create mode 100644 Source/RHViewConfiguration.swift create mode 100644 Source/RHViewState+DataSource.swift create mode 100644 Source/RHViewState+Delegate.swift create mode 100644 Source/RHViewState.swift create mode 100644 Source/RHViewStateAnimation.swift create mode 100644 Source/UILabel+TextWidth.swift create mode 100644 Source/UIView.swift create mode 120000 _Pods.xcodeproj diff --git a/.gitignore b/.gitignore index 421ae0b..1034bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,5 @@ fastlane/test_output # https://github.com/johnno1962/injectionforxcode iOSInjectionProject/ + +.DS_Store diff --git a/Example/Podfile b/Example/Podfile new file mode 100644 index 0000000..3667e55 --- /dev/null +++ b/Example/Podfile @@ -0,0 +1,12 @@ +use_frameworks! + +platform :ios, '10.0' + +target 'RHViewStateKit_Example' do + pod 'RHViewStateKit', :path => '../' + + target 'RHViewStateKit_Tests' do + inherit! :search_paths + + end +end diff --git a/Example/Podfile.lock b/Example/Podfile.lock new file mode 100644 index 0000000..e302f26 --- /dev/null +++ b/Example/Podfile.lock @@ -0,0 +1,23 @@ +PODS: + - RHViewStateKit (1.0.0): + - SnapKit (= 5.0.1) + - SnapKit (5.0.1) + +DEPENDENCIES: + - RHViewStateKit (from `../`) + +SPEC REPOS: + trunk: + - SnapKit + +EXTERNAL SOURCES: + RHViewStateKit: + :path: "../" + +SPEC CHECKSUMS: + RHViewStateKit: eed7cf528a3798781d4f08022485071650e9edbc + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb + +PODFILE CHECKSUM: 79ccd6c3760d3225684279bbe90e94d07d721d79 + +COCOAPODS: 1.10.2 diff --git a/Example/Pods/Local Podspecs/RHViewStateKit.podspec.json b/Example/Pods/Local Podspecs/RHViewStateKit.podspec.json new file mode 100644 index 0000000..41fcfe5 --- /dev/null +++ b/Example/Pods/Local Podspecs/RHViewStateKit.podspec.json @@ -0,0 +1,30 @@ +{ + "name": "RHViewStateKit", + "version": "1.0.0", + "summary": "RHViewState provides fully customizable configuration to change state in your view", + "platforms": { + "ios": "10.0" + }, + "swift_versions": "5.1", + "requires_arc": true, + "homepage": "https://github.com/bagusandinata/RHViewStateKit", + "license": { + "type": "MIT", + "file": "LICENSE" + }, + "authors": { + "bagusandinata": "bagusandinata@icloud.com" + }, + "source": { + "git": "https://github.com/bagusandinata/RHViewStateKit.git", + "tag": "1.0.0" + }, + "frameworks": "UIKit", + "source_files": "Source/*.swift", + "dependencies": { + "SnapKit": [ + "5.0.1" + ] + }, + "swift_version": "5.1" +} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock new file mode 100644 index 0000000..e302f26 --- /dev/null +++ b/Example/Pods/Manifest.lock @@ -0,0 +1,23 @@ +PODS: + - RHViewStateKit (1.0.0): + - SnapKit (= 5.0.1) + - SnapKit (5.0.1) + +DEPENDENCIES: + - RHViewStateKit (from `../`) + +SPEC REPOS: + trunk: + - SnapKit + +EXTERNAL SOURCES: + RHViewStateKit: + :path: "../" + +SPEC CHECKSUMS: + RHViewStateKit: eed7cf528a3798781d4f08022485071650e9edbc + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb + +PODFILE CHECKSUM: 79ccd6c3760d3225684279bbe90e94d07d721d79 + +COCOAPODS: 1.10.2 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b19e6c8 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1187 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0125CC4A36C88A722195CAC1294D1ABA /* RHViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748C914FBE486E1A47C4CE01A66F51FA /* RHViewConfiguration.swift */; }; + 0182A3D3332AECD72450D3CD2519B5D4 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */; }; + 048476C42E91460983E98D2E5617E237 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */; }; + 05380B582C925162ED673B4D2240E8E3 /* RHLoadingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C8BB3DA246D13B0F4E32A0F5ADE5F6 /* RHLoadingConfiguration.swift */; }; + 054008EEFE72D6DF7C28842F474B04C7 /* RHImageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0058394C54F3353D969F8FD6F66AB331 /* RHImageConfiguration.swift */; }; + 0C4763B98C866C2D0B40AC4C5A330EA1 /* RHViewState+Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55415A3B206F4C09FBD6F414F7CD3B8B /* RHViewState+Delegate.swift */; }; + 14CA5DDBDE92C4ADA3416241DC0BE669 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F62D8A0C11B68CD054C554239D53E834 /* UIView.swift */; }; + 16FF6723D82F05282A66F2DB037DE5B9 /* RHViewStateKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F69EF54B337C3AAF3FE524441CDCEFA /* RHViewStateKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17806A6544F7D9AB041FC8878E3F83C0 /* RHViewCollectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A31DC412B1ABF37E535AE5557D57CA30 /* RHViewCollectionState.swift */; }; + 1873B75811C92AF916A0EBE5B6B614FB /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */; }; + 1CFFE7B57D171C9297B0C3BA184F87DF /* RHViewStateKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94201BA35465AC641AD89232885C0C2C /* RHViewStateKit-dummy.m */; }; + 2911B5E55A59E62DADF4196FE31F2E15 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */; }; + 2C9FAE3A220BCFC61144CBD8A68A73C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */; }; + 2CD1A09C4434EB01D666B846BBEEFE27 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */; }; + 313DAB871B76CD9484357B2F70625FD3 /* Pods-RHViewStateKit_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 60734E71DA41D5E53B1C0AA824A4149B /* Pods-RHViewStateKit_Example-dummy.m */; }; + 314F8B113A098B93758591CD23FCFE93 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */; }; + 3AAF5D454CC438D3F6442B36BCE67A0D /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */; }; + 43B9A7628E8D57AC5728E583EC9D7E77 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */; }; + 4863A04B9B3AF213D590F9C8A3990A98 /* RHViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C796ECCFF8AF7939F2F7687FBC0BAA5 /* RHViewState.swift */; }; + 489F385459C6CDF8A53E93D785A9C3BA /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */; }; + 4CA57276E1AD9F27CE1660F631D8218D /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */; }; + 4E46F03A3985E8646BAC8FA51AF546DB /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */; }; + 540AD42C93798F743FA7EF2881877D43 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */; }; + 54B18A94EE7F59F613DB11D2A98D1F56 /* RHButtonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EEF9CF5165C61D936F4DB137EF85986 /* RHButtonConfiguration.swift */; }; + 64CE3ED663B1EF2CA8E12C6326AC9909 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */; }; + 6DFBEB88A23C4553463143476A083F80 /* Pods-RHViewStateKit_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E95BAA563DC916B26122950FEC3F7BC /* Pods-RHViewStateKit_Tests-dummy.m */; }; + 6FB7C9FEF88C2D9406614FF2ACC19F47 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */; }; + 7546B906779A55EB7B82617393AE43A3 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */; }; + 76C6FE4EDB163E175683FB44CD91F3FF /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */; }; + 8709D68FA43D6B4008965506611AA691 /* UILabel+TextWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E70FFBD40E32D0776A2B14D315224A /* UILabel+TextWidth.swift */; }; + 877CE1770557AE22021A18D7960FC687 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */; }; + 882EF84C07F7C6DCBB979DBBC0B95318 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */; }; + 8EACD59A411198654AB3137C39020746 /* Pods-RHViewStateKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C423093FE675FDD0950DFB01BCD2F2 /* Pods-RHViewStateKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9176D1AA04DC8AEEFABCA02A5929486B /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */; }; + 92A39A4A1A1094F27490A2329E516C35 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */; }; + 955E9AF5A23E0AE21A29C2790C796887 /* RHTitleConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 619FB6A9D2B28D69A10E666BE37AE15A /* RHTitleConfiguration.swift */; }; + 9A36BD532F50F622C6C5C096012BF8ED /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */; }; + 9D914D41A2364388B45C0EC205FCA83C /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */; }; + A730F94A306FD7FE5454A01FB9E2D4F4 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */; }; + A736787C0AA7CE424CA7AECB4726FD8E /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */; }; + A7EC12C6FE05F8B396D55796A2C44F7C /* Pods-RHViewStateKit_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 72B50A29067CDBEFDCB6E3E74760F532 /* Pods-RHViewStateKit_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9D5250A15EA7B51823B720058D072DF /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */; }; + B1ED1778FF7D6EA788CB4E022810495E /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */; }; + B5F72555E9AA8E1B0A1052E57C969926 /* RHDefaultViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587A36FD57FBA1629BDB9367EB798F91 /* RHDefaultViewState.swift */; }; + C8735DA80CAE830D735393898B823B66 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E769393FE2F7DCF3E342575F5DF05239 /* SnapKit.framework */; }; + CBDDE864F6D788222535101C83A141FC /* RHViewStateAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC929EC9D87C41C243058C7C12C1FF36 /* RHViewStateAnimation.swift */; }; + CFD40566576A4DB6D7A213E0285C49D8 /* RHDescriptionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31567371D500544DFA5DE399DB87CF9F /* RHDescriptionConfiguration.swift */; }; + D0C2F56F7A65B474FEB226048591C869 /* RHPositionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C2CA9EAEC139DF3A81F37C56A891565 /* RHPositionConfiguration.swift */; }; + D1690E4933E7746E1710DF8872B50EB4 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */; }; + D25E2A7F5619AE67D685E70602D04C21 /* RHDefaultLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED40681B2472449B7AA1E8BEBCD10F32 /* RHDefaultLoading.swift */; }; + D35A86882F758022DD86180677016754 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */; }; + D6B20511EAFAEFFD03B738ECBC55163D /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */; }; + D70A1ABC843258FBD8105076C89F405D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */; }; + DAE27DE0DF7F3F175C55D66E34646039 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */; }; + E134174E010FE7B40B6BD50C74795127 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */; }; + E157DF5631B333E92BE502E0A544338B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */; }; + E410F63EE9984624FF764BA6478B6BC3 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */; }; + E52D44B70234F19F0C848051564EAEC3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68D1B94523097CAB40FE2A587B7A6A59 /* UIKit.framework */; }; + E69E0C50C869ABFCF113BCDCDE4A8C24 /* RHViewState+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9EA6F246E81793F97AE0FED302BA06B /* RHViewState+DataSource.swift */; }; + EE57C45C37F61AFD2D2CFE19FC407E19 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */; }; + EF96A0D5F9D8AC912F2889F7760FEBD8 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2BD33332FA939677BAA2C9B2A5950B3 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */; }; + F3C9E481FFCE3BA9F2A6A5F8661DF4FA /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */; }; + F75D0D91FA8334647234AF60068FA437 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */; }; + FE307D1D14B7AA1267284B2491958C74 /* AssociationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6CA820421B61B1A13D55C878D1DBEF7 /* AssociationPolicy.swift */; }; + FED90BB50DD5C4659C4D6AF0F2A6024C /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */; }; + FEEB86B35DAB9A5053B0F204D54B60CC /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3DE904DFDEE35DAC6F6805695F4D676E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A0EBD8A851EDA1AF01C039F2C3AC74B; + remoteInfo = RHViewStateKit; + }; + 5A1314872650690D2240510083BBDB5C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B91233CA26B0D65B291C2E8E7E65D5CD; + remoteInfo = "Pods-RHViewStateKit_Example"; + }; + BAA62A7733276590D7D0995A9860410C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + E958F054CD16FC50B4D2ED463E56068C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0058394C54F3353D969F8FD6F66AB331 /* RHImageConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHImageConfiguration.swift; path = Source/RHImageConfiguration.swift; sourceTree = ""; }; + 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; + 024A9098B65CB3681496B4F0F0FF640D /* Pods_RHViewStateKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RHViewStateKit_Example.framework; path = "Pods-RHViewStateKit_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0344FE02A5F4DFC1B8FF99EF8C365F55 /* Pods-RHViewStateKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHViewStateKit_Tests.debug.xcconfig"; sourceTree = ""; }; + 063DB8D843507981999BA078C21A4C98 /* Pods-RHViewStateKit_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHViewStateKit_Example-frameworks.sh"; sourceTree = ""; }; + 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; + 12C627C9E916AFFD50374C4D271FD8A9 /* RHViewStateKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RHViewStateKit-Info.plist"; sourceTree = ""; }; + 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; + 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; + 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; + 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; + 27CBD46D0A9F8CF659DF3AC9FCADC329 /* Pods-RHViewStateKit_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-RHViewStateKit_Tests.modulemap"; sourceTree = ""; }; + 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; + 2C2CA9EAEC139DF3A81F37C56A891565 /* RHPositionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHPositionConfiguration.swift; path = Source/RHPositionConfiguration.swift; sourceTree = ""; }; + 3099CCCB5354B1F6EA7AC21898BD0C27 /* Pods-RHViewStateKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHViewStateKit_Tests.release.xcconfig"; sourceTree = ""; }; + 314E4582A9D16E426518833C3665B560 /* Pods-RHViewStateKit_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHViewStateKit_Example-Info.plist"; sourceTree = ""; }; + 31567371D500544DFA5DE399DB87CF9F /* RHDescriptionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHDescriptionConfiguration.swift; path = Source/RHDescriptionConfiguration.swift; sourceTree = ""; }; + 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 391A6F8B42D2CD885F8F3C4CE6859439 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; + 3C796ECCFF8AF7939F2F7687FBC0BAA5 /* RHViewState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHViewState.swift; path = Source/RHViewState.swift; sourceTree = ""; }; + 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; + 43C8BB3DA246D13B0F4E32A0F5ADE5F6 /* RHLoadingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHLoadingConfiguration.swift; path = Source/RHLoadingConfiguration.swift; sourceTree = ""; }; + 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; + 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; + 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; + 48800EF45B9EC6CDD220C068D73E66AB /* Pods-RHViewStateKit_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHViewStateKit_Tests-Info.plist"; sourceTree = ""; }; + 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; + 50D146F8C095151C1E1DF0132EB9E966 /* Pods-RHViewStateKit_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RHViewStateKit_Example-acknowledgements.markdown"; sourceTree = ""; }; + 51E1F8752DC2EFB827475BD2D7EBB708 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; + 54F0E810001428E73F71DD8E89EA5B97 /* RHViewStateKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RHViewStateKit.modulemap; sourceTree = ""; }; + 55415A3B206F4C09FBD6F414F7CD3B8B /* RHViewState+Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RHViewState+Delegate.swift"; path = "Source/RHViewState+Delegate.swift"; sourceTree = ""; }; + 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; + 587A36FD57FBA1629BDB9367EB798F91 /* RHDefaultViewState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHDefaultViewState.swift; path = Source/RHDefaultViewState.swift; sourceTree = ""; }; + 5AB16C72997EA695133937C5D86E15AF /* RHViewStateKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RHViewStateKit-prefix.pch"; sourceTree = ""; }; + 60734E71DA41D5E53B1C0AA824A4149B /* Pods-RHViewStateKit_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RHViewStateKit_Example-dummy.m"; sourceTree = ""; }; + 619FB6A9D2B28D69A10E666BE37AE15A /* RHTitleConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHTitleConfiguration.swift; path = Source/RHTitleConfiguration.swift; sourceTree = ""; }; + 62E455378CC11AC4F7D6BF581DD8B785 /* Pods-RHViewStateKit_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-RHViewStateKit_Example.modulemap"; sourceTree = ""; }; + 63E4F78BDAFF490544268F9DEE1AA35A /* Pods-RHViewStateKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHViewStateKit_Example.release.xcconfig"; sourceTree = ""; }; + 648E6697612356C99237FF6BF7B0B634 /* Pods-RHViewStateKit_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHViewStateKit_Example-acknowledgements.plist"; sourceTree = ""; }; + 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; + 68D1B94523097CAB40FE2A587B7A6A59 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; + 6EEF9CF5165C61D936F4DB137EF85986 /* RHButtonConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHButtonConfiguration.swift; path = Source/RHButtonConfiguration.swift; sourceTree = ""; }; + 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 72B50A29067CDBEFDCB6E3E74760F532 /* Pods-RHViewStateKit_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RHViewStateKit_Example-umbrella.h"; sourceTree = ""; }; + 748C914FBE486E1A47C4CE01A66F51FA /* RHViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHViewConfiguration.swift; path = Source/RHViewConfiguration.swift; sourceTree = ""; }; + 7889131C1139F96BBDA94CEE2E694763 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; + 7C151ED993E980B7CEA7FFB748E926F7 /* RHViewStateKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RHViewStateKit.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; + 8F69EF54B337C3AAF3FE524441CDCEFA /* RHViewStateKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RHViewStateKit-umbrella.h"; sourceTree = ""; }; + 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; + 94201BA35465AC641AD89232885C0C2C /* RHViewStateKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RHViewStateKit-dummy.m"; sourceTree = ""; }; + 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; + 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E95BAA563DC916B26122950FEC3F7BC /* Pods-RHViewStateKit_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RHViewStateKit_Tests-dummy.m"; sourceTree = ""; }; + A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; + A2C423093FE675FDD0950DFB01BCD2F2 /* Pods-RHViewStateKit_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RHViewStateKit_Tests-umbrella.h"; sourceTree = ""; }; + A31DC412B1ABF37E535AE5557D57CA30 /* RHViewCollectionState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHViewCollectionState.swift; path = Source/RHViewCollectionState.swift; sourceTree = ""; }; + A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; + A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; + BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; + C26D26B27DB834D8733B9D594E353B2B /* RHViewStateKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RHViewStateKit.framework; path = RHViewStateKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; + D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; + D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; + D6CA820421B61B1A13D55C878D1DBEF7 /* AssociationPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationPolicy.swift; path = Source/AssociationPolicy.swift; sourceTree = ""; }; + E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + E14A09DC3AD8CA84464FEC37F0FC99D1 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; + E1E70FFBD40E32D0776A2B14D315224A /* UILabel+TextWidth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILabel+TextWidth.swift"; path = "Source/UILabel+TextWidth.swift"; sourceTree = ""; }; + E2412B25ADDEC58A3655152D8A6E1331 /* Pods_RHViewStateKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RHViewStateKit_Tests.framework; path = "Pods-RHViewStateKit_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; + E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; + E6D4AFF1DA3A06E80E1FE0BBD3CBD706 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + E769393FE2F7DCF3E342575F5DF05239 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E82DF60F18ECAFAF727D529FF05672AC /* Pods-RHViewStateKit_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHViewStateKit_Example.debug.xcconfig"; sourceTree = ""; }; + E9EA6F246E81793F97AE0FED302BA06B /* RHViewState+DataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RHViewState+DataSource.swift"; path = "Source/RHViewState+DataSource.swift"; sourceTree = ""; }; + EC929EC9D87C41C243058C7C12C1FF36 /* RHViewStateAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHViewStateAnimation.swift; path = Source/RHViewStateAnimation.swift; sourceTree = ""; }; + ED101DB54AB2F8F1BCCE12E9200FC619 /* Pods-RHViewStateKit_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RHViewStateKit_Tests-acknowledgements.markdown"; sourceTree = ""; }; + ED40681B2472449B7AA1E8BEBCD10F32 /* RHDefaultLoading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RHDefaultLoading.swift; path = Source/RHDefaultLoading.swift; sourceTree = ""; }; + EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; + F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; + F203878D13F4508D0FE4398AF91567F3 /* RHViewStateKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RHViewStateKit.release.xcconfig; sourceTree = ""; }; + F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; + F62D8A0C11B68CD054C554239D53E834 /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Source/UIView.swift; sourceTree = ""; }; + F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; + F9486D344C677FBAFBAA11A39BA271B5 /* RHViewStateKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RHViewStateKit.debug.xcconfig; sourceTree = ""; }; + FD79D0431011B6C9D7AA46E04843B058 /* Pods-RHViewStateKit_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHViewStateKit_Tests-acknowledgements.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DFECCDE16833F419EF4B3426FA1CEE9B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 314F8B113A098B93758591CD23FCFE93 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E80B49D0F94CBC7FCF2317ABA15E02A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E157DF5631B333E92BE502E0A544338B /* Foundation.framework in Frameworks */, + C8735DA80CAE830D735393898B823B66 /* SnapKit.framework in Frameworks */, + E52D44B70234F19F0C848051564EAEC3 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F0283E1033BA88BB680766E15625B999 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C9FAE3A220BCFC61144CBD8A68A73C5 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3167B6D1315112A595969DFBD1034D9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D70A1ABC843258FBD8105076C89F405D /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 004336DFA7AA16388BC99D9B77F4622D /* Pods-RHViewStateKit_Example */ = { + isa = PBXGroup; + children = ( + 62E455378CC11AC4F7D6BF581DD8B785 /* Pods-RHViewStateKit_Example.modulemap */, + 50D146F8C095151C1E1DF0132EB9E966 /* Pods-RHViewStateKit_Example-acknowledgements.markdown */, + 648E6697612356C99237FF6BF7B0B634 /* Pods-RHViewStateKit_Example-acknowledgements.plist */, + 60734E71DA41D5E53B1C0AA824A4149B /* Pods-RHViewStateKit_Example-dummy.m */, + 063DB8D843507981999BA078C21A4C98 /* Pods-RHViewStateKit_Example-frameworks.sh */, + 314E4582A9D16E426518833C3665B560 /* Pods-RHViewStateKit_Example-Info.plist */, + 72B50A29067CDBEFDCB6E3E74760F532 /* Pods-RHViewStateKit_Example-umbrella.h */, + E82DF60F18ECAFAF727D529FF05672AC /* Pods-RHViewStateKit_Example.debug.xcconfig */, + 63E4F78BDAFF490544268F9DEE1AA35A /* Pods-RHViewStateKit_Example.release.xcconfig */, + ); + name = "Pods-RHViewStateKit_Example"; + path = "Target Support Files/Pods-RHViewStateKit_Example"; + sourceTree = ""; + }; + 0E3070B536EBADB7A1FFA2EFE1CB674F /* Pod */ = { + isa = PBXGroup; + children = ( + 51E1F8752DC2EFB827475BD2D7EBB708 /* LICENSE */, + E6D4AFF1DA3A06E80E1FE0BBD3CBD706 /* README.md */, + 7C151ED993E980B7CEA7FFB748E926F7 /* RHViewStateKit.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 2D4094FF51BCED0C382686B877688648 /* Development Pods */ = { + isa = PBXGroup; + children = ( + D0B93634E1D8D5B399EE15214F85079A /* RHViewStateKit */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 387ECC0312475450753C9E8687127A57 /* Support Files */ = { + isa = PBXGroup; + children = ( + 54F0E810001428E73F71DD8E89EA5B97 /* RHViewStateKit.modulemap */, + 94201BA35465AC641AD89232885C0C2C /* RHViewStateKit-dummy.m */, + 12C627C9E916AFFD50374C4D271FD8A9 /* RHViewStateKit-Info.plist */, + 5AB16C72997EA695133937C5D86E15AF /* RHViewStateKit-prefix.pch */, + 8F69EF54B337C3AAF3FE524441CDCEFA /* RHViewStateKit-umbrella.h */, + F9486D344C677FBAFBAA11A39BA271B5 /* RHViewStateKit.debug.xcconfig */, + F203878D13F4508D0FE4398AF91567F3 /* RHViewStateKit.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/RHViewStateKit"; + sourceTree = ""; + }; + 535CD497228DA023E262D17647BAB8E8 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 004336DFA7AA16388BC99D9B77F4622D /* Pods-RHViewStateKit_Example */, + EB9C9B00D5E8E887BE70E3A4689847CA /* Pods-RHViewStateKit_Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 7F02E3862C6E84203E8324D9D0088797 /* SnapKit */ = { + isa = PBXGroup; + children = ( + 50380F281EC3EE769C85035CCEA77226 /* Constraint.swift */, + 13F460233F2A555D41511B6CCA66A124 /* ConstraintAttributes.swift */, + 250E41DBB680A3A2ECDDD2210311B230 /* ConstraintConfig.swift */, + 6D990E0FED5B41C1F13AC6B08208A99B /* ConstraintConstantTarget.swift */, + CB1D9F6F4E2364DFAF158E04AF5D5EAA /* ConstraintDescription.swift */, + 91164BE769DA144776663FBF46785561 /* ConstraintDirectionalInsets.swift */, + A7D358AA1606C7B2CDC8555485807E9E /* ConstraintDirectionalInsetTarget.swift */, + 7AE00ECC24C5CC6DC938204FF42AD0E5 /* ConstraintDSL.swift */, + 549471CD1FE3A1E1865DD172864918D3 /* ConstraintInsets.swift */, + 7C2EC377264B25FB0E67D150E37E87CD /* ConstraintInsetTarget.swift */, + 474AFC560A8B414B467174737DBC891A /* ConstraintItem.swift */, + 66C5188AE61F0E667CD9E7ED28CDD61C /* ConstraintLayoutGuide.swift */, + 09BF299D2EEB87E7DD02630E87B96224 /* ConstraintLayoutGuide+Extensions.swift */, + BE0BE9F3D55FDB29EF516F6D6B1B6BCA /* ConstraintLayoutGuideDSL.swift */, + 3D705690D879064ED84970813189D8D4 /* ConstraintLayoutSupport.swift */, + C4A46A8054577838D49C60142EB88B13 /* ConstraintLayoutSupportDSL.swift */, + 141BC33167429B9926FB24A17F01568C /* ConstraintMaker.swift */, + E2C3B0B200350EAC8F42EF635FF31BD1 /* ConstraintMakerEditable.swift */, + E43F10DE451FED17810D9B5C237324A5 /* ConstraintMakerExtendable.swift */, + 11D02329E74D733C03BF6BAE1F564481 /* ConstraintMakerFinalizable.swift */, + 91A53CAF547D71AEFABE49D91B4E6816 /* ConstraintMakerPriortizable.swift */, + 724FB64349F5678CE1709979CF0DD952 /* ConstraintMakerRelatable.swift */, + F7AB9BB47A2175181386A432C07253AE /* ConstraintMultiplierTarget.swift */, + 47B200BD964F52F6693D4168248B8645 /* ConstraintOffsetTarget.swift */, + F0BD95F32F2E57D6B9100B77B93F013C /* ConstraintPriority.swift */, + 9716AD15FADF38A93170E034F2BCE457 /* ConstraintPriorityTarget.swift */, + 2975CA5A0D26BC84F3EE9912FEBDA795 /* ConstraintRelatableTarget.swift */, + 25479F58B67AA43E092C7B156C1B5C1B /* ConstraintRelation.swift */, + A51E99894F75F00A281BE6A32FBDE495 /* ConstraintView.swift */, + EE9055CEA7890517265589BD23D73A49 /* ConstraintView+Extensions.swift */, + 56006AA49A060CA2830F32CD6F394823 /* ConstraintViewDSL.swift */, + D038D2FAA2F6B073D1B64B8635F4E3E6 /* Debugging.swift */, + F44C5B72775F6AF0891BF331F32FE10D /* LayoutConstraint.swift */, + 464C01543F3BCEDEE51ABAA696513D0B /* LayoutConstraintItem.swift */, + D4E066869A95E00B949CBA4D2284C35F /* Typealiases.swift */, + 6A9341666EAC154422A032092A7DC2D7 /* UILayoutSupport+Extensions.swift */, + 843EFF0C650682C304D518A9092EE9FD /* Support Files */, + ); + name = SnapKit; + path = SnapKit; + sourceTree = ""; + }; + 843EFF0C650682C304D518A9092EE9FD /* Support Files */ = { + isa = PBXGroup; + children = ( + 7889131C1139F96BBDA94CEE2E694763 /* SnapKit.modulemap */, + E13B89FFD81AACB7530769CA05EEA26B /* SnapKit-dummy.m */, + 391A6F8B42D2CD885F8F3C4CE6859439 /* SnapKit-Info.plist */, + E14A09DC3AD8CA84464FEC37F0FC99D1 /* SnapKit-prefix.pch */, + 0116B84A6773B75FCBFCB479E740F0F3 /* SnapKit-umbrella.h */, + 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */, + A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SnapKit"; + sourceTree = ""; + }; + 99DBB30AE89E388321E3A189A8A571D9 /* iOS */ = { + isa = PBXGroup; + children = ( + 32F16DF945CE73ECA0F797633B716F8E /* Foundation.framework */, + 68D1B94523097CAB40FE2A587B7A6A59 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + A5295F30F49CEBECAE3FA01C1DA73F8C /* Frameworks */ = { + isa = PBXGroup; + children = ( + E769393FE2F7DCF3E342575F5DF05239 /* SnapKit.framework */, + 99DBB30AE89E388321E3A189A8A571D9 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + BA22F08D059965C9A09F78196176CEDB /* Pods */ = { + isa = PBXGroup; + children = ( + 7F02E3862C6E84203E8324D9D0088797 /* SnapKit */, + ); + name = Pods; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 2D4094FF51BCED0C382686B877688648 /* Development Pods */, + A5295F30F49CEBECAE3FA01C1DA73F8C /* Frameworks */, + BA22F08D059965C9A09F78196176CEDB /* Pods */, + DF19695B5BDAC2429FA960FBCDE38AD9 /* Products */, + 535CD497228DA023E262D17647BAB8E8 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D0B93634E1D8D5B399EE15214F85079A /* RHViewStateKit */ = { + isa = PBXGroup; + children = ( + D6CA820421B61B1A13D55C878D1DBEF7 /* AssociationPolicy.swift */, + 6EEF9CF5165C61D936F4DB137EF85986 /* RHButtonConfiguration.swift */, + ED40681B2472449B7AA1E8BEBCD10F32 /* RHDefaultLoading.swift */, + 587A36FD57FBA1629BDB9367EB798F91 /* RHDefaultViewState.swift */, + 31567371D500544DFA5DE399DB87CF9F /* RHDescriptionConfiguration.swift */, + 0058394C54F3353D969F8FD6F66AB331 /* RHImageConfiguration.swift */, + 43C8BB3DA246D13B0F4E32A0F5ADE5F6 /* RHLoadingConfiguration.swift */, + 2C2CA9EAEC139DF3A81F37C56A891565 /* RHPositionConfiguration.swift */, + 619FB6A9D2B28D69A10E666BE37AE15A /* RHTitleConfiguration.swift */, + A31DC412B1ABF37E535AE5557D57CA30 /* RHViewCollectionState.swift */, + 748C914FBE486E1A47C4CE01A66F51FA /* RHViewConfiguration.swift */, + 3C796ECCFF8AF7939F2F7687FBC0BAA5 /* RHViewState.swift */, + E9EA6F246E81793F97AE0FED302BA06B /* RHViewState+DataSource.swift */, + 55415A3B206F4C09FBD6F414F7CD3B8B /* RHViewState+Delegate.swift */, + EC929EC9D87C41C243058C7C12C1FF36 /* RHViewStateAnimation.swift */, + E1E70FFBD40E32D0776A2B14D315224A /* UILabel+TextWidth.swift */, + F62D8A0C11B68CD054C554239D53E834 /* UIView.swift */, + 0E3070B536EBADB7A1FFA2EFE1CB674F /* Pod */, + 387ECC0312475450753C9E8687127A57 /* Support Files */, + ); + name = RHViewStateKit; + path = ../..; + sourceTree = ""; + }; + DF19695B5BDAC2429FA960FBCDE38AD9 /* Products */ = { + isa = PBXGroup; + children = ( + 024A9098B65CB3681496B4F0F0FF640D /* Pods_RHViewStateKit_Example.framework */, + E2412B25ADDEC58A3655152D8A6E1331 /* Pods_RHViewStateKit_Tests.framework */, + C26D26B27DB834D8733B9D594E353B2B /* RHViewStateKit.framework */, + 979486118B3E90C08386079D57962701 /* SnapKit.framework */, + ); + name = Products; + sourceTree = ""; + }; + EB9C9B00D5E8E887BE70E3A4689847CA /* Pods-RHViewStateKit_Tests */ = { + isa = PBXGroup; + children = ( + 27CBD46D0A9F8CF659DF3AC9FCADC329 /* Pods-RHViewStateKit_Tests.modulemap */, + ED101DB54AB2F8F1BCCE12E9200FC619 /* Pods-RHViewStateKit_Tests-acknowledgements.markdown */, + FD79D0431011B6C9D7AA46E04843B058 /* Pods-RHViewStateKit_Tests-acknowledgements.plist */, + 9E95BAA563DC916B26122950FEC3F7BC /* Pods-RHViewStateKit_Tests-dummy.m */, + 48800EF45B9EC6CDD220C068D73E66AB /* Pods-RHViewStateKit_Tests-Info.plist */, + A2C423093FE675FDD0950DFB01BCD2F2 /* Pods-RHViewStateKit_Tests-umbrella.h */, + 0344FE02A5F4DFC1B8FF99EF8C365F55 /* Pods-RHViewStateKit_Tests.debug.xcconfig */, + 3099CCCB5354B1F6EA7AC21898BD0C27 /* Pods-RHViewStateKit_Tests.release.xcconfig */, + ); + name = "Pods-RHViewStateKit_Tests"; + path = "Target Support Files/Pods-RHViewStateKit_Tests"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 43CB78CD3808CD0F9D3E2646BEB844F3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EF96A0D5F9D8AC912F2889F7760FEBD8 /* SnapKit-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79927B1C1771BC483B7267D4E976E2D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8EACD59A411198654AB3137C39020746 /* Pods-RHViewStateKit_Tests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A37592D89A91D130F12109FE80814647 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A7EC12C6FE05F8B396D55796A2C44F7C /* Pods-RHViewStateKit_Example-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9FF77413FEAA472CCCBFC454A09F846 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 16FF6723D82F05282A66F2DB037DE5B9 /* RHViewStateKit-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 07189942DCB94AD1B725FACC89B115D0 /* Pods-RHViewStateKit_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 18DB3B5F42FA9D19E3CD08562D449424 /* Build configuration list for PBXNativeTarget "Pods-RHViewStateKit_Tests" */; + buildPhases = ( + 79927B1C1771BC483B7267D4E976E2D0 /* Headers */, + 741234B48EEBFCBFDF79DD9FCCF9CCBA /* Sources */, + F0283E1033BA88BB680766E15625B999 /* Frameworks */, + 08282C919F5DF54B86388414E0FD98AD /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + CF90E0529F8175A125329B6338456289 /* PBXTargetDependency */, + ); + name = "Pods-RHViewStateKit_Tests"; + productName = "Pods-RHViewStateKit_Tests"; + productReference = E2412B25ADDEC58A3655152D8A6E1331 /* Pods_RHViewStateKit_Tests.framework */; + productType = "com.apple.product-type.framework"; + }; + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5CC73B9C7A0944A2E545A24C76DC2326 /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildPhases = ( + 43CB78CD3808CD0F9D3E2646BEB844F3 /* Headers */, + A2D5CC047B647192E857D60A89E07465 /* Sources */, + F3167B6D1315112A595969DFBD1034D9 /* Frameworks */, + 5A311613F24671E84E7E835A8503B1B6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SnapKit; + productName = SnapKit; + productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; + productType = "com.apple.product-type.framework"; + }; + 5A0EBD8A851EDA1AF01C039F2C3AC74B /* RHViewStateKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B68FE620253C2B76021EAAB9BC8DAA8 /* Build configuration list for PBXNativeTarget "RHViewStateKit" */; + buildPhases = ( + A9FF77413FEAA472CCCBFC454A09F846 /* Headers */, + 77723C44626A64FC9439470277EC1E7C /* Sources */, + E80B49D0F94CBC7FCF2317ABA15E02A4 /* Frameworks */, + 11835C1EE0C58C9B711922B11A75775E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 0004558B5BF8CEE73A129AD88F8F9287 /* PBXTargetDependency */, + ); + name = RHViewStateKit; + productName = RHViewStateKit; + productReference = C26D26B27DB834D8733B9D594E353B2B /* RHViewStateKit.framework */; + productType = "com.apple.product-type.framework"; + }; + B91233CA26B0D65B291C2E8E7E65D5CD /* Pods-RHViewStateKit_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 882B8BCB963D16ED3F15EB3AF39D3670 /* Build configuration list for PBXNativeTarget "Pods-RHViewStateKit_Example" */; + buildPhases = ( + A37592D89A91D130F12109FE80814647 /* Headers */, + FB52E8C65ABDF275172E36501E357FBA /* Sources */, + DFECCDE16833F419EF4B3426FA1CEE9B /* Frameworks */, + A0B26F136AADF46AB49819B51474EBDA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B707602FD87392B175F8175C8BBA2357 /* PBXTargetDependency */, + 6ABD7541C650A8C2C9B92D4B062BB21D /* PBXTargetDependency */, + ); + name = "Pods-RHViewStateKit_Example"; + productName = "Pods-RHViewStateKit_Example"; + productReference = 024A9098B65CB3681496B4F0F0FF640D /* Pods_RHViewStateKit_Example.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = DF19695B5BDAC2429FA960FBCDE38AD9 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B91233CA26B0D65B291C2E8E7E65D5CD /* Pods-RHViewStateKit_Example */, + 07189942DCB94AD1B725FACC89B115D0 /* Pods-RHViewStateKit_Tests */, + 5A0EBD8A851EDA1AF01C039F2C3AC74B /* RHViewStateKit */, + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 08282C919F5DF54B86388414E0FD98AD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 11835C1EE0C58C9B711922B11A75775E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5A311613F24671E84E7E835A8503B1B6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A0B26F136AADF46AB49819B51474EBDA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 741234B48EEBFCBFDF79DD9FCCF9CCBA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6DFBEB88A23C4553463143476A083F80 /* Pods-RHViewStateKit_Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 77723C44626A64FC9439470277EC1E7C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FE307D1D14B7AA1267284B2491958C74 /* AssociationPolicy.swift in Sources */, + 54B18A94EE7F59F613DB11D2A98D1F56 /* RHButtonConfiguration.swift in Sources */, + D25E2A7F5619AE67D685E70602D04C21 /* RHDefaultLoading.swift in Sources */, + B5F72555E9AA8E1B0A1052E57C969926 /* RHDefaultViewState.swift in Sources */, + CFD40566576A4DB6D7A213E0285C49D8 /* RHDescriptionConfiguration.swift in Sources */, + 054008EEFE72D6DF7C28842F474B04C7 /* RHImageConfiguration.swift in Sources */, + 05380B582C925162ED673B4D2240E8E3 /* RHLoadingConfiguration.swift in Sources */, + D0C2F56F7A65B474FEB226048591C869 /* RHPositionConfiguration.swift in Sources */, + 955E9AF5A23E0AE21A29C2790C796887 /* RHTitleConfiguration.swift in Sources */, + 17806A6544F7D9AB041FC8878E3F83C0 /* RHViewCollectionState.swift in Sources */, + 0125CC4A36C88A722195CAC1294D1ABA /* RHViewConfiguration.swift in Sources */, + E69E0C50C869ABFCF113BCDCDE4A8C24 /* RHViewState+DataSource.swift in Sources */, + 0C4763B98C866C2D0B40AC4C5A330EA1 /* RHViewState+Delegate.swift in Sources */, + 4863A04B9B3AF213D590F9C8A3990A98 /* RHViewState.swift in Sources */, + CBDDE864F6D788222535101C83A141FC /* RHViewStateAnimation.swift in Sources */, + 1CFFE7B57D171C9297B0C3BA184F87DF /* RHViewStateKit-dummy.m in Sources */, + 8709D68FA43D6B4008965506611AA691 /* UILabel+TextWidth.swift in Sources */, + 14CA5DDBDE92C4ADA3416241DC0BE669 /* UIView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A2D5CC047B647192E857D60A89E07465 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D914D41A2364388B45C0EC205FCA83C /* Constraint.swift in Sources */, + B1ED1778FF7D6EA788CB4E022810495E /* ConstraintAttributes.swift in Sources */, + 76C6FE4EDB163E175683FB44CD91F3FF /* ConstraintConfig.swift in Sources */, + D35A86882F758022DD86180677016754 /* ConstraintConstantTarget.swift in Sources */, + 9176D1AA04DC8AEEFABCA02A5929486B /* ConstraintDescription.swift in Sources */, + 3AAF5D454CC438D3F6442B36BCE67A0D /* ConstraintDirectionalInsets.swift in Sources */, + D1690E4933E7746E1710DF8872B50EB4 /* ConstraintDirectionalInsetTarget.swift in Sources */, + 1873B75811C92AF916A0EBE5B6B614FB /* ConstraintDSL.swift in Sources */, + 9A36BD532F50F622C6C5C096012BF8ED /* ConstraintInsets.swift in Sources */, + 882EF84C07F7C6DCBB979DBBC0B95318 /* ConstraintInsetTarget.swift in Sources */, + 489F385459C6CDF8A53E93D785A9C3BA /* ConstraintItem.swift in Sources */, + FEEB86B35DAB9A5053B0F204D54B60CC /* ConstraintLayoutGuide+Extensions.swift in Sources */, + A736787C0AA7CE424CA7AECB4726FD8E /* ConstraintLayoutGuide.swift in Sources */, + 877CE1770557AE22021A18D7960FC687 /* ConstraintLayoutGuideDSL.swift in Sources */, + 43B9A7628E8D57AC5728E583EC9D7E77 /* ConstraintLayoutSupport.swift in Sources */, + 64CE3ED663B1EF2CA8E12C6326AC9909 /* ConstraintLayoutSupportDSL.swift in Sources */, + 7546B906779A55EB7B82617393AE43A3 /* ConstraintMaker.swift in Sources */, + F3C9E481FFCE3BA9F2A6A5F8661DF4FA /* ConstraintMakerEditable.swift in Sources */, + E410F63EE9984624FF764BA6478B6BC3 /* ConstraintMakerExtendable.swift in Sources */, + 6FB7C9FEF88C2D9406614FF2ACC19F47 /* ConstraintMakerFinalizable.swift in Sources */, + F75D0D91FA8334647234AF60068FA437 /* ConstraintMakerPriortizable.swift in Sources */, + 540AD42C93798F743FA7EF2881877D43 /* ConstraintMakerRelatable.swift in Sources */, + 2911B5E55A59E62DADF4196FE31F2E15 /* ConstraintMultiplierTarget.swift in Sources */, + 0182A3D3332AECD72450D3CD2519B5D4 /* ConstraintOffsetTarget.swift in Sources */, + DAE27DE0DF7F3F175C55D66E34646039 /* ConstraintPriority.swift in Sources */, + A730F94A306FD7FE5454A01FB9E2D4F4 /* ConstraintPriorityTarget.swift in Sources */, + 048476C42E91460983E98D2E5617E237 /* ConstraintRelatableTarget.swift in Sources */, + FED90BB50DD5C4659C4D6AF0F2A6024C /* ConstraintRelation.swift in Sources */, + 92A39A4A1A1094F27490A2329E516C35 /* ConstraintView+Extensions.swift in Sources */, + EE57C45C37F61AFD2D2CFE19FC407E19 /* ConstraintView.swift in Sources */, + 4CA57276E1AD9F27CE1660F631D8218D /* ConstraintViewDSL.swift in Sources */, + D6B20511EAFAEFFD03B738ECBC55163D /* Debugging.swift in Sources */, + E134174E010FE7B40B6BD50C74795127 /* LayoutConstraint.swift in Sources */, + 4E46F03A3985E8646BAC8FA51AF546DB /* LayoutConstraintItem.swift in Sources */, + A9D5250A15EA7B51823B720058D072DF /* SnapKit-dummy.m in Sources */, + F2BD33332FA939677BAA2C9B2A5950B3 /* Typealiases.swift in Sources */, + 2CD1A09C4434EB01D666B846BBEEFE27 /* UILayoutSupport+Extensions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FB52E8C65ABDF275172E36501E357FBA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 313DAB871B76CD9484357B2F70625FD3 /* Pods-RHViewStateKit_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0004558B5BF8CEE73A129AD88F8F9287 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = E958F054CD16FC50B4D2ED463E56068C /* PBXContainerItemProxy */; + }; + 6ABD7541C650A8C2C9B92D4B062BB21D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = BAA62A7733276590D7D0995A9860410C /* PBXContainerItemProxy */; + }; + B707602FD87392B175F8175C8BBA2357 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RHViewStateKit; + target = 5A0EBD8A851EDA1AF01C039F2C3AC74B /* RHViewStateKit */; + targetProxy = 3DE904DFDEE35DAC6F6805695F4D676E /* PBXContainerItemProxy */; + }; + CF90E0529F8175A125329B6338456289 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-RHViewStateKit_Example"; + target = B91233CA26B0D65B291C2E8E7E65D5CD /* Pods-RHViewStateKit_Example */; + targetProxy = 5A1314872650690D2240510083BBDB5C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1F4AC2841076AA24F0E8229F5048E450 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A1CD432F32277BB93DEAADA626ECEC5B /* SnapKit.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 298064DE697009A4B6617260CD214F79 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F9486D344C677FBAFBAA11A39BA271B5 /* RHViewStateKit.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RHViewStateKit/RHViewStateKit.modulemap"; + PRODUCT_MODULE_NAME = RHViewStateKit; + PRODUCT_NAME = RHViewStateKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 379621B9115E3369F1C2EA48B4DDBC26 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7C21E0C93A1141A1E2EB51575500E27D /* SnapKit.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7EE7A78859F657F6BEFC651185B43192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=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 = 10.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 7FFF3C60037E6BB99114175514640296 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3099CCCB5354B1F6EA7AC21898BD0C27 /* Pods-RHViewStateKit_Tests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 876B097A182435E1416ADFA33F07EF36 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F203878D13F4508D0FE4398AF91567F3 /* RHViewStateKit.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RHViewStateKit/RHViewStateKit.modulemap"; + PRODUCT_MODULE_NAME = RHViewStateKit; + PRODUCT_NAME = RHViewStateKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 9B66ADE4EAA77D42BDBC0A92FAA13FCF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0344FE02A5F4DFC1B8FF99EF8C365F55 /* Pods-RHViewStateKit_Tests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A480DCC9288A14C042782C91D6DA5B7B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 63E4F78BDAFF490544268F9DEE1AA35A /* Pods-RHViewStateKit_Example.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D299434AB35E7FD6F7921C8EF24742FF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + 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; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "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 = 10.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + DE0DB47308FBE3CEFB772BEDDBA0565E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E82DF60F18ECAFAF727D529FF05672AC /* Pods-RHViewStateKit_Example.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 18DB3B5F42FA9D19E3CD08562D449424 /* Build configuration list for PBXNativeTarget "Pods-RHViewStateKit_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B66ADE4EAA77D42BDBC0A92FAA13FCF /* Debug */, + 7FFF3C60037E6BB99114175514640296 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D299434AB35E7FD6F7921C8EF24742FF /* Debug */, + 7EE7A78859F657F6BEFC651185B43192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B68FE620253C2B76021EAAB9BC8DAA8 /* Build configuration list for PBXNativeTarget "RHViewStateKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 298064DE697009A4B6617260CD214F79 /* Debug */, + 876B097A182435E1416ADFA33F07EF36 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5CC73B9C7A0944A2E545A24C76DC2326 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 379621B9115E3369F1C2EA48B4DDBC26 /* Debug */, + 1F4AC2841076AA24F0E8229F5048E450 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 882B8BCB963D16ED3F15EB3AF39D3670 /* Build configuration list for PBXNativeTarget "Pods-RHViewStateKit_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DE0DB47308FBE3CEFB772BEDDBA0565E /* Debug */, + A480DCC9288A14C042782C91D6DA5B7B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example/Pods/SnapKit/LICENSE b/Example/Pods/SnapKit/LICENSE new file mode 100644 index 0000000..a18ccfb --- /dev/null +++ b/Example/Pods/SnapKit/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Example/Pods/SnapKit/README.md b/Example/Pods/SnapKit/README.md new file mode 100644 index 0000000..0945ce6 --- /dev/null +++ b/Example/Pods/SnapKit/README.md @@ -0,0 +1,136 @@ + + +SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. + +[![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) +[![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) +[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ +#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ + +## Contents + +- [Requirements](#requirements) +- [Migration Guides](#migration-guides) +- [Communication](#communication) +- [Installation](#installation) +- [Usage](#usage) +- [Credits](#credits) +- [License](#license) + +## Requirements + +- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ +- Xcode 10.0+ +- Swift 4.0+ + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). +- If you **found a bug**, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + + +## Installation + +### CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. + +To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '10.0' +use_frameworks! + +target '' do + pod 'SnapKit', '~> 5.0.0' +end +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "SnapKit/SnapKit" ~> 5.0.0 +``` + +Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. + +### Manually + +If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. + +--- + +## Usage + +### Quick Start + +```swift +import SnapKit + +class MyViewController: UIViewController { + + lazy var box = UIView() + + override func viewDidLoad() { + super.viewDidLoad() + + self.view.addSubview(box) + box.snp.makeConstraints { (make) -> Void in + make.width.height.equalTo(50) + make.center.equalTo(self.view) + } + } + +} +``` + +### Playground +You can try SnapKit in Playground. + +**Note:** + +> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. + +### Resources + +- [Documentation](http://snapkit.io/docs/) +- [F.A.Q.](http://snapkit.io/faq/) + +## Credits + +- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) +- Many other contributors + +## License + +SnapKit is released under the MIT license. See LICENSE for details. diff --git a/Example/Pods/SnapKit/Source/Constraint.swift b/Example/Pods/SnapKit/Source/Constraint.swift new file mode 100644 index 0000000..390629e --- /dev/null +++ b/Example/Pods/SnapKit/Source/Constraint.swift @@ -0,0 +1,341 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + +public final class Constraint { + + internal let sourceLocation: (String, UInt) + internal let label: String? + + private let from: ConstraintItem + private let to: ConstraintItem + private let relation: ConstraintRelation + private let multiplier: ConstraintMultiplierTarget + private var constant: ConstraintConstantTarget { + didSet { + self.updateConstantAndPriorityIfNeeded() + } + } + private var priority: ConstraintPriorityTarget { + didSet { + self.updateConstantAndPriorityIfNeeded() + } + } + public var layoutConstraints: [LayoutConstraint] + + public var isActive: Bool { + set { + if newValue { + activate() + } + else { + deactivate() + } + } + + get { + for layoutConstraint in self.layoutConstraints { + if layoutConstraint.isActive { + return true + } + } + return false + } + } + + // MARK: Initialization + + internal init(from: ConstraintItem, + to: ConstraintItem, + relation: ConstraintRelation, + sourceLocation: (String, UInt), + label: String?, + multiplier: ConstraintMultiplierTarget, + constant: ConstraintConstantTarget, + priority: ConstraintPriorityTarget) { + self.from = from + self.to = to + self.relation = relation + self.sourceLocation = sourceLocation + self.label = label + self.multiplier = multiplier + self.constant = constant + self.priority = priority + self.layoutConstraints = [] + + // get attributes + let layoutFromAttributes = self.from.attributes.layoutAttributes + let layoutToAttributes = self.to.attributes.layoutAttributes + + // get layout from + let layoutFrom = self.from.layoutConstraintItem! + + // get relation + let layoutRelation = self.relation.layoutRelation + + for layoutFromAttribute in layoutFromAttributes { + // get layout to attribute + let layoutToAttribute: LayoutAttribute + #if os(iOS) || os(tvOS) + if layoutToAttributes.count > 0 { + if self.from.attributes == .edges && self.to.attributes == .margins { + switch layoutFromAttribute { + case .left: + layoutToAttribute = .leftMargin + case .right: + layoutToAttribute = .rightMargin + case .top: + layoutToAttribute = .topMargin + case .bottom: + layoutToAttribute = .bottomMargin + default: + fatalError() + } + } else if self.from.attributes == .margins && self.to.attributes == .edges { + switch layoutFromAttribute { + case .leftMargin: + layoutToAttribute = .left + case .rightMargin: + layoutToAttribute = .right + case .topMargin: + layoutToAttribute = .top + case .bottomMargin: + layoutToAttribute = .bottom + default: + fatalError() + } + } else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins { + switch layoutFromAttribute { + case .leading: + layoutToAttribute = .leadingMargin + case .trailing: + layoutToAttribute = .trailingMargin + case .top: + layoutToAttribute = .topMargin + case .bottom: + layoutToAttribute = .bottomMargin + default: + fatalError() + } + } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { + switch layoutFromAttribute { + case .leadingMargin: + layoutToAttribute = .leading + case .trailingMargin: + layoutToAttribute = .trailing + case .topMargin: + layoutToAttribute = .top + case .bottomMargin: + layoutToAttribute = .bottom + default: + fatalError() + } + } else if self.from.attributes == self.to.attributes { + layoutToAttribute = layoutFromAttribute + } else { + layoutToAttribute = layoutToAttributes[0] + } + } else { + if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { + layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top + } else { + layoutToAttribute = layoutFromAttribute + } + } + #else + if self.from.attributes == self.to.attributes { + layoutToAttribute = layoutFromAttribute + } else if layoutToAttributes.count > 0 { + layoutToAttribute = layoutToAttributes[0] + } else { + layoutToAttribute = layoutFromAttribute + } + #endif + + // get layout constant + let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) + + // get layout to + var layoutTo: AnyObject? = self.to.target + + // use superview if possible + if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { + layoutTo = layoutFrom.superview + } + + // create layout constraint + let layoutConstraint = LayoutConstraint( + item: layoutFrom, + attribute: layoutFromAttribute, + relatedBy: layoutRelation, + toItem: layoutTo, + attribute: layoutToAttribute, + multiplier: self.multiplier.constraintMultiplierTargetValue, + constant: layoutConstant + ) + + // set label + layoutConstraint.label = self.label + + // set priority + layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) + + // set constraint + layoutConstraint.constraint = self + + // append + self.layoutConstraints.append(layoutConstraint) + } + } + + // MARK: Public + + @available(*, deprecated, message:"Use activate().") + public func install() { + self.activate() + } + + @available(*, deprecated, message:"Use deactivate().") + public func uninstall() { + self.deactivate() + } + + public func activate() { + self.activateIfNeeded() + } + + public func deactivate() { + self.deactivateIfNeeded() + } + + @discardableResult + public func update(offset: ConstraintOffsetTarget) -> Constraint { + self.constant = offset.constraintOffsetTargetValue + return self + } + + @discardableResult + public func update(inset: ConstraintInsetTarget) -> Constraint { + self.constant = inset.constraintInsetTargetValue + return self + } + + #if os(iOS) || os(tvOS) + @discardableResult + @available(iOS 11.0, tvOS 11.0, *) + public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { + self.constant = inset.constraintDirectionalInsetTargetValue + return self + } + #endif + + @discardableResult + public func update(priority: ConstraintPriorityTarget) -> Constraint { + self.priority = priority.constraintPriorityTargetValue + return self + } + + @discardableResult + public func update(priority: ConstraintPriority) -> Constraint { + self.priority = priority.value + return self + } + + @available(*, deprecated, message:"Use update(offset: ConstraintOffsetTarget) instead.") + public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } + + @available(*, deprecated, message:"Use update(inset: ConstraintInsetTarget) instead.") + public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityRequired() -> Void {} + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } + + @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") + public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } + + // MARK: Internal + + internal func updateConstantAndPriorityIfNeeded() { + for layoutConstraint in self.layoutConstraints { + let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute + layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) + + let requiredPriority = ConstraintPriority.required.value + if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { + layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) + } + } + } + + internal func activateIfNeeded(updatingExisting: Bool = false) { + guard let item = self.from.layoutConstraintItem else { + print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") + return + } + let layoutConstraints = self.layoutConstraints + + if updatingExisting { + var existingLayoutConstraints: [LayoutConstraint] = [] + for constraint in item.constraints { + existingLayoutConstraints += constraint.layoutConstraints + } + + for layoutConstraint in layoutConstraints { + let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } + guard let updateLayoutConstraint = existingLayoutConstraint else { + fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") + } + + let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute + updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) + } + } else { + NSLayoutConstraint.activate(layoutConstraints) + item.add(constraints: [self]) + } + } + + internal func deactivateIfNeeded() { + guard let item = self.from.layoutConstraintItem else { + print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") + return + } + let layoutConstraints = self.layoutConstraints + NSLayoutConstraint.deactivate(layoutConstraints) + item.remove(constraints: [self]) + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintAttributes.swift b/Example/Pods/SnapKit/Source/ConstraintAttributes.swift new file mode 100644 index 0000000..2f0fbe9 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintAttributes.swift @@ -0,0 +1,199 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral { + + typealias IntegerLiteralType = UInt + + internal init(rawValue: UInt) { + self.rawValue = rawValue + } + internal init(_ rawValue: UInt) { + self.init(rawValue: rawValue) + } + internal init(nilLiteral: ()) { + self.rawValue = 0 + } + internal init(integerLiteral rawValue: IntegerLiteralType) { + self.init(rawValue: rawValue) + } + + internal private(set) var rawValue: UInt + internal static var allZeros: ConstraintAttributes { return 0 } + internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 } + internal var boolValue: Bool { return self.rawValue != 0 } + + internal func toRaw() -> UInt { return self.rawValue } + internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } + internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } + + // normal + + internal static var none: ConstraintAttributes { return 0 } + internal static var left: ConstraintAttributes { return 1 } + internal static var top: ConstraintAttributes { return 2 } + internal static var right: ConstraintAttributes { return 4 } + internal static var bottom: ConstraintAttributes { return 8 } + internal static var leading: ConstraintAttributes { return 16 } + internal static var trailing: ConstraintAttributes { return 32 } + internal static var width: ConstraintAttributes { return 64 } + internal static var height: ConstraintAttributes { return 128 } + internal static var centerX: ConstraintAttributes { return 256 } + internal static var centerY: ConstraintAttributes { return 512 } + internal static var lastBaseline: ConstraintAttributes { return 1024 } + + @available(iOS 8.0, OSX 10.11, *) + internal static var firstBaseline: ConstraintAttributes { return 2048 } + + @available(iOS 8.0, *) + internal static var leftMargin: ConstraintAttributes { return 4096 } + + @available(iOS 8.0, *) + internal static var rightMargin: ConstraintAttributes { return 8192 } + + @available(iOS 8.0, *) + internal static var topMargin: ConstraintAttributes { return 16384 } + + @available(iOS 8.0, *) + internal static var bottomMargin: ConstraintAttributes { return 32768 } + + @available(iOS 8.0, *) + internal static var leadingMargin: ConstraintAttributes { return 65536 } + + @available(iOS 8.0, *) + internal static var trailingMargin: ConstraintAttributes { return 131072 } + + @available(iOS 8.0, *) + internal static var centerXWithinMargins: ConstraintAttributes { return 262144 } + + @available(iOS 8.0, *) + internal static var centerYWithinMargins: ConstraintAttributes { return 524288 } + + // aggregates + + internal static var edges: ConstraintAttributes { return 15 } + internal static var directionalEdges: ConstraintAttributes { return 58 } + internal static var size: ConstraintAttributes { return 192 } + internal static var center: ConstraintAttributes { return 768 } + + @available(iOS 8.0, *) + internal static var margins: ConstraintAttributes { return 61440 } + + @available(iOS 8.0, *) + internal static var directionalMargins: ConstraintAttributes { return 245760 } + + @available(iOS 8.0, *) + internal static var centerWithinMargins: ConstraintAttributes { return 786432 } + + internal var layoutAttributes:[LayoutAttribute] { + var attrs = [LayoutAttribute]() + if (self.contains(ConstraintAttributes.left)) { + attrs.append(.left) + } + if (self.contains(ConstraintAttributes.top)) { + attrs.append(.top) + } + if (self.contains(ConstraintAttributes.right)) { + attrs.append(.right) + } + if (self.contains(ConstraintAttributes.bottom)) { + attrs.append(.bottom) + } + if (self.contains(ConstraintAttributes.leading)) { + attrs.append(.leading) + } + if (self.contains(ConstraintAttributes.trailing)) { + attrs.append(.trailing) + } + if (self.contains(ConstraintAttributes.width)) { + attrs.append(.width) + } + if (self.contains(ConstraintAttributes.height)) { + attrs.append(.height) + } + if (self.contains(ConstraintAttributes.centerX)) { + attrs.append(.centerX) + } + if (self.contains(ConstraintAttributes.centerY)) { + attrs.append(.centerY) + } + if (self.contains(ConstraintAttributes.lastBaseline)) { + attrs.append(.lastBaseline) + } + + #if os(iOS) || os(tvOS) + if (self.contains(ConstraintAttributes.firstBaseline)) { + attrs.append(.firstBaseline) + } + if (self.contains(ConstraintAttributes.leftMargin)) { + attrs.append(.leftMargin) + } + if (self.contains(ConstraintAttributes.rightMargin)) { + attrs.append(.rightMargin) + } + if (self.contains(ConstraintAttributes.topMargin)) { + attrs.append(.topMargin) + } + if (self.contains(ConstraintAttributes.bottomMargin)) { + attrs.append(.bottomMargin) + } + if (self.contains(ConstraintAttributes.leadingMargin)) { + attrs.append(.leadingMargin) + } + if (self.contains(ConstraintAttributes.trailingMargin)) { + attrs.append(.trailingMargin) + } + if (self.contains(ConstraintAttributes.centerXWithinMargins)) { + attrs.append(.centerXWithinMargins) + } + if (self.contains(ConstraintAttributes.centerYWithinMargins)) { + attrs.append(.centerYWithinMargins) + } + #endif + + return attrs + } +} + +internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { + return left.union(right) +} + +internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { + left.formUnion(right) +} + +internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { + left.subtract(right) +} + +internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { + return left.rawValue == right.rawValue +} diff --git a/Example/Pods/SnapKit/Source/ConstraintConfig.swift b/Example/Pods/SnapKit/Source/ConstraintConfig.swift new file mode 100644 index 0000000..2746b7d --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintConfig.swift @@ -0,0 +1,37 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit + public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection +#else + import AppKit + public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection +#endif + + +public struct ConstraintConfig { + + public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift b/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift new file mode 100644 index 0000000..7f54907 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift @@ -0,0 +1,213 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintConstantTarget { +} + +extension CGPoint: ConstraintConstantTarget { +} + +extension CGSize: ConstraintConstantTarget { +} + +extension ConstraintInsets: ConstraintConstantTarget { +} + +#if os(iOS) || os(tvOS) +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintConstantTarget { +} +#endif + +extension ConstraintConstantTarget { + + internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { + if let value = self as? CGFloat { + return value + } + + if let value = self as? Float { + return CGFloat(value) + } + + if let value = self as? Double { + return CGFloat(value) + } + + if let value = self as? Int { + return CGFloat(value) + } + + if let value = self as? UInt { + return CGFloat(value) + } + + if let value = self as? CGSize { + if layoutAttribute == .width { + return value.width + } else if layoutAttribute == .height { + return value.height + } else { + return 0.0 + } + } + + if let value = self as? CGPoint { + #if os(iOS) || os(tvOS) + switch layoutAttribute { + case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: + return value.x + case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: + return value.y + case .width, .height, .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #else + switch layoutAttribute { + case .left, .right, .leading, .trailing, .centerX: + return value.x + case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: + return value.y + case .width, .height, .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #endif + } + + if let value = self as? ConstraintInsets { + #if os(iOS) || os(tvOS) + switch layoutAttribute { + case .left, .leftMargin: + return value.left + case .top, .topMargin, .firstBaseline: + return value.top + case .right, .rightMargin: + return -value.right + case .bottom, .bottomMargin, .lastBaseline: + return -value.bottom + case .leading, .leadingMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right + case .trailing, .trailingMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left + case .centerX, .centerXWithinMargins: + return (value.left - value.right) / 2 + case .centerY, .centerYWithinMargins: + return (value.top - value.bottom) / 2 + case .width: + return -(value.left + value.right) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #else + switch layoutAttribute { + case .left: + return value.left + case .top, .firstBaseline: + return value.top + case .right: + return -value.right + case .bottom, .lastBaseline: + return -value.bottom + case .leading: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right + case .trailing: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left + case .centerX: + return (value.left - value.right) / 2 + case .centerY: + return (value.top - value.bottom) / 2 + case .width: + return -(value.left + value.right) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #endif + } + #endif + } + + #if os(iOS) || os(tvOS) + if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { + switch layoutAttribute { + case .left, .leftMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing + case .top, .topMargin, .firstBaseline: + return value.top + case .right, .rightMargin: + return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading + case .bottom, .bottomMargin, .lastBaseline: + return -value.bottom + case .leading, .leadingMargin: + return value.leading + case .trailing, .trailingMargin: + return -value.trailing + case .centerX, .centerXWithinMargins: + return (value.leading - value.trailing) / 2 + case .centerY, .centerYWithinMargins: + return (value.top - value.bottom) / 2 + case .width: + return -(value.leading + value.trailing) + case .height: + return -(value.top + value.bottom) + case .notAnAttribute: + return 0.0 + #if swift(>=5.0) + @unknown default: + return 0.0 + #else + default: + return 0.0 + #endif + } + } + #endif + + return 0.0 + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintDSL.swift b/Example/Pods/SnapKit/Source/ConstraintDSL.swift new file mode 100644 index 0000000..ecc5173 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintDSL.swift @@ -0,0 +1,194 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintDSL { + + var target: AnyObject? { get } + + func setLabel(_ value: String?) + func label() -> String? + +} +extension ConstraintDSL { + + public func setLabel(_ value: String?) { + objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) + } + public func label() -> String? { + return objc_getAssociatedObject(self.target as Any, &labelKey) as? String + } + +} +private var labelKey: UInt8 = 0 + + +public protocol ConstraintBasicAttributesDSL : ConstraintDSL { +} +extension ConstraintBasicAttributesDSL { + + // MARK: Basics + + public var left: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) + } + + public var top: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) + } + + public var right: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) + } + + public var bottom: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) + } + + public var leading: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) + } + + public var trailing: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) + } + + public var width: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) + } + + public var height: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) + } + + public var centerX: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) + } + + public var centerY: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) + } + + public var edges: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) + } + + public var directionalEdges: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) + } + + public var size: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) + } + + public var center: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) + } + +} + +public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { +} +extension ConstraintAttributesDSL { + + // MARK: Baselines + + @available(*, deprecated, message:"Use .lastBaseline instead") + public var baseline: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) + } + + @available(iOS 8.0, OSX 10.11, *) + public var lastBaseline: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) + } + + @available(iOS 8.0, OSX 10.11, *) + public var firstBaseline: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) + } + + // MARK: Margins + + @available(iOS 8.0, *) + public var leftMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) + } + + @available(iOS 8.0, *) + public var topMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) + } + + @available(iOS 8.0, *) + public var rightMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) + } + + @available(iOS 8.0, *) + public var bottomMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) + } + + @available(iOS 8.0, *) + public var leadingMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) + } + + @available(iOS 8.0, *) + public var trailingMargin: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) + } + + @available(iOS 8.0, *) + public var centerXWithinMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) + } + + @available(iOS 8.0, *) + public var centerYWithinMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) + } + + @available(iOS 8.0, *) + public var margins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) + } + + @available(iOS 8.0, *) + public var directionalMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) + } + + @available(iOS 8.0, *) + public var centerWithinMargins: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintDescription.swift b/Example/Pods/SnapKit/Source/ConstraintDescription.swift new file mode 100644 index 0000000..3521f9f --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintDescription.swift @@ -0,0 +1,69 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintDescription { + + internal let item: LayoutConstraintItem + internal var attributes: ConstraintAttributes + internal var relation: ConstraintRelation? = nil + internal var sourceLocation: (String, UInt)? = nil + internal var label: String? = nil + internal var related: ConstraintItem? = nil + internal var multiplier: ConstraintMultiplierTarget = 1.0 + internal var constant: ConstraintConstantTarget = 0.0 + internal var priority: ConstraintPriorityTarget = 1000.0 + internal lazy var constraint: Constraint? = { + guard let relation = self.relation, + let related = self.related, + let sourceLocation = self.sourceLocation else { + return nil + } + let from = ConstraintItem(target: self.item, attributes: self.attributes) + + return Constraint( + from: from, + to: related, + relation: relation, + sourceLocation: sourceLocation, + label: self.label, + multiplier: self.multiplier, + constant: self.constant, + priority: self.priority + ) + }() + + // MARK: Initialization + + internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { + self.item = item + self.attributes = attributes + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift b/Example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift new file mode 100644 index 0000000..955aec3 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift @@ -0,0 +1,49 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) +import UIKit +#else +import AppKit +#endif + +#if os(iOS) || os(tvOS) +public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { +} + +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { +} + +extension ConstraintDirectionalInsetTarget { + + @available(iOS 11.0, tvOS 11.0, *) + internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { + if let amount = self as? ConstraintDirectionalInsets { + return amount + } else { + return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + } + } +} +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift b/Example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift new file mode 100644 index 0000000..ada8ed5 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift @@ -0,0 +1,34 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +#if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift b/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift new file mode 100644 index 0000000..ba8a0f3 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift @@ -0,0 +1,72 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintInsetTarget: ConstraintConstantTarget { +} + +extension Int: ConstraintInsetTarget { +} + +extension UInt: ConstraintInsetTarget { +} + +extension Float: ConstraintInsetTarget { +} + +extension Double: ConstraintInsetTarget { +} + +extension CGFloat: ConstraintInsetTarget { +} + +extension ConstraintInsets: ConstraintInsetTarget { +} + +extension ConstraintInsetTarget { + + internal var constraintInsetTargetValue: ConstraintInsets { + if let amount = self as? ConstraintInsets { + return amount + } else if let amount = self as? Float { + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) + } else if let amount = self as? Double { + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) + } else if let amount = self as? CGFloat { + return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) + } else if let amount = self as? Int { + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) + } else if let amount = self as? UInt { + return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) + } else { + return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) + } + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintInsets.swift b/Example/Pods/SnapKit/Source/ConstraintInsets.swift new file mode 100644 index 0000000..738ca05 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintInsets.swift @@ -0,0 +1,35 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +#if os(iOS) || os(tvOS) + public typealias ConstraintInsets = UIEdgeInsets +#else + public typealias ConstraintInsets = NSEdgeInsets +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintItem.swift b/Example/Pods/SnapKit/Source/ConstraintItem.swift new file mode 100644 index 0000000..a342c1d --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintItem.swift @@ -0,0 +1,61 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public final class ConstraintItem { + + internal weak var target: AnyObject? + internal let attributes: ConstraintAttributes + + internal init(target: AnyObject?, attributes: ConstraintAttributes) { + self.target = target + self.attributes = attributes + } + + internal var layoutConstraintItem: LayoutConstraintItem? { + return self.target as? LayoutConstraintItem + } + +} + +public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { + // pointer equality + guard lhs !== rhs else { + return true + } + + // must both have valid targets and identical attributes + guard let target1 = lhs.target, + let target2 = rhs.target, + target1 === target2 && lhs.attributes == rhs.attributes else { + return false + } + + return true +} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift new file mode 100644 index 0000000..d429e0c --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift @@ -0,0 +1,36 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#endif + + +@available(iOS 9.0, OSX 10.11, *) +public extension ConstraintLayoutGuide { + + var snp: ConstraintLayoutGuideDSL { + return ConstraintLayoutGuideDSL(guide: self) + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift new file mode 100644 index 0000000..e3e50c8 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift @@ -0,0 +1,37 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +#if os(iOS) || os(tvOS) + @available(iOS 9.0, *) + public typealias ConstraintLayoutGuide = UILayoutGuide +#else + @available(OSX 10.11, *) + public typealias ConstraintLayoutGuide = NSLayoutGuide +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift new file mode 100644 index 0000000..0007819 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift @@ -0,0 +1,66 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +@available(iOS 9.0, OSX 10.11, *) +public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { + + @discardableResult + public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { + return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) + } + + public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.makeConstraints(item: self.guide, closure: closure) + } + + public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) + } + + public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.updateConstraints(item: self.guide, closure: closure) + } + + public func removeConstraints() { + ConstraintMaker.removeConstraints(item: self.guide) + } + + public var target: AnyObject? { + return self.guide + } + + internal let guide: ConstraintLayoutGuide + + internal init(guide: ConstraintLayoutGuide) { + self.guide = guide + + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift new file mode 100644 index 0000000..e92e9fb --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift @@ -0,0 +1,36 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +#if os(iOS) || os(tvOS) + @available(iOS 8.0, *) + public typealias ConstraintLayoutSupport = UILayoutSupport +#else + public class ConstraintLayoutSupport {} +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift new file mode 100644 index 0000000..5d6ae89 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift @@ -0,0 +1,56 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +@available(iOS 8.0, *) +public struct ConstraintLayoutSupportDSL: ConstraintDSL { + + public var target: AnyObject? { + return self.support + } + + internal let support: ConstraintLayoutSupport + + internal init(support: ConstraintLayoutSupport) { + self.support = support + + } + + public var top: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) + } + + public var bottom: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) + } + + public var height: ConstraintItem { + return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMaker.swift b/Example/Pods/SnapKit/Source/ConstraintMaker.swift new file mode 100644 index 0000000..38f4d31 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMaker.swift @@ -0,0 +1,212 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + +public class ConstraintMaker { + + public var left: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.left) + } + + public var top: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.top) + } + + public var bottom: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.bottom) + } + + public var right: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.right) + } + + public var leading: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.leading) + } + + public var trailing: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.trailing) + } + + public var width: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.width) + } + + public var height: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.height) + } + + public var centerX: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.centerX) + } + + public var centerY: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.centerY) + } + + @available(*, deprecated, message:"Use lastBaseline instead") + public var baseline: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.lastBaseline) + } + + public var lastBaseline: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.lastBaseline) + } + + @available(iOS 8.0, OSX 10.11, *) + public var firstBaseline: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.firstBaseline) + } + + @available(iOS 8.0, *) + public var leftMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.leftMargin) + } + + @available(iOS 8.0, *) + public var rightMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.rightMargin) + } + + @available(iOS 8.0, *) + public var topMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.topMargin) + } + + @available(iOS 8.0, *) + public var bottomMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.bottomMargin) + } + + @available(iOS 8.0, *) + public var leadingMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.leadingMargin) + } + + @available(iOS 8.0, *) + public var trailingMargin: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.trailingMargin) + } + + @available(iOS 8.0, *) + public var centerXWithinMargins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.centerXWithinMargins) + } + + @available(iOS 8.0, *) + public var centerYWithinMargins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.centerYWithinMargins) + } + + public var edges: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.edges) + } + public var directionalEdges: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.directionalEdges) + } + public var size: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.size) + } + public var center: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.center) + } + + @available(iOS 8.0, *) + public var margins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.margins) + } + + @available(iOS 8.0, *) + public var directionalMargins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.directionalMargins) + } + + @available(iOS 8.0, *) + public var centerWithinMargins: ConstraintMakerExtendable { + return self.makeExtendableWithAttributes(.centerWithinMargins) + } + + private let item: LayoutConstraintItem + private var descriptions = [ConstraintDescription]() + + internal init(item: LayoutConstraintItem) { + self.item = item + self.item.prepare() + } + + internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable { + let description = ConstraintDescription(item: self.item, attributes: attributes) + self.descriptions.append(description) + return ConstraintMakerExtendable(description) + } + + internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { + let maker = ConstraintMaker(item: item) + closure(maker) + var constraints: [Constraint] = [] + for description in maker.descriptions { + guard let constraint = description.constraint else { + continue + } + constraints.append(constraint) + } + return constraints + } + + internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { + let constraints = prepareConstraints(item: item, closure: closure) + for constraint in constraints { + constraint.activateIfNeeded(updatingExisting: false) + } + } + + internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { + self.removeConstraints(item: item) + self.makeConstraints(item: item, closure: closure) + } + + internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { + guard item.constraints.count > 0 else { + self.makeConstraints(item: item, closure: closure) + return + } + + let constraints = prepareConstraints(item: item, closure: closure) + for constraint in constraints { + constraint.activateIfNeeded(updatingExisting: true) + } + } + + internal static func removeConstraints(item: LayoutConstraintItem) { + let constraints = item.constraints + for constraint in constraints { + constraint.deactivateIfNeeded() + } + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift new file mode 100644 index 0000000..f768a17 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift @@ -0,0 +1,64 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintMakerEditable: ConstraintMakerPriortizable { + + @discardableResult + public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { + self.description.multiplier = amount + return self + } + + @discardableResult + public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { + return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) + } + + @discardableResult + public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { + self.description.constant = amount.constraintOffsetTargetValue + return self + } + + @discardableResult + public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { + self.description.constant = amount.constraintInsetTargetValue + return self + } + + #if os(iOS) || os(tvOS) + @discardableResult + @available(iOS 11.0, tvOS 11.0, *) + public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable { + self.description.constant = amount.constraintDirectionalInsetTargetValue + return self + } + #endif +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift new file mode 100644 index 0000000..ce47169 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift @@ -0,0 +1,179 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintMakerExtendable: ConstraintMakerRelatable { + + public var left: ConstraintMakerExtendable { + self.description.attributes += .left + return self + } + + public var top: ConstraintMakerExtendable { + self.description.attributes += .top + return self + } + + public var bottom: ConstraintMakerExtendable { + self.description.attributes += .bottom + return self + } + + public var right: ConstraintMakerExtendable { + self.description.attributes += .right + return self + } + + public var leading: ConstraintMakerExtendable { + self.description.attributes += .leading + return self + } + + public var trailing: ConstraintMakerExtendable { + self.description.attributes += .trailing + return self + } + + public var width: ConstraintMakerExtendable { + self.description.attributes += .width + return self + } + + public var height: ConstraintMakerExtendable { + self.description.attributes += .height + return self + } + + public var centerX: ConstraintMakerExtendable { + self.description.attributes += .centerX + return self + } + + public var centerY: ConstraintMakerExtendable { + self.description.attributes += .centerY + return self + } + + @available(*, deprecated, message:"Use lastBaseline instead") + public var baseline: ConstraintMakerExtendable { + self.description.attributes += .lastBaseline + return self + } + + public var lastBaseline: ConstraintMakerExtendable { + self.description.attributes += .lastBaseline + return self + } + + @available(iOS 8.0, OSX 10.11, *) + public var firstBaseline: ConstraintMakerExtendable { + self.description.attributes += .firstBaseline + return self + } + + @available(iOS 8.0, *) + public var leftMargin: ConstraintMakerExtendable { + self.description.attributes += .leftMargin + return self + } + + @available(iOS 8.0, *) + public var rightMargin: ConstraintMakerExtendable { + self.description.attributes += .rightMargin + return self + } + + @available(iOS 8.0, *) + public var topMargin: ConstraintMakerExtendable { + self.description.attributes += .topMargin + return self + } + + @available(iOS 8.0, *) + public var bottomMargin: ConstraintMakerExtendable { + self.description.attributes += .bottomMargin + return self + } + + @available(iOS 8.0, *) + public var leadingMargin: ConstraintMakerExtendable { + self.description.attributes += .leadingMargin + return self + } + + @available(iOS 8.0, *) + public var trailingMargin: ConstraintMakerExtendable { + self.description.attributes += .trailingMargin + return self + } + + @available(iOS 8.0, *) + public var centerXWithinMargins: ConstraintMakerExtendable { + self.description.attributes += .centerXWithinMargins + return self + } + + @available(iOS 8.0, *) + public var centerYWithinMargins: ConstraintMakerExtendable { + self.description.attributes += .centerYWithinMargins + return self + } + + public var edges: ConstraintMakerExtendable { + self.description.attributes += .edges + return self + } + public var directionalEdges: ConstraintMakerExtendable { + self.description.attributes += .directionalEdges + return self + } + public var size: ConstraintMakerExtendable { + self.description.attributes += .size + return self + } + + @available(iOS 8.0, *) + public var margins: ConstraintMakerExtendable { + self.description.attributes += .margins + return self + } + + @available(iOS 8.0, *) + public var directionalMargins: ConstraintMakerExtendable { + self.description.attributes += .directionalMargins + return self + } + + @available(iOS 8.0, *) + public var centerWithinMargins: ConstraintMakerExtendable { + self.description.attributes += .centerWithinMargins + return self + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift new file mode 100644 index 0000000..4e1379e --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift @@ -0,0 +1,49 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintMakerFinalizable { + + internal let description: ConstraintDescription + + internal init(_ description: ConstraintDescription) { + self.description = description + } + + @discardableResult + public func labeled(_ label: String) -> ConstraintMakerFinalizable { + self.description.label = label + return self + } + + public var constraint: Constraint { + return self.description.constraint! + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift new file mode 100644 index 0000000..e0d452d --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift @@ -0,0 +1,68 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintMakerPriortizable: ConstraintMakerFinalizable { + + @discardableResult + public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { + self.description.priority = amount.value + return self + } + + @discardableResult + public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { + self.description.priority = amount + return self + } + + @available(*, deprecated, message:"Use priority(.required) instead.") + @discardableResult + public func priorityRequired() -> ConstraintMakerFinalizable { + return self.priority(.required) + } + + @available(*, deprecated, message:"Use priority(.high) instead.") + @discardableResult + public func priorityHigh() -> ConstraintMakerFinalizable { + return self.priority(.high) + } + + @available(*, deprecated, message:"Use priority(.medium) instead.") + @discardableResult + public func priorityMedium() -> ConstraintMakerFinalizable { + return self.priority(.medium) + } + + @available(*, deprecated, message:"Use priority(.low) instead.") + @discardableResult + public func priorityLow() -> ConstraintMakerFinalizable { + return self.priority(.low) + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift new file mode 100644 index 0000000..7889532 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift @@ -0,0 +1,115 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class ConstraintMakerRelatable { + + internal let description: ConstraintDescription + + internal init(_ description: ConstraintDescription) { + self.description = description + } + + internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable { + let related: ConstraintItem + let constant: ConstraintConstantTarget + + if let other = other as? ConstraintItem { + guard other.attributes == ConstraintAttributes.none || + other.attributes.layoutAttributes.count <= 1 || + other.attributes.layoutAttributes == self.description.attributes.layoutAttributes || + other.attributes == .edges && self.description.attributes == .margins || + other.attributes == .margins && self.description.attributes == .edges || + other.attributes == .directionalEdges && self.description.attributes == .directionalMargins || + other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else { + fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))"); + } + + related = other + constant = 0.0 + } else if let other = other as? ConstraintView { + related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) + constant = 0.0 + } else if let other = other as? ConstraintConstantTarget { + related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none) + constant = other + } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide { + related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) + constant = 0.0 + } else { + fatalError("Invalid constraint. (\(file), \(line))") + } + + let editable = ConstraintMakerEditable(self.description) + editable.description.sourceLocation = (file, line) + editable.description.relation = relation + editable.description.related = related + editable.description.constant = constant + return editable + } + + @discardableResult + public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + return self.relatedTo(other, relation: .equal, file: file, line: line) + } + + @discardableResult + public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview else { + fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") + } + return self.relatedTo(other, relation: .equal, file: file, line: line) + } + + @discardableResult + public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) + } + + @discardableResult + public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview else { + fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") + } + return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) + } + + @discardableResult + public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) + } + + @discardableResult + public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { + guard let other = self.description.item.superview else { + fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") + } + return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift b/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift new file mode 100644 index 0000000..6fecd33 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift @@ -0,0 +1,75 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintMultiplierTarget { + + var constraintMultiplierTargetValue: CGFloat { get } + +} + +extension Int: ConstraintMultiplierTarget { + + public var constraintMultiplierTargetValue: CGFloat { + return CGFloat(self) + } + +} + +extension UInt: ConstraintMultiplierTarget { + + public var constraintMultiplierTargetValue: CGFloat { + return CGFloat(self) + } + +} + +extension Float: ConstraintMultiplierTarget { + + public var constraintMultiplierTargetValue: CGFloat { + return CGFloat(self) + } + +} + +extension Double: ConstraintMultiplierTarget { + + public var constraintMultiplierTargetValue: CGFloat { + return CGFloat(self) + } + +} + +extension CGFloat: ConstraintMultiplierTarget { + + public var constraintMultiplierTargetValue: CGFloat { + return self + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift b/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift new file mode 100644 index 0000000..bd9e0a1 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift @@ -0,0 +1,69 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintOffsetTarget: ConstraintConstantTarget { +} + +extension Int: ConstraintOffsetTarget { +} + +extension UInt: ConstraintOffsetTarget { +} + +extension Float: ConstraintOffsetTarget { +} + +extension Double: ConstraintOffsetTarget { +} + +extension CGFloat: ConstraintOffsetTarget { +} + +extension ConstraintOffsetTarget { + + internal var constraintOffsetTargetValue: CGFloat { + let offset: CGFloat + if let amount = self as? Float { + offset = CGFloat(amount) + } else if let amount = self as? Double { + offset = CGFloat(amount) + } else if let amount = self as? CGFloat { + offset = CGFloat(amount) + } else if let amount = self as? Int { + offset = CGFloat(amount) + } else if let amount = self as? UInt { + offset = CGFloat(amount) + } else { + offset = 0.0 + } + return offset + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintPriority.swift b/Example/Pods/SnapKit/Source/ConstraintPriority.swift new file mode 100644 index 0000000..f9dab16 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintPriority.swift @@ -0,0 +1,77 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + +public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable { + public typealias FloatLiteralType = Float + + public let value: Float + + public init(floatLiteral value: Float) { + self.value = value + } + + public init(_ value: Float) { + self.value = value + } + + public static var required: ConstraintPriority { + return 1000.0 + } + + public static var high: ConstraintPriority { + return 750.0 + } + + public static var medium: ConstraintPriority { + #if os(OSX) + return 501.0 + #else + return 500.0 + #endif + + } + + public static var low: ConstraintPriority { + return 250.0 + } + + public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool { + return lhs.value == rhs.value + } + + // MARK: Strideable + + public func advanced(by n: FloatLiteralType) -> ConstraintPriority { + return ConstraintPriority(floatLiteral: value + n) + } + + public func distance(to other: ConstraintPriority) -> FloatLiteralType { + return other.value - value + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift b/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift new file mode 100644 index 0000000..064f750 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift @@ -0,0 +1,85 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintPriorityTarget { + + var constraintPriorityTargetValue: Float { get } + +} + +extension Int: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return Float(self) + } + +} + +extension UInt: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return Float(self) + } + +} + +extension Float: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return self + } + +} + +extension Double: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return Float(self) + } + +} + +extension CGFloat: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return Float(self) + } + +} + +#if os(iOS) || os(tvOS) +extension UILayoutPriority: ConstraintPriorityTarget { + + public var constraintPriorityTargetValue: Float { + return self.rawValue + } + +} +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift b/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift new file mode 100644 index 0000000..d517a61 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift @@ -0,0 +1,72 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol ConstraintRelatableTarget { +} + +extension Int: ConstraintRelatableTarget { +} + +extension UInt: ConstraintRelatableTarget { +} + +extension Float: ConstraintRelatableTarget { +} + +extension Double: ConstraintRelatableTarget { +} + +extension CGFloat: ConstraintRelatableTarget { +} + +extension CGSize: ConstraintRelatableTarget { +} + +extension CGPoint: ConstraintRelatableTarget { +} + +extension ConstraintInsets: ConstraintRelatableTarget { +} + +#if os(iOS) || os(tvOS) +@available(iOS 11.0, tvOS 11.0, *) +extension ConstraintDirectionalInsets: ConstraintRelatableTarget { +} +#endif + +extension ConstraintItem: ConstraintRelatableTarget { +} + +extension ConstraintView: ConstraintRelatableTarget { +} + +@available(iOS 9.0, OSX 10.11, *) +extension ConstraintLayoutGuide: ConstraintRelatableTarget { +} diff --git a/Example/Pods/SnapKit/Source/ConstraintRelation.swift b/Example/Pods/SnapKit/Source/ConstraintRelation.swift new file mode 100644 index 0000000..446aaf7 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintRelation.swift @@ -0,0 +1,48 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +internal enum ConstraintRelation : Int { + case equal = 1 + case lessThanOrEqual + case greaterThanOrEqual + + internal var layoutRelation: LayoutRelation { + get { + switch(self) { + case .equal: + return .equal + case .lessThanOrEqual: + return .lessThanOrEqual + case .greaterThanOrEqual: + return .greaterThanOrEqual + } + } + } +} diff --git a/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift b/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift new file mode 100644 index 0000000..a4898dc --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift @@ -0,0 +1,152 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public extension ConstraintView { + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_left: ConstraintItem { return self.snp.left } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_top: ConstraintItem { return self.snp.top } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_right: ConstraintItem { return self.snp.right } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_bottom: ConstraintItem { return self.snp.bottom } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_leading: ConstraintItem { return self.snp.leading } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_trailing: ConstraintItem { return self.snp.trailing } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_width: ConstraintItem { return self.snp.width } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_height: ConstraintItem { return self.snp.height } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_centerX: ConstraintItem { return self.snp.centerX } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_centerY: ConstraintItem { return self.snp.centerY } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_baseline: ConstraintItem { return self.snp.baseline } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, OSX 10.11, *) + var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, OSX 10.11, *) + var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_topMargin: ConstraintItem { return self.snp.topMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_edges: ConstraintItem { return self.snp.edges } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_size: ConstraintItem { return self.snp.size } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + var snp_center: ConstraintItem { return self.snp.center } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_margins: ConstraintItem { return self.snp.margins } + + @available(iOS, deprecated, message:"Use newer snp.* syntax.") + @available(iOS 8.0, *) + var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { + return self.snp.prepareConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.makeConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.remakeConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + self.snp.updateConstraints(closure) + } + + @available(*, deprecated, message:"Use newer snp.* syntax.") + func snp_removeConstraints() { + self.snp.removeConstraints() + } + + var snp: ConstraintViewDSL { + return ConstraintViewDSL(view: self) + } + +} diff --git a/Example/Pods/SnapKit/Source/ConstraintView.swift b/Example/Pods/SnapKit/Source/ConstraintView.swift new file mode 100644 index 0000000..6ff8a76 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintView.swift @@ -0,0 +1,35 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +#if os(iOS) || os(tvOS) + public typealias ConstraintView = UIView +#else + public typealias ConstraintView = NSView +#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift b/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift new file mode 100644 index 0000000..a0187f9 --- /dev/null +++ b/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift @@ -0,0 +1,101 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public struct ConstraintViewDSL: ConstraintAttributesDSL { + + @discardableResult + public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { + return ConstraintMaker.prepareConstraints(item: self.view, closure: closure) + } + + public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.makeConstraints(item: self.view, closure: closure) + } + + public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.remakeConstraints(item: self.view, closure: closure) + } + + public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { + ConstraintMaker.updateConstraints(item: self.view, closure: closure) + } + + public func removeConstraints() { + ConstraintMaker.removeConstraints(item: self.view) + } + + public var contentHuggingHorizontalPriority: Float { + get { + return self.view.contentHuggingPriority(for: .horizontal).rawValue + } + nonmutating set { + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) + } + } + + public var contentHuggingVerticalPriority: Float { + get { + return self.view.contentHuggingPriority(for: .vertical).rawValue + } + nonmutating set { + self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) + } + } + + public var contentCompressionResistanceHorizontalPriority: Float { + get { + return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue + } + nonmutating set { + self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) + } + } + + public var contentCompressionResistanceVerticalPriority: Float { + get { + return self.view.contentCompressionResistancePriority(for: .vertical).rawValue + } + nonmutating set { + self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical) + } + } + + public var target: AnyObject? { + return self.view + } + + internal let view: ConstraintView + + internal init(view: ConstraintView) { + self.view = view + + } + +} diff --git a/Example/Pods/SnapKit/Source/Debugging.swift b/Example/Pods/SnapKit/Source/Debugging.swift new file mode 100644 index 0000000..a78579a --- /dev/null +++ b/Example/Pods/SnapKit/Source/Debugging.swift @@ -0,0 +1,169 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + +public extension LayoutConstraint { + + override var description: String { + var description = "<" + + description += descriptionForObject(self) + + if let firstItem = conditionalOptional(from: self.firstItem) { + description += " \(descriptionForObject(firstItem))" + } + + if self.firstAttribute != .notAnAttribute { + description += ".\(descriptionForAttribute(self.firstAttribute))" + } + + description += " \(descriptionForRelation(self.relation))" + + if let secondItem = self.secondItem { + description += " \(descriptionForObject(secondItem))" + } + + if self.secondAttribute != .notAnAttribute { + description += ".\(descriptionForAttribute(self.secondAttribute))" + } + + if self.multiplier != 1.0 { + description += " * \(self.multiplier)" + } + + if self.secondAttribute == .notAnAttribute { + description += " \(self.constant)" + } else { + if self.constant > 0.0 { + description += " + \(self.constant)" + } else if self.constant < 0.0 { + description += " - \(abs(self.constant))" + } + } + + if self.priority.rawValue != 1000.0 { + description += " ^\(self.priority)" + } + + description += ">" + + return description + } + +} + +private func descriptionForRelation(_ relation: LayoutRelation) -> String { + switch relation { + case .equal: return "==" + case .greaterThanOrEqual: return ">=" + case .lessThanOrEqual: return "<=" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } +} + +private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String { + #if os(iOS) || os(tvOS) + switch attribute { + case .notAnAttribute: return "notAnAttribute" + case .top: return "top" + case .left: return "left" + case .bottom: return "bottom" + case .right: return "right" + case .leading: return "leading" + case .trailing: return "trailing" + case .width: return "width" + case .height: return "height" + case .centerX: return "centerX" + case .centerY: return "centerY" + case .lastBaseline: return "lastBaseline" + case .firstBaseline: return "firstBaseline" + case .topMargin: return "topMargin" + case .leftMargin: return "leftMargin" + case .bottomMargin: return "bottomMargin" + case .rightMargin: return "rightMargin" + case .leadingMargin: return "leadingMargin" + case .trailingMargin: return "trailingMargin" + case .centerXWithinMargins: return "centerXWithinMargins" + case .centerYWithinMargins: return "centerYWithinMargins" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } + #else + switch attribute { + case .notAnAttribute: return "notAnAttribute" + case .top: return "top" + case .left: return "left" + case .bottom: return "bottom" + case .right: return "right" + case .leading: return "leading" + case .trailing: return "trailing" + case .width: return "width" + case .height: return "height" + case .centerX: return "centerX" + case .centerY: return "centerY" + case .lastBaseline: return "lastBaseline" + case .firstBaseline: return "firstBaseline" + #if swift(>=5.0) + @unknown default: return "unknown" + #endif + } + #endif +} + +private func conditionalOptional(from object: Optional) -> Optional { + return object +} + +private func conditionalOptional(from object: T) -> Optional { + return Optional.some(object) +} + +private func descriptionForObject(_ object: AnyObject) -> String { + let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) + var desc = "" + + desc += type(of: object).description() + + if let object = object as? ConstraintView { + desc += ":\(object.snp.label() ?? pointerDescription)" + } else if let object = object as? LayoutConstraint { + desc += ":\(object.label ?? pointerDescription)" + } else { + desc += ":\(pointerDescription)" + } + + if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { + desc += "@\((file as NSString).lastPathComponent)#\(line)" + } + + desc += "" + return desc +} diff --git a/Example/Pods/SnapKit/Source/LayoutConstraint.swift b/Example/Pods/SnapKit/Source/LayoutConstraint.swift new file mode 100644 index 0000000..5425ea8 --- /dev/null +++ b/Example/Pods/SnapKit/Source/LayoutConstraint.swift @@ -0,0 +1,61 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public class LayoutConstraint : NSLayoutConstraint { + + public var label: String? { + get { + return self.identifier + } + set { + self.identifier = newValue + } + } + + internal weak var constraint: Constraint? = nil + +} + +internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { + // If firstItem or secondItem on either constraint has a dangling pointer + // this comparison can cause a crash. The solution for this is to ensure + // your layout code hold strong references to things like Views, LayoutGuides + // and LayoutAnchors as SnapKit will not keep strong references to any of these. + guard lhs.firstAttribute == rhs.firstAttribute && + lhs.secondAttribute == rhs.secondAttribute && + lhs.relation == rhs.relation && + lhs.priority == rhs.priority && + lhs.multiplier == rhs.multiplier && + lhs.secondItem === rhs.secondItem && + lhs.firstItem === rhs.firstItem else { + return false + } + return true +} diff --git a/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift b/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift new file mode 100644 index 0000000..a59de6b --- /dev/null +++ b/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift @@ -0,0 +1,93 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#else + import AppKit +#endif + + +public protocol LayoutConstraintItem: class { +} + +@available(iOS 9.0, OSX 10.11, *) +extension ConstraintLayoutGuide : LayoutConstraintItem { +} + +extension ConstraintView : LayoutConstraintItem { +} + + +extension LayoutConstraintItem { + + internal func prepare() { + if let view = self as? ConstraintView { + view.translatesAutoresizingMaskIntoConstraints = false + } + } + + internal var superview: ConstraintView? { + if let view = self as? ConstraintView { + return view.superview + } + + if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { + return guide.owningView + } + + return nil + } + internal var constraints: [Constraint] { + return self.constraintsSet.allObjects as! [Constraint] + } + + internal func add(constraints: [Constraint]) { + let constraintsSet = self.constraintsSet + for constraint in constraints { + constraintsSet.add(constraint) + } + } + + internal func remove(constraints: [Constraint]) { + let constraintsSet = self.constraintsSet + for constraint in constraints { + constraintsSet.remove(constraint) + } + } + + private var constraintsSet: NSMutableSet { + let constraintsSet: NSMutableSet + + if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { + constraintsSet = existing + } else { + constraintsSet = NSMutableSet() + objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + return constraintsSet + + } + +} +private var constraintsKey: UInt8 = 0 diff --git a/Example/Pods/SnapKit/Source/Typealiases.swift b/Example/Pods/SnapKit/Source/Typealiases.swift new file mode 100644 index 0000000..ded96cc --- /dev/null +++ b/Example/Pods/SnapKit/Source/Typealiases.swift @@ -0,0 +1,42 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +#if os(iOS) || os(tvOS) + import UIKit +#if swift(>=4.2) + typealias LayoutRelation = NSLayoutConstraint.Relation + typealias LayoutAttribute = NSLayoutConstraint.Attribute +#else + typealias LayoutRelation = NSLayoutRelation + typealias LayoutAttribute = NSLayoutAttribute +#endif + typealias LayoutPriority = UILayoutPriority +#else + import AppKit + typealias LayoutRelation = NSLayoutConstraint.Relation + typealias LayoutAttribute = NSLayoutConstraint.Attribute + typealias LayoutPriority = NSLayoutConstraint.Priority +#endif + diff --git a/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift b/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift new file mode 100644 index 0000000..8e7644c --- /dev/null +++ b/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift @@ -0,0 +1,36 @@ +// +// SnapKit +// +// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if os(iOS) || os(tvOS) + import UIKit +#endif + + +@available(iOS 8.0, *) +public extension ConstraintLayoutSupport { + + var snp: ConstraintLayoutSupportDSL { + return ConstraintLayoutSupportDSL(support: self) + } + +} diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.markdown new file mode 100644 index 0000000..abfdf6f --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.markdown @@ -0,0 +1,49 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## RHViewStateKit + +Copyright (c) 2021 bagusandinata + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## SnapKit + +Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.plist new file mode 100644 index 0000000..d98df2d --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-acknowledgements.plist @@ -0,0 +1,87 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2021 bagusandinata <bagus.dinata@erajaya.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + RHViewStateKit + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + SnapKit + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-dummy.m b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-dummy.m new file mode 100644 index 0000000..cbd23dd --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_RHViewStateKit_Example : NSObject +@end +@implementation PodsDummy_Pods_RHViewStateKit_Example +@end diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh new file mode 100755 index 0000000..f8f2861 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh @@ -0,0 +1,187 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/RHViewStateKit/RHViewStateKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/RHViewStateKit/RHViewStateKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-umbrella.h new file mode 100644 index 0000000..c1e69e0 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_RHViewStateKit_ExampleVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_RHViewStateKit_ExampleVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.debug.xcconfig new file mode 100644 index 0000000..19bbc18 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.debug.xcconfig @@ -0,0 +1,14 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit/RHViewStateKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "RHViewStateKit" -framework "SnapKit" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap new file mode 100644 index 0000000..b3ca0d6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.modulemap @@ -0,0 +1,6 @@ +framework module Pods_RHViewStateKit_Example { + umbrella header "Pods-RHViewStateKit_Example-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.release.xcconfig new file mode 100644 index 0000000..19bbc18 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.release.xcconfig @@ -0,0 +1,14 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit/RHViewStateKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "RHViewStateKit" -framework "SnapKit" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-dummy.m new file mode 100644 index 0000000..043273b --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_RHViewStateKit_Tests : NSObject +@end +@implementation PodsDummy_Pods_RHViewStateKit_Tests +@end diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-frameworks.sh new file mode 100755 index 0000000..7846a74 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-frameworks.sh @@ -0,0 +1,185 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-umbrella.h new file mode 100644 index 0000000..023cbaf --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_RHViewStateKit_TestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_RHViewStateKit_TestsVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.debug.xcconfig new file mode 100644 index 0000000..61f96b4 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.debug.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit/RHViewStateKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "RHViewStateKit" -framework "SnapKit" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap new file mode 100644 index 0000000..3873ddf --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_RHViewStateKit_Tests { + umbrella header "Pods-RHViewStateKit_Tests-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.release.xcconfig new file mode 100644 index 0000000..61f96b4 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.release.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit/RHViewStateKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "RHViewStateKit" -framework "SnapKit" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-dummy.m b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-dummy.m new file mode 100644 index 0000000..9382622 --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_RHViewStateKit : NSObject +@end +@implementation PodsDummy_RHViewStateKit +@end diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-umbrella.h b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-umbrella.h new file mode 100644 index 0000000..4f722b7 --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double RHViewStateKitVersionNumber; +FOUNDATION_EXPORT const unsigned char RHViewStateKitVersionString[]; + diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.debug.xcconfig b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.debug.xcconfig new file mode 100644 index 0000000..01b12bb --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.debug.xcconfig @@ -0,0 +1,14 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.modulemap b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.modulemap new file mode 100644 index 0000000..3c77355 --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.modulemap @@ -0,0 +1,6 @@ +framework module RHViewStateKit { + umbrella header "RHViewStateKit-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.release.xcconfig b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.release.xcconfig new file mode 100644 index 0000000..01b12bb --- /dev/null +++ b/Example/Pods/Target Support Files/RHViewStateKit/RHViewStateKit.release.xcconfig @@ -0,0 +1,14 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RHViewStateKit +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist b/Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist new file mode 100644 index 0000000..8d87a1a --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 5.0.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m new file mode 100644 index 0000000..b44e8e5 --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapKit : NSObject +@end +@implementation PodsDummy_SnapKit +@end diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h new file mode 100644 index 0000000..1b1be64 --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapKitVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; + diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig b/Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig new file mode 100644 index 0000000..39fc265 --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap new file mode 100644 index 0000000..4b3e47b --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap @@ -0,0 +1,6 @@ +framework module SnapKit { + umbrella header "SnapKit-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig b/Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig new file mode 100644 index 0000000..39fc265 --- /dev/null +++ b/Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/RHViewStateKit.xcodeproj/project.pbxproj b/Example/RHViewStateKit.xcodeproj/project.pbxproj new file mode 100644 index 0000000..600d0ba --- /dev/null +++ b/Example/RHViewStateKit.xcodeproj/project.pbxproj @@ -0,0 +1,665 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 490E648926A31CD8002A10DE /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490E648726A31CD8002A10DE /* MainViewController.swift */; }; + 490E649C26A4A4F7002A10DE /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490E649B26A4A4F7002A10DE /* Extension.swift */; }; + 492AB04F26A80B9E00D17413 /* ItemTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB04E26A80B9E00D17413 /* ItemTableViewCell.swift */; }; + 492AB05426A810FB00D17413 /* ExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB05226A810FB00D17413 /* ExampleViewController.swift */; }; + 492AB07926A9DB4A00D17413 /* EAnimationBallPulseSync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB07526A9DB4A00D17413 /* EAnimationBallPulseSync.swift */; }; + 492AB07A26A9DB4A00D17413 /* EAnimationMultipleBallClipRotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB07626A9DB4A00D17413 /* EAnimationMultipleBallClipRotate.swift */; }; + 492AB07B26A9DB4A00D17413 /* EActivityIndicatorShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB07726A9DB4A00D17413 /* EActivityIndicatorShape.swift */; }; + 492AB07C26A9DB4A00D17413 /* EActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AB07826A9DB4A00D17413 /* EActivityIndicatorView.swift */; }; + 493F4A3426AC95550061908A /* ExampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493F4A3226AC95550061908A /* ExampleTableViewController.swift */; }; + 493F4A3726AD9E710061908A /* TableViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493F4A3626AD9E710061908A /* TableViewState.swift */; }; + 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; + 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; + 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; + 62F627B7F4C23D82293F5C42 /* Pods_RHViewStateKit_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F133B3CCEA0B2A20CBC37096 /* Pods_RHViewStateKit_Tests.framework */; }; + 8E22708FD33F281591F4368A /* Pods_RHViewStateKit_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4209A5818EE8209B92690FC /* Pods_RHViewStateKit_Example.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 607FACC81AFB9204008FA782 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 607FACCF1AFB9204008FA782; + remoteInfo = RHViewStateKit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 001FD45FAAB3AFBC1A67B500 /* Pods-RHViewStateKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHViewStateKit_Tests.release.xcconfig"; path = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.release.xcconfig"; sourceTree = ""; }; + 337DFFC6C6456878C47388A3 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; + 33F508E0EC66F41123858D78 /* Pods-RHViewStateKit_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHViewStateKit_Example.debug.xcconfig"; path = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.debug.xcconfig"; sourceTree = ""; }; + 490E648726A31CD8002A10DE /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 490E649B26A4A4F7002A10DE /* Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extension.swift; sourceTree = ""; }; + 492AB04E26A80B9E00D17413 /* ItemTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTableViewCell.swift; sourceTree = ""; }; + 492AB05226A810FB00D17413 /* ExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleViewController.swift; sourceTree = ""; }; + 492AB05A26A876E700D17413 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 492AB05E26A8770B00D17413 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 492AB07526A9DB4A00D17413 /* EAnimationBallPulseSync.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EAnimationBallPulseSync.swift; sourceTree = ""; }; + 492AB07626A9DB4A00D17413 /* EAnimationMultipleBallClipRotate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EAnimationMultipleBallClipRotate.swift; sourceTree = ""; }; + 492AB07726A9DB4A00D17413 /* EActivityIndicatorShape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EActivityIndicatorShape.swift; sourceTree = ""; }; + 492AB07826A9DB4A00D17413 /* EActivityIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EActivityIndicatorView.swift; sourceTree = ""; }; + 493F4A3226AC95550061908A /* ExampleTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleTableViewController.swift; sourceTree = ""; }; + 493F4A3626AD9E710061908A /* TableViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewState.swift; sourceTree = ""; }; + 57FD731DBBD4D687A98418C9 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; + 607FACD01AFB9204008FA782 /* RHViewStateKit_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RHViewStateKit_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 607FACE51AFB9204008FA782 /* RHViewStateKit_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RHViewStateKit_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; + 6C6FB6924C3664A3EA390738 /* Pods-RHViewStateKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHViewStateKit_Example.release.xcconfig"; path = "Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example.release.xcconfig"; sourceTree = ""; }; + B44C3412625A37BDC56B8E93 /* Pods-RHViewStateKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHViewStateKit_Tests.debug.xcconfig"; path = "Target Support Files/Pods-RHViewStateKit_Tests/Pods-RHViewStateKit_Tests.debug.xcconfig"; sourceTree = ""; }; + B4D194DF5CAB382C3999B4A4 /* RHViewStateKit.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = RHViewStateKit.podspec; path = ../RHViewStateKit.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + E4209A5818EE8209B92690FC /* Pods_RHViewStateKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RHViewStateKit_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F133B3CCEA0B2A20CBC37096 /* Pods_RHViewStateKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RHViewStateKit_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 607FACCD1AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8E22708FD33F281591F4368A /* Pods_RHViewStateKit_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE21AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 62F627B7F4C23D82293F5C42 /* Pods_RHViewStateKit_Tests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 016D142B3F336A43DE2E2F58 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 492AB05E26A8770B00D17413 /* SnapKit.framework */, + 492AB05A26A876E700D17413 /* SnapKit.framework */, + E4209A5818EE8209B92690FC /* Pods_RHViewStateKit_Example.framework */, + F133B3CCEA0B2A20CBC37096 /* Pods_RHViewStateKit_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1491A4723A5A4D7FBB475C03 /* Pods */ = { + isa = PBXGroup; + children = ( + 33F508E0EC66F41123858D78 /* Pods-RHViewStateKit_Example.debug.xcconfig */, + 6C6FB6924C3664A3EA390738 /* Pods-RHViewStateKit_Example.release.xcconfig */, + B44C3412625A37BDC56B8E93 /* Pods-RHViewStateKit_Tests.debug.xcconfig */, + 001FD45FAAB3AFBC1A67B500 /* Pods-RHViewStateKit_Tests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 490E648626A31CC4002A10DE /* Main */ = { + isa = PBXGroup; + children = ( + 490E648726A31CD8002A10DE /* MainViewController.swift */, + 492AB04E26A80B9E00D17413 /* ItemTableViewCell.swift */, + ); + path = Main; + sourceTree = ""; + }; + 492AB05126A810BC00D17413 /* ExampleUIViewContoller */ = { + isa = PBXGroup; + children = ( + 492AB05226A810FB00D17413 /* ExampleViewController.swift */, + ); + path = ExampleUIViewContoller; + sourceTree = ""; + }; + 492AB07426A9DADC00D17413 /* Animation */ = { + isa = PBXGroup; + children = ( + 492AB07726A9DB4A00D17413 /* EActivityIndicatorShape.swift */, + 492AB07826A9DB4A00D17413 /* EActivityIndicatorView.swift */, + 492AB07526A9DB4A00D17413 /* EAnimationBallPulseSync.swift */, + 492AB07626A9DB4A00D17413 /* EAnimationMultipleBallClipRotate.swift */, + ); + path = Animation; + sourceTree = ""; + }; + 493F4A3126AC95320061908A /* ExampleTableView */ = { + isa = PBXGroup; + children = ( + 493F4A3226AC95550061908A /* ExampleTableViewController.swift */, + 493F4A3626AD9E710061908A /* TableViewState.swift */, + ); + path = ExampleTableView; + sourceTree = ""; + }; + 607FACC71AFB9204008FA782 = { + isa = PBXGroup; + children = ( + 607FACF51AFB993E008FA782 /* Podspec Metadata */, + 607FACD21AFB9204008FA782 /* Example for RHViewStateKit */, + 607FACE81AFB9204008FA782 /* Tests */, + 607FACD11AFB9204008FA782 /* Products */, + 1491A4723A5A4D7FBB475C03 /* Pods */, + 016D142B3F336A43DE2E2F58 /* Frameworks */, + ); + sourceTree = ""; + }; + 607FACD11AFB9204008FA782 /* Products */ = { + isa = PBXGroup; + children = ( + 607FACD01AFB9204008FA782 /* RHViewStateKit_Example.app */, + 607FACE51AFB9204008FA782 /* RHViewStateKit_Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 607FACD21AFB9204008FA782 /* Example for RHViewStateKit */ = { + isa = PBXGroup; + children = ( + 493F4A3126AC95320061908A /* ExampleTableView */, + 492AB07426A9DADC00D17413 /* Animation */, + 492AB05126A810BC00D17413 /* ExampleUIViewContoller */, + 490E648626A31CC4002A10DE /* Main */, + 490E649B26A4A4F7002A10DE /* Extension.swift */, + 607FACD51AFB9204008FA782 /* AppDelegate.swift */, + 607FACD71AFB9204008FA782 /* ViewController.swift */, + 607FACD91AFB9204008FA782 /* Main.storyboard */, + 607FACDC1AFB9204008FA782 /* Images.xcassets */, + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, + 607FACD31AFB9204008FA782 /* Supporting Files */, + ); + name = "Example for RHViewStateKit"; + path = RHViewStateKit; + sourceTree = ""; + }; + 607FACD31AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACD41AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACE81AFB9204008FA782 /* Tests */ = { + isa = PBXGroup; + children = ( + 607FACEB1AFB9204008FA782 /* Tests.swift */, + 607FACE91AFB9204008FA782 /* Supporting Files */, + ); + path = Tests; + sourceTree = ""; + }; + 607FACE91AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACEA1AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { + isa = PBXGroup; + children = ( + B4D194DF5CAB382C3999B4A4 /* RHViewStateKit.podspec */, + 337DFFC6C6456878C47388A3 /* README.md */, + 57FD731DBBD4D687A98418C9 /* LICENSE */, + ); + name = "Podspec Metadata"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 607FACCF1AFB9204008FA782 /* RHViewStateKit_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "RHViewStateKit_Example" */; + buildPhases = ( + C13A9CB954ED80C5ABD8A9C6 /* [CP] Check Pods Manifest.lock */, + 607FACCC1AFB9204008FA782 /* Sources */, + 607FACCD1AFB9204008FA782 /* Frameworks */, + 607FACCE1AFB9204008FA782 /* Resources */, + 967A1534A54CA771DDF22643 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RHViewStateKit_Example; + productName = RHViewStateKit; + productReference = 607FACD01AFB9204008FA782 /* RHViewStateKit_Example.app */; + productType = "com.apple.product-type.application"; + }; + 607FACE41AFB9204008FA782 /* RHViewStateKit_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "RHViewStateKit_Tests" */; + buildPhases = ( + 69ADEF2A189E81032BC8E85C /* [CP] Check Pods Manifest.lock */, + 607FACE11AFB9204008FA782 /* Sources */, + 607FACE21AFB9204008FA782 /* Frameworks */, + 607FACE31AFB9204008FA782 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 607FACE71AFB9204008FA782 /* PBXTargetDependency */, + ); + name = RHViewStateKit_Tests; + productName = Tests; + productReference = 607FACE51AFB9204008FA782 /* RHViewStateKit_Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 607FACC81AFB9204008FA782 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0830; + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = CocoaPods; + TargetAttributes = { + 607FACCF1AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = B5DSNG9A4N; + LastSwiftMigration = 0900; + }; + 607FACE41AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = B5DSNG9A4N; + LastSwiftMigration = 0900; + TestTargetID = 607FACCF1AFB9204008FA782; + }; + }; + }; + buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "RHViewStateKit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 607FACC71AFB9204008FA782; + productRefGroup = 607FACD11AFB9204008FA782 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 607FACCF1AFB9204008FA782 /* RHViewStateKit_Example */, + 607FACE41AFB9204008FA782 /* RHViewStateKit_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 607FACCE1AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE31AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 69ADEF2A189E81032BC8E85C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RHViewStateKit_Tests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 967A1534A54CA771DDF22643 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/RHViewStateKit/RHViewStateKit.framework", + "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RHViewStateKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RHViewStateKit_Example/Pods-RHViewStateKit_Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + C13A9CB954ED80C5ABD8A9C6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RHViewStateKit_Example-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 607FACCC1AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 493F4A3426AC95550061908A /* ExampleTableViewController.swift in Sources */, + 490E648926A31CD8002A10DE /* MainViewController.swift in Sources */, + 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, + 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, + 492AB07B26A9DB4A00D17413 /* EActivityIndicatorShape.swift in Sources */, + 492AB05426A810FB00D17413 /* ExampleViewController.swift in Sources */, + 492AB04F26A80B9E00D17413 /* ItemTableViewCell.swift in Sources */, + 492AB07C26A9DB4A00D17413 /* EActivityIndicatorView.swift in Sources */, + 492AB07A26A9DB4A00D17413 /* EAnimationMultipleBallClipRotate.swift in Sources */, + 492AB07926A9DB4A00D17413 /* EAnimationBallPulseSync.swift in Sources */, + 490E649C26A4A4F7002A10DE /* Extension.swift in Sources */, + 493F4A3726AD9E710061908A /* TableViewState.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE11AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 607FACCF1AFB9204008FA782 /* RHViewStateKit_Example */; + targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 607FACD91AFB9204008FA782 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 607FACDA1AFB9204008FA782 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 607FACDF1AFB9204008FA782 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 607FACED1AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 607FACEE1AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + 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_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 607FACF01AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33F508E0EC66F41123858D78 /* Pods-RHViewStateKit_Example.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = B5DSNG9A4N; + INFOPLIST_FILE = RHViewStateKit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0.0; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + }; + name = Debug; + }; + 607FACF11AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6C6FB6924C3664A3EA390738 /* Pods-RHViewStateKit_Example.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = B5DSNG9A4N; + INFOPLIST_FILE = RHViewStateKit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0.0; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + }; + name = Release; + }; + 607FACF31AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B44C3412625A37BDC56B8E93 /* Pods-RHViewStateKit_Tests.debug.xcconfig */; + buildSettings = { + DEVELOPMENT_TEAM = B5DSNG9A4N; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RHViewStateKit_Example.app/RHViewStateKit_Example"; + }; + name = Debug; + }; + 607FACF41AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 001FD45FAAB3AFBC1A67B500 /* Pods-RHViewStateKit_Tests.release.xcconfig */; + buildSettings = { + DEVELOPMENT_TEAM = B5DSNG9A4N; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RHViewStateKit_Example.app/RHViewStateKit_Example"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "RHViewStateKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACED1AFB9204008FA782 /* Debug */, + 607FACEE1AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "RHViewStateKit_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF01AFB9204008FA782 /* Debug */, + 607FACF11AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "RHViewStateKit_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF31AFB9204008FA782 /* Debug */, + 607FACF41AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 607FACC81AFB9204008FA782 /* Project object */; +} diff --git a/Example/RHViewStateKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/RHViewStateKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..4b68e87 --- /dev/null +++ b/Example/RHViewStateKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/RHViewStateKit.xcodeproj/xcshareddata/xcschemes/RHViewStateKit-Example.xcscheme b/Example/RHViewStateKit.xcodeproj/xcshareddata/xcschemes/RHViewStateKit-Example.xcscheme new file mode 100644 index 0000000..7d7354a --- /dev/null +++ b/Example/RHViewStateKit.xcodeproj/xcshareddata/xcschemes/RHViewStateKit-Example.xcscheme @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/RHViewStateKit.xcworkspace/contents.xcworkspacedata b/Example/RHViewStateKit.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..edcd63e --- /dev/null +++ b/Example/RHViewStateKit.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Example/RHViewStateKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/RHViewStateKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example/RHViewStateKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example/RHViewStateKit/Animation/EActivityIndicatorShape.swift b/Example/RHViewStateKit/Animation/EActivityIndicatorShape.swift new file mode 100644 index 0000000..8d61a18 --- /dev/null +++ b/Example/RHViewStateKit/Animation/EActivityIndicatorShape.swift @@ -0,0 +1,75 @@ +// +// EActivityIndicatorShape.swift +// app +// +// Created by Bagus andinata on 18/02/21. +// Copyright © 2021 wit. All rights reserved. +// + +// Copy and Edit partially from https://github.com/ninjaprox/NVActivityIndicatorView + +import UIKit + +enum EActivityIndicatorShape { + case circle + case ringTwoHalfVertical + case ringTwoHalfHorizontal + + func layerWith(size: CGSize, color: UIColor) -> CALayer { + let layer: CAShapeLayer = CAShapeLayer() + let path: UIBezierPath = UIBezierPath() + let lineWidth: CGFloat = 2 + + switch self { + case .circle: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: 0, + endAngle: CGFloat(2 * Double.pi), + clockwise: false) + layer.fillColor = color.cgColor + case .ringTwoHalfVertical: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-3 * Double.pi / 4), + endAngle: CGFloat(-Double.pi / 4), + clockwise: true) + path.move( + to: CGPoint(x: size.width / 2 - size.width / 2 * cos(CGFloat(Double.pi / 4)), + y: size.height / 2 + size.height / 2 * sin(CGFloat(Double.pi / 4))) + ) + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-5 * Double.pi / 4), + endAngle: CGFloat(-7 * Double.pi / 4), + clockwise: false) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = lineWidth + case .ringTwoHalfHorizontal: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(3 * Double.pi / 4), + endAngle: CGFloat(5 * Double.pi / 4), + clockwise: true) + path.move( + to: CGPoint(x: size.width / 2 + size.width / 2 * cos(CGFloat(Double.pi / 4)), + y: size.height / 2 - size.height / 2 * sin(CGFloat(Double.pi / 4))) + ) + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-Double.pi / 4), + endAngle: CGFloat(Double.pi / 4), + clockwise: true) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = lineWidth + } + + layer.backgroundColor = nil + layer.path = path.cgPath + layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height) + + return layer + } +} diff --git a/Example/RHViewStateKit/Animation/EActivityIndicatorView.swift b/Example/RHViewStateKit/Animation/EActivityIndicatorView.swift new file mode 100644 index 0000000..0445c9a --- /dev/null +++ b/Example/RHViewStateKit/Animation/EActivityIndicatorView.swift @@ -0,0 +1,167 @@ +// +// EActivityIndicatorView.swift +// app +// +// Created by Bagus andinata on 18/02/21. +// Copyright © 2021 wit. All rights reserved. +// + +// Copy and Edit partially from https://github.com/ninjaprox/NVActivityIndicatorView + +import UIKit +import RHViewStateKit + +protocol EActivityIndicatorAnimationDelegate { + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) +} + +public enum EActivityIndicatorType: CaseIterable { + case ballClipRotateMultiple + case ballPulseSync + + func animation() -> EActivityIndicatorAnimationDelegate { + switch self { + case .ballClipRotateMultiple: + return EAnimationMultipleBallClipRotate() + case .ballPulseSync: + return EAnimationBallPulseSync() + } + } +} + +public typealias FadeInAnimation = (UIView) -> Void + +public typealias FadeOutAnimation = (UIView, @escaping () -> Void) -> Void + +public final class EActivityIndicatorView: RHLoadingView { + + public static var DEFAULT_TYPE: EActivityIndicatorType = .ballClipRotateMultiple + + public static var DEFAULT_COLOR = UIColor.white + + public static var DEFAULT_TEXT_COLOR = UIColor.white + + public static var DEFAULT_PADDING: CGFloat = 0 + + public static var DEFAULT_BLOCKER_SIZE = CGSize(width: 60, height: 60) + + public static var DEFAULT_BLOCKER_DISPLAY_TIME_THRESHOLD = 0 + + public static var DEFAULT_BLOCKER_MINIMUM_DISPLAY_TIME = 0 + + public static var DEFAULT_BLOCKER_MESSAGE: String? + + public static var DEFAULT_BLOCKER_MESSAGE_SPACING = CGFloat(8.0) + + public static var DEFAULT_BLOCKER_MESSAGE_FONT = UIFont.boldSystemFont(ofSize: 20) + + public static var DEFAULT_BLOCKER_BACKGROUND_COLOR = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) + + public static var DEFAULT_FADE_IN_ANIMATION: FadeInAnimation = { view in + view.alpha = 0 + UIView.animate(withDuration: 0.25) { + view.alpha = 1 + } + } + + public static var DEFAULT_FADE_OUT_ANIMATION: FadeOutAnimation = { (view, complete) in + UIView.animate(withDuration: 0.25, + animations: { + view.alpha = 0 + }, + completion: { completed in + if completed { + complete() + } + }) + } + + public var type: EActivityIndicatorType = EActivityIndicatorView.DEFAULT_TYPE + + @available(*, unavailable, message: "This property is reserved for Interface Builder. Use 'type' instead.") + @IBInspectable var typeName: String { + get { + return getTypeName() + } + set { + _setTypeName(newValue) + } + } + + @IBInspectable public var color: UIColor = EActivityIndicatorView.DEFAULT_COLOR + + @IBInspectable public var padding: CGFloat = EActivityIndicatorView.DEFAULT_PADDING + + @available(*, deprecated) + public var animating: Bool { return isAnimating } + + private(set) public var isAnimating: Bool = false + + public required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + backgroundColor = UIColor.clear + isHidden = true + } + + public init(frame: CGRect, type: EActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) { + self.type = type ?? EActivityIndicatorView.DEFAULT_TYPE + self.color = color ?? EActivityIndicatorView.DEFAULT_COLOR + self.padding = padding ?? EActivityIndicatorView.DEFAULT_PADDING + super.init(frame: frame) + isHidden = true + } + + public override var intrinsicContentSize: CGSize { + return CGSize(width: bounds.width, height: bounds.height) + } + + public override var bounds: CGRect { + didSet { + if oldValue != bounds && isAnimating { + setUpAnimation() + } + } + } + + public override func startAnimating() { + guard !isAnimating else { + return + } + isHidden = false + isAnimating = true + layer.speed = 1 + setUpAnimation() + } + + public override func stopAnimating() { + guard isAnimating else { + return + } + isHidden = true + isAnimating = false + layer.sublayers?.removeAll() + } + + func _setTypeName(_ typeName: String) { + for item in EActivityIndicatorType.allCases { + if String(describing: item).caseInsensitiveCompare(typeName) == ComparisonResult.orderedSame { + type = item + break + } + } + } + + func getTypeName() -> String { + return String(describing: type) + } + + private final func setUpAnimation() { + let animation: EActivityIndicatorAnimationDelegate = type.animation() + var animationRect = UIEdgeInsetsInsetRect(frame, UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding)) + let minEdge = min(animationRect.width, animationRect.height) + + layer.sublayers = nil + animationRect.size = CGSize(width: minEdge, height: minEdge) + animation.setUpAnimation(in: layer, size: animationRect.size, color: color) + } +} diff --git a/Example/RHViewStateKit/Animation/EAnimationBallPulseSync.swift b/Example/RHViewStateKit/Animation/EAnimationBallPulseSync.swift new file mode 100644 index 0000000..060dc31 --- /dev/null +++ b/Example/RHViewStateKit/Animation/EAnimationBallPulseSync.swift @@ -0,0 +1,50 @@ +// +// EAnimationBallPulseSync.swift +// app +// +// Created by Bagus andinata on 02/03/21. +// Copyright © 2021 wit. All rights reserved. +// + +// Copy and Edit partially from https://github.com/ninjaprox/NVActivityIndicatorView + +import UIKit + +class EAnimationBallPulseSync: EActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - circleSpacing * 2) / 3 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - circleSize) / 2 + let deltaY = (size.height / 2 - circleSize / 2) / 2 + let duration: CFTimeInterval = 0.6 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0.07, 0.14, 0.21] + let timingFunciton = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.translation.y") + + animation.keyTimes = [0, 0.33, 0.66, 1] + animation.timingFunctions = [timingFunciton, timingFunciton, timingFunciton] + animation.values = [0, deltaY, -deltaY, 0] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + let circle = EActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + y: y, + width: circleSize, + height: circleSize) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Example/RHViewStateKit/Animation/EAnimationMultipleBallClipRotate.swift b/Example/RHViewStateKit/Animation/EAnimationMultipleBallClipRotate.swift new file mode 100644 index 0000000..99bff51 --- /dev/null +++ b/Example/RHViewStateKit/Animation/EAnimationMultipleBallClipRotate.swift @@ -0,0 +1,76 @@ +// +// EAnimationMultipleBallClipRotate.swift +// app +// +// Created by Bagus andinata on 18/02/21. +// Copyright © 2021 wit. All rights reserved. +// + +// Copy and Edit partially from https://github.com/ninjaprox/NVActivityIndicatorView + +import UIKit + +class EAnimationMultipleBallClipRotate: EActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let bigCircleSize: CGFloat = size.width + let smallCircleSize: CGFloat = size.width / 2 + let longDuration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + circleOf(shape: .ringTwoHalfHorizontal, + duration: longDuration, + timingFunction: timingFunction, + layer: layer, + size: bigCircleSize, + color: UIColor.init(hex: "#11074E"), reverse: false) + circleOf(shape: .ringTwoHalfVertical, + duration: longDuration, + timingFunction: timingFunction, + layer: layer, + size: smallCircleSize, + color: UIColor.init(hex: "#F4991D"), reverse: true) + } + + func createAnimationIn(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, reverse: Bool) -> CAAnimation { + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1, 0.6, 1] + scaleAnimation.duration = duration + + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = scaleAnimation.keyTimes + rotateAnimation.timingFunctions = [timingFunction, timingFunction] + if !reverse { + rotateAnimation.values = [0, Double.pi, 2 * Double.pi] + } else { + rotateAnimation.values = [0, -Double.pi, -2 * Double.pi] + } + rotateAnimation.duration = duration + + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, rotateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + return animation + } + + func circleOf(shape: EActivityIndicatorShape, duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGFloat, color: UIColor, reverse: Bool) { + let circle = shape.layerWith(size: CGSize(width: size, height: size), color: color) + let frame = CGRect(x: (layer.bounds.size.width - size) / 2, + y: (layer.bounds.size.height - size) / 2, + width: size, + height: size) + let animation = createAnimationIn(duration: duration, timingFunction: timingFunction, reverse: reverse) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Example/RHViewStateKit/AppDelegate.swift b/Example/RHViewStateKit/AppDelegate.swift new file mode 100644 index 0000000..0920759 --- /dev/null +++ b/Example/RHViewStateKit/AppDelegate.swift @@ -0,0 +1,49 @@ +// +// AppDelegate.swift +// RHViewStateKit +// +// Created by bagusandinata on 07/17/2021. +// Copyright (c) 2021 bagusandinata. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + window?.rootViewController = UINavigationController(rootViewController: MainViewController()) + window?.makeKeyAndVisible() + + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/Example/RHViewStateKit/Base.lproj/LaunchScreen.xib b/Example/RHViewStateKit/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..99ae82d --- /dev/null +++ b/Example/RHViewStateKit/Base.lproj/LaunchScreen.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/RHViewStateKit/Base.lproj/Main.storyboard b/Example/RHViewStateKit/Base.lproj/Main.storyboard new file mode 100644 index 0000000..7a5a8aa --- /dev/null +++ b/Example/RHViewStateKit/Base.lproj/Main.storyboard @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/RHViewStateKit/ExampleTableView/ExampleTableViewController.swift b/Example/RHViewStateKit/ExampleTableView/ExampleTableViewController.swift new file mode 100644 index 0000000..ebdf774 --- /dev/null +++ b/Example/RHViewStateKit/ExampleTableView/ExampleTableViewController.swift @@ -0,0 +1,125 @@ +// +// ExampleTableViewController.swift +// RHViewStateKit +// +// Created by Bagus andinata on 25/07/21. +// Copyright (c) 2021 All rights reserved. +// Template by BagusAnDinata +// + +import UIKit +import RHViewStateKit + +class ExampleTableViewController: UIViewController { + //MARK: - PROPERTY + private let tableView: UITableView = { + let view = UITableView() + view.register(ItemTableViewCell.self, forCellReuseIdentifier: "ItemTableViewCell") + return view + }() + + lazy var reloadButton: UIBarButtonItem = { + let button = UIButton(frame: CGRect(origin: .zero, size: CGSize(width: 32, height: 32))) + button.setTitle("Reload", for: .normal) + button.setTitleColor(.blue, for: .normal) + button.addTarget(self, action: #selector(reloadTapped), for: .touchUpInside) + button.contentHorizontalAlignment = .right + let barButton = UIBarButtonItem(customView: button) + return barButton + }() + + private struct TableContent { + var state: TableViewState + var title: String + var description: String + } + + private var content: [TableContent] { + return [TableContent(state: .EmptyData, title: "Empty data", description: "example empty data"), + TableContent(state: .InternalError, title: "Internal Error", description: "example internal error"), + TableContent(state: .Maintenance, title: "Maintenance", description: "example maintenance"), + TableContent(state: .NoInternet, title: "No Internet", description: "example no internet"),] + } + + //MARK: - UIVIEWCONTROLLER LIFECYLE + override func loadView() { + super.loadView() + + view.backgroundColor = .white + + view.addSubview(tableView) + tableView.dataSource = self + tableView.delegate = self + + var configLoading = RHLoadingConfiguration() + configLoading.backgroundColor = .black.withAlphaComponent(0.5) + configLoading.color = .red + tableView.viewState.delegate = self + tableView.viewState.loading = configLoading + + configureConstraints() + configureNavBar() + } + + override func viewDidLoad() { + super.viewDidLoad() + + } + + //MARK: - METHOD + private func configureConstraints() { + tableView.snp.makeConstraints { make in + make.edges.equalTo(view.safeAreaLayoutGuide).inset(UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)) + } + } + + private func configureNavBar() { + navigationItem.title = "RHViewStateKit" + navigationItem.backButtonTitle = "" + navigationItem.rightBarButtonItem = reloadButton + navigationController?.navigationBar.titleTextAttributes = [ + NSAttributedString.Key.foregroundColor: UIColor.black] + navigationController?.navigationBar.isTranslucent = false + navigationController?.navigationBar.backgroundColor = .white + navigationController?.navigationBar.tintColor = .black + } + + //MARK: - ACTION + @objc + private func reloadTapped() { + tableView.viewState.hide() + } +} + +extension ExampleTableViewController: RHViewStateDelegate { + func viewState(_ viewState: RHViewState, didTapButton button: UIButton) { + viewState.hide() + } +} + +extension ExampleTableViewController: UITableViewDataSource, UITableViewDelegate { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return content.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: "ItemTableViewCell") as? ItemTableViewCell else { + return UITableViewCell() + } + + cell.titleLabel.text = content[indexPath.row].title + cell.descriptionLabel.text = content[indexPath.row].description + cell.arrowRight.isHidden = false + + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.viewState.showLoader() + DispatchQueue.main.asyncAfter(deadline: .now()+2.0) { [weak self] in + guard let `self` = self else { return } + self.tableView.viewState.hideLoader() + self.tableView.viewState.show(self.content[indexPath.row].state) + } + } +} diff --git a/Example/RHViewStateKit/ExampleTableView/TableViewState.swift b/Example/RHViewStateKit/ExampleTableView/TableViewState.swift new file mode 100644 index 0000000..1efbcf3 --- /dev/null +++ b/Example/RHViewStateKit/ExampleTableView/TableViewState.swift @@ -0,0 +1,173 @@ +// +// TableViewState.swift +// RHViewStateKit_Example +// +// Created by Bagus andinata on 25/07/21. +// Copyright © 2021 CocoaPods. All rights reserved. +// + +import Foundation +import RHViewStateKit + +enum TableViewState: RHViewCollectionState { + case NoInternet + case EmptyData + case InternalError + case Maintenance + + var image: UIImage? { + switch self { + case .NoInternet: + return UIImage(named: "ic-no-internet") + case .EmptyData: + return UIImage(named: "ic-empty-data") + case .InternalError: + return UIImage(named: "ic-internal-error") + case .Maintenance: + return UIImage(named: "ic-maintenance") + } + } + + var title: String? { + switch self { + case .NoInternet: + return "No Internet Connection" + case .EmptyData: + return "Oops! It's Empty" + case .InternalError: + return "Oops! Something Went Wrong" + case .Maintenance: + return "We'll Be Back Soon" + } + } + + var description: String? { + switch self { + case .NoInternet: + return "Try turning on your Wifi or Mobile Data for using the app" + case .EmptyData: + return "There are no products under this category right now" + case .InternalError: + return "Try to reload this page or feel free to contact us if the problem persists" + case .Maintenance: + return "App is down for scheduled maintenance and expect to back online in a few minutes" + } + } + + var titleButton: String? { + switch self { + case .NoInternet: + return "RETRY" + case .EmptyData: + return "" + case .InternalError: + return "RELOAD PAGE" + case .Maintenance: + return "" + } + } + + var viewConfiguration: RHViewConfiguration { + var config = RHViewConfiguration() + + switch self { + case .NoInternet: + config.backgroundColor = UIColor(hex: "#ffd600") + case .EmptyData: + config.backgroundColor = UIColor(hex: "#c6ff00") + case .InternalError: + config.backgroundColor = UIColor(hex: "#fbe9e7") + case .Maintenance: + config.backgroundColor = UIColor(hex: "#40c4ff") + config.verticalConstraint = 100 + } + + return config + } + + var buttonConfiguration: RHButtonConfiguration { + var config = RHButtonConfiguration() + + switch self { + case .NoInternet: + config.shadowRadius = 8 + config.titleInset = 16.0 + config.cornerType = .custom(radius: 5) + case .InternalError: + config.attributes = [.font: UIFont.boldSystemFont(ofSize: 12), .foregroundColor: UIColor.red] + config.color = .clear + config.borderWidth = 1.0 + config.borderColor = .red + config.width = 200.0 + config.cornerType = .capsule + default: + return config + } + + return config + } + + var titleConfiguration: RHTitleConfiguration { + var config = RHTitleConfiguration() + + switch self { + case .NoInternet: + config.attributes = [.font: UIFont.boldSystemFont(ofSize: 24), .foregroundColor: UIColor.white] + case .EmptyData: + return config + case .InternalError: + return config + case .Maintenance: + config.attributes = [.font: UIFont.boldSystemFont(ofSize: 16), .foregroundColor: UIColor.white] + } + + return config + } + + var descriptionConfiguration: RHDescriptionConfiguration { + var config = RHDescriptionConfiguration() + + switch self { + case .NoInternet: + config.attributes = [.font: UIFont.systemFont(ofSize: 16), .foregroundColor: UIColor.black] + case .EmptyData: + return config + case .InternalError: + return config + case .Maintenance: + config.attributes = [.font: UIFont.boldSystemFont(ofSize: 12), .foregroundColor: UIColor.white] + } + + return config + } + + var imageConfiguration: RHImageConfiguration { + var config = RHImageConfiguration() + + switch self { + case .NoInternet: + config.animation = .fade(0.3, 0.3) + case .EmptyData: + config.animation = .scale(0.3, 0.3) + case .InternalError: + config.animation = .noAnimation + case .Maintenance: + config.animation = .scale(0.3, 0.3) + } + + return config + } + + var positionConfiguration: RHPositionConfiguration { + switch self { + case .NoInternet: + return RHPositionConfiguration(view: .top, text: .center, image: .bottom) + case .EmptyData: + return RHPositionConfiguration(view: .center, text: .justify, image: .top) + case .InternalError: + return RHPositionConfiguration(view: .bottom, text: .right, image: .top) + case .Maintenance: + return RHPositionConfiguration(view: .bottom, text: .center, image: .cover(50.0, 50.0)) + } + } +} diff --git a/Example/RHViewStateKit/ExampleUIViewContoller/ExampleViewController.swift b/Example/RHViewStateKit/ExampleUIViewContoller/ExampleViewController.swift new file mode 100644 index 0000000..2c787fe --- /dev/null +++ b/Example/RHViewStateKit/ExampleUIViewContoller/ExampleViewController.swift @@ -0,0 +1,133 @@ +// +// ExampleViewController.swift +// RHViewStateKit +// +// Created by Bagus andinata on 21/07/21. +// Copyright (c) 2021 All rights reserved. +// Template by BagusAnDinata +// + +import UIKit +import RHViewStateKit + +fileprivate enum ViewControllerState: RHViewCollectionState { + case noInternet +} + +class ExampleViewController: UIViewController { + //MARK: - PROPERTY + private let content: UILabel = { + let view = UILabel() + view.numberOfLines = 0 + view.text = " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum molestie, dolor eu ultricies tristique, lacus turpis vestibulum odio, at egestas nibh leo a est. Aenean bibendum ligula eros, sit amet ultricies nisi volutpat in. Aenean eget feugiat est, ac rhoncus justo. Integer vulputate lorem felis, vitae gravida mi consequat eu. Nunc volutpat id est eu pulvinar. Ut neque nisi, efficitur eu odio molestie, gravida posuere quam. Morbi consectetur id urna et dapibus. Nunc finibus vulputate lorem ut interdum. Cras convallis massa eros, ut pulvinar nisi consectetur eu. Aenean maximus laoreet velit, in auctor felis hendrerit vel. Mauris dapibus ultricies pellentesque. Suspendisse dignissim elit et tortor aliquet, cursus fermentum sapien volutpat. Duis metus ex, accumsan et sapien at, vulputate scelerisque nunc. Nam non enim ac lacus luctus convallis dignissim eu mauris. Curabitur eu tellus commodo libero sollicitudin placerat eget sit amet turpis. Sed dolor est, lacinia sed gravida ut, efficitur sit amet velit./nSed non gravida sapien. In feugiat rhoncus nisi, eu rutrum leo feugiat sed. Vestibulum semper maximus elementum. Nunc molestie libero urna, in aliquam felis eleifend et. Donec ante tortor, tempus non euismod quis, imperdiet ut urna. Integer mauris quam, consectetur ut sem vel, iaculis dapibus mauris. Donec orci neque, aliquet ac aliquet sit amet, elementum nec ipsum. Donec pretium eu nibh a tincidunt. Morbi blandit neque tortor, at egestas sem accumsan sed. Phasellus bibendum egestas euismod. Cras congue, velit sit amet lobortis dignissim, magna erat ullamcorper sapien, quis ullamcorper nunc urna sed tellus./nMaecenas in justo ac lectus tempus consectetur quis eget nulla. Sed ac tellus faucibus, ullamcorper ex vitae, blandit augue. Cras lectus risus, vestibulum at sapien a, egestas malesuada lorem. Nullam luctus nulla vitae commodo sollicitudin. Donec semper tortor in dapibus vestibulum. Pellentesque porttitor lacus massa, eu ultricies orci vestibulum nec. Ut est justo, aliquet nec blandit quis, luctus ullamcorper tellus. Etiam at congue odio. Nunc ac feugiat leo. Suspendisse potenti. Maecenas porta tortor justo, id ultrices quam elementum a. Donec condimentum venenatis dui. Cras in leo augue. Nam et arcu congue, finibus orci viverra, tempus tortor." + return view + }() + + lazy var reloadButton: UIBarButtonItem = { + let button = UIButton(frame: CGRect(origin: .zero, size: CGSize(width: 32, height: 32))) + button.setTitle("Reload", for: .normal) + button.setTitleColor(.blue, for: .normal) + button.addTarget(self, action: #selector(reloadTapped), for: .touchUpInside) + button.contentHorizontalAlignment = .right + let barButton = UIBarButtonItem(customView: button) + return barButton + }() + + //MARK: - UIVIEWCONTROLLER LIFECYLE + override func loadView() { + super.loadView() + + view.backgroundColor = .white + + view.addSubview(content) + + configureConstraints() + configureNavBar() + } + + override func viewDidLoad() { + super.viewDidLoad() + + let loadingSize = CGSize(width: 50, height: 50) + var configLoading = RHLoadingConfiguration() + configLoading.view = EActivityIndicatorView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: loadingSize), type: .ballPulseSync, color: UIColor.init(hex: "##ffd600")) + configLoading.size = loadingSize + view.viewState.loading = configLoading + view.viewState.delegate = self + view.viewState.dataSource = self + } + + //MARK: - METHOD + private func configureConstraints() { + content.snp.makeConstraints { make in + make.edges.equalTo(view.safeAreaLayoutGuide).inset(UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16)) + } + } + + private func configureNavBar() { + navigationItem.title = "UIViewController" + navigationItem.backButtonTitle = "" + navigationItem.rightBarButtonItem = reloadButton + navigationController?.navigationBar.titleTextAttributes = [ + NSAttributedString.Key.foregroundColor: UIColor.black] + navigationController?.navigationBar.isTranslucent = false + navigationController?.navigationBar.backgroundColor = .white + navigationController?.navigationBar.tintColor = .black + } + + //MARK: - ACTION + @objc + private func reloadTapped() { + view.viewState.showLoader() + DispatchQueue.main.asyncAfter(deadline: .now()+1.0) { [weak self] in + self?.view.viewState.hideLoader() + self?.view.viewState.show(ViewControllerState.noInternet) + } + } +} + +extension ExampleViewController: RHViewStateDelegate { + func viewState(_ viewState: RHViewState, didTapButton button: UIButton) { + view.viewState.hide() + } +} + +extension ExampleViewController: RHViewStateDataSource { + func rhPositionConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHPositionConfiguration { + return RHPositionConfiguration(view: .center, text: .center, image: .top) + } + + func rhButtonConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHButtonConfiguration { + var config = RHButtonConfiguration() + config.color = .clear + config.attributes = [.font: UIFont.boldSystemFont(ofSize: 16), .foregroundColor: UIColor.red] + return config + } + + func imageForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> UIImage? { + switch state as! ViewControllerState { + case .noInternet: + return UIImage(named: "ic-no-internet") + } + } + + func titleForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + switch state as! ViewControllerState { + case .noInternet: + return "No Internet Connection" + } + } + + func descriptionForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + switch state as! ViewControllerState { + case .noInternet: + return "Try turning on your WIFI or Mobile Data for using the app" + } + } + + func titleButtonForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + switch state as! ViewControllerState { + case .noInternet: return "Retry" + } + } +} diff --git a/Example/RHViewStateKit/Extension.swift b/Example/RHViewStateKit/Extension.swift new file mode 100644 index 0000000..aaf0e98 --- /dev/null +++ b/Example/RHViewStateKit/Extension.swift @@ -0,0 +1,45 @@ +// +// Extension.swift +// RHViewStateKit_Example +// +// Created by Bagus andinata on 19/07/21. +// Copyright © 2021 CocoaPods. All rights reserved. +// + +import UIKit + +extension UIColor { + public convenience init(hex: String) { + var r: CGFloat = 0 + var g: CGFloat = 0 + var b: CGFloat = 0 + var a: CGFloat = 1 + + let hexColor = hex.replacingOccurrences(of: "#", with: "") + let scanner = Scanner(string: hexColor) + var hexNumber: UInt64 = 0 + var valid = false + + if scanner.scanHexInt64(&hexNumber) { + if hexColor.count == 8 { + r = CGFloat((hexNumber & 0xff000000) >> 24) / 255 + g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255 + b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255 + a = CGFloat(hexNumber & 0x000000ff) / 255 + valid = true + } + else if hexColor.count == 6 { + r = CGFloat((hexNumber & 0xff0000) >> 16) / 255 + g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255 + b = CGFloat(hexNumber & 0x0000ff) / 255 + valid = true + } + } + + #if DEBUG + assert(valid, "UIColor initialized with invalid hex string") + #endif + + self.init(red: r, green: g, blue: b, alpha: a) + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/RHViewStateKit/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..8121323 --- /dev/null +++ b/Example/RHViewStateKit/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/Contents.json b/Example/RHViewStateKit/Images.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example/RHViewStateKit/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Contents.json b/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Contents.json new file mode 100644 index 0000000..5b465b6 --- /dev/null +++ b/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Vector 3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Vector 3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Vector 3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3.png b/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3.png new file mode 100644 index 0000000000000000000000000000000000000000..abdf2abbd593b95948b12ce635791ddf4884cb01 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)J!3HGPO%oyE#BP0c~4I@GUCcsse~LjS(Bn0`ySn@ZaY oAMoA!$r9K0gSo=_;p%OJ z#4r$rJq`_>kH8U@ND)nng-cKZMWm$U1O!e%m!F1k0VGNq$N{2=BhW;mV=s_|H)t0{ zc5uv&6l*l&Z~S6=Oi7Yl^nHI%L>nn(nq}Fea4P$&!cZr# z^`Hw(Jj8K)iIpFWB++S}=k@H0JRn(N(v_Y>v8O1CR&$`YbDE}k4}yRdtS9+H6g>BR z|D|o)&slH_*RHUqOK^n^&=n?OG3<7V4Z6|7UpTHa&jyBJSmQbxE8{znHc%-g06yz+ zNM2dNuIr95=~a(I{@tJd$OjMTZQB4-=(a4&l=gwxH>6@G*GrHAaz|joBE&{hh}%h5 zFbDmD|Al_QeIT|2eshd!=*^-iDq%6>&0&ZeTP)b_&G|rqjVr|V4J=T_`OP{GJpcdz M07*qoM6N<$g3g+xW&i*H literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3@3x.png b/Example/RHViewStateKit/Images.xcassets/ic-arrow-right.imageset/Vector 3@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..22c7e856d50a2a449f11b97cec09d36ae7d0f0c2 GIT binary patch literal 481 zcmV<70UrK|P) zeulr40LJ>^4?fHQ<9XfzH*fHlbCM)`m=Wgt{(BGXa*pHp6%?b@b?pw6yLhn=P(?@1 zDZ?7(v^1<|S(ZAEv%`HuP-kn~wvp%g1timSzpAQd+!Q1ANG;a+Ur`j5X_}v_)#?!s z?*w(XmSq99_(uwrg&AWz8CdThECuVg1xvvCP~lv75ba>R)xL1|34a?3EJS(m9=;-c zp~9o6Dm;m*zzhfpg22GH+Bb+FX~6S)5-JIoQr+)|4+Ve0;O@Pk%0>fXu%-P^&rnk8 zm>#g}$B`-}PS}GqDhozYR7#-~kRMEo669eNFbu;hNJMK_eeP0Vg9=uC%3y;o4K}D?)t9P*Jl#ZvI1DfCRZcj=N0^ac XRB-kP4r>Xw00000NkvXXu0mjfOTxrf literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1.png b/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1.png new file mode 100644 index 0000000000000000000000000000000000000000..849de0daf3b470edda39db259d970ea927fa2699 GIT binary patch literal 14040 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 literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1@2x.png b/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/011-surprise 1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..780dab582c459a448f295873f6ded5140f7ab0c9 GIT binary patch literal 29431 zcmZrXWl&s8vp5Tjy9IV}m!QE}+}$B~aMuKPcL|c_`}%6?ADfRX#r z@9`0|6z6=3BEyF?6sbBEht8v8V;A##@iJ!@*WV`{(d<`PrB#%;XC+w+~xw1vYdb7$6J2r_NdD%lvknS=I9n zNzeaTlzKRKOguG#NZD}}<-g^D02yqC11C~r`rDg9=|B^r;=U~qf6}*aeXwY`;bU!> zeoo##E#&Ql@3{H#2olhU6fnj432?CC=55vN7-$&PdS3!pFoe+Fk$nIFWw57-^|oRB z6!IWLfVK5a?@2((<43d^XD75mfMH9Vgbzv^tc8cs?_lOjtap;!Kz4zxg*rbZWa?s1 zB#6R}xEA4@BN3C}_NRQF3KPWN$(}K(4QLHn)#X{dCtUn6im*leP6-l0!bef;B`Q&j zgO!rtO*rxQG1T`lG41(kpA`mSh$8WSyoejaGT=5s!tz9!sgD+#Vf)w>!h7JU`=uVqX=MttOgz_;f>px>qtk|F6Km=VW>q^W55Z!wr^Hs z`9DTsfHI*vFv!>T3ka3SVJ7Jq0f>bVx8d%%2s{_8|0ESK5gkb8M~N_fP2Zl|D|*yQ zB8WzMzNmTLr}9UdF*kN^3ICSn6xR7(2Je0Pa{5GrDDxyP@g*q8xDV_3VdR4fEpcGP z?h?KNLO>PP`;6=foP<7QgsJ^e&erIkqaPV?^+!9Lu}p0B1K#=kvqdD632JZ34sgLX z<-7QT-t3}}`wsQ<9SYr3dJ2ws;+Jy1h0DW8JwZ4swT75UmyR^_aJsdPvX9+f@jw^U z%iLOxyl9Fn_!i6F>PsIJjAvsTwBq@$C+67i3)mlx%iR!WuLhl$Kv*jP2ChRet<;?k z?L2x`B7QyI%<3yE?nA)7e|O0hOt68u#iYT_tRrXm)7*7Rr~p*iYHnf;|H)!>X**b| zX)HE^Zwl{1lY+KYDSUny?0YzGIan*nfImEs3XsQ9w)fG&`&Ox&PY=Mxt1hKNh2i`z z7r9N?ifQNDa>1K@aL0hw$CWaHk2N}6f7|zf9kPEmGwz4a<}BMzE3xZeiIm6uq1JP1 zH1fagh2iG~MkDkR+)u2qns|QN7E@vFNBYXS{s|5kg0L7?-PmV^o@zML%Z{dwvKsq+ z8w{F0r$a&BY8MF0g-l;!IU9pnu;DBb#n<&QQwF90Kex zlVfzC%ukgiP1wbJlrz>^3qbGz;&Rq-X`yi|78Q|s{BkdOBF-Rqjg}_K)k!89t5Ixo zr?*%QE;QcNf3sN}6aHN>KN!PWgNRi#M%v4HHe*>iW4t4NN`@eqao!{d$v=;zmXbG}cUkElG$Tw3P{R2Pg3Z_?w ziR|UT`2chDmD-je>XUSC!fCm=VS&w-Lx(-wz$f-~XaB&pyjk@HJH%p#geDGtJ|e+y zFSi1c%sjMqPcV8!D{>LYQ}GS0$br_t-Gq?7t#F%#$Q5i%egEPBFD%N=>M0QsIP@@< z1Rko}n=p7B2|iDOA;@v?PVux)*O`^KX6oGVpGB zl+TGiFEHlseJlBj{q2$h1ZsLud@0QWqH=vBKN&sM+8jk)L&;+vg z4e7aSy(QliR8>>u0s_>D4@XI)n9TVWP=AZ^KP}q!$IM|zpQS)r9X^O(<%=&n+U*RC zFZ2Fgb;UN$Bq0`tp^DUogt1@9MThZL?xV@E9&e8SvmjH(@s-yNL~5#@!p)OHoYNIu z#%hF|54bweHfbk4F@i6Ui*2ZNKRn%`=gwWWhD_UT%wUd37oZuQd?G-Nl!3FXWLP0b zDrO)?7eTfBQ^vlyTuc~~6Y9*43B-wBUL+cjwRzBRFSh6|qt+9RDL#FuOL z>}-y!ZzL3Wq`36Z-c9l+pS}%7T&)?2o8^l)G4;2<-W!~~4izLEROFv8I8}_%2_HES zhnML&3AW++01E1&4&?_pY#3f4mUMoxCORt5^txq)c?N=C`uy&hL9AY{hWQ_Oe`bBiXVE(E{BsXQtPNk2{3}@ol&%i-g0#m+`RYzbvgjIpR3k*!{7ue8@!VAtS3X%;TU6T zoZtt&!_`#;wX~SN&ARZSl#7!CQD5B-yjRIUEH{IcR5x`3E=e-YN`>hzhz>1|a3yoicR*t@#_Pdnw;9#qf~ulGdPYM_vj{U@ z5c<|fL2#CK8WBbi@0dzYBFD~H#Vs2>$If0Y`>RoExJYu|a`B)3kw1%p=mae_;Bp~O4eS|w-7=}>We8TtGwx2j5vB}T-QH*A z#>d(Yr8|1N+4gib<9slT^35gwMUYQHFeJ)cr*3N3*OVql^ySjZzf?vgD|8|UW&5LSCD)IOg4qZoplhJ@&qh}rPv|hC=`C2e9G(DZh|KrgaJ&FFbyS2M3Mo2(e1bW|nFR;bm4=_>mIc2tcyi>lyqi_<46Jufp z$KRE)9c!fsV7PGiY>aU_EqM7v9v`i+Y8FNkiJXe#^X1ZYvdlFi#OySTw09@6A66_h z2XCj8vpvPEM`OI{?b+KY_N|;w!P-H}76kVJ!*fTn+V?K`31N7xC{DcQo}JzPk2TpW z`pPHuqbXGFuiFkyvK+6&Gv?i(Nbm{4FJ0?q<{f^~i9IB!>90@%c z!rTuhMo0VH*5R+8cF5>p_9^=1JR?Zh-V= z+J#3@i)O4J2oCu|2x=Tn1!M^I3aE;IbedZb0W91aI4`Emf9Y7d(tNuLwFUi~<K?0v%Epyh8 z71rK)iJd$nIy(m1^~)X_L82)!4X9!`uT-(FP*7a5pvJ!%8^t3_c=ipO1DK|+|DK{_ zh6*m**|1HJ-*>+t`>Wie5r5elW+5>Msjl!yH_Y=o&F>LnS3ubfWT(c#ZN!u4Dsmq3 zL3uKDzF*bkT!I^cFS;}B_n~Dk271AzH-}DJ|7M58dCfxIn-WwiQl4}Li53dgAjwXa zft|lYl(TpvzrZr|xKH{Wo4Ao(>@3IM9ry@hY~EK;gg2x~%Tw(U4GOMnmroM(@zJ03 zWe>_~BuY+m34CfJB9Vy_9Cm~w;ZXfOC;5O`Nbf$bBxvi3ZCdyDtAtT{rl%KN=o$H@UB8_(uv&wo8D|2x{9fwmy zX^%-Rw;2U;%2?DuFatb8IJB4ujbtP;oH-#r-wPp{OmN!$WZ0?8&@PbuLu@KREc*+V zo*fT&Sk1Fv2?teQs~F-~NpbIfOZKWca^nZdP%2kK{c)pjJ%NZJM>?~52Z_U=s$Wxb z8QNCPf@pqk)u18%WgN={!q07=lNp&9Ls$zF8jJ!W%wJ=4ngvnaRwnE?g%VGPrhT+wf3u4vJ;fl$YzM$(-Bto8aMbqQ<{!mFDG9t8BZ&R@J)H0&^+%1_H zFQd9J{Oi3U3hQu+Sc9*?Xm=eVR@l{X~#r%~HtJnGPQ{R9&r) ziHM7@RrmOuh?367vI!7Hj{Q987x)U4=Tn|C9@vh6P1h?Qyd*=3*U}^rFWoc z;69^I|5Et&??AtcSN#`N&Nl&~%(f4qCc~lfW#Cq9%%K1H|8YkHs|akdf>}dX#mh1Q z?+M3!=OP?EUhJ;f_4} zLNP^#`_-mpZjynGne!U+9-Cys;MKu1ZeOR}zAMPY(l-edo9bE2T-Bu4Y$0L>DM;rtLUAKuYwRhkj~}EvogOWO?pN8_ z(TgM&R**UYpG<*uMhj=YUH35>f{B~V%*9lZQ2%1$Y4;EOIN(PP)~o(SbY8p7&|(q= zK~^r<99DNCT_n)1ut}e){`iqN{xtg{E4L1E8V|@#Cw#*~WtxYB7r;h6*u#aLXRE(R zb)(Zojdsv%QG@qR{25Wv-D#wRj?TPN$0r$Lc`sk0KWA$mjP6dx=JP`GV4V!c#)2Yk|?$OfrIvM@L|k+J;Rrwe!TVI-r}cc+SwZ zS2zL`2(|##h6EqSiV5F(B;p|9gF;cs#J20&eu&;ddOK^=n*-B|LUm5p^S8wSb&3x@ z1&{@bSpj{)X=8qc&^6aTxE^+k0xtrSCYOC7(m`dpQaXirVd2DT#aESahYcH(r0 zr!n2^ZeY!jGaD(L2Y$5&(GNv^l)Ta<@wwuRg>>D(vYV@MOEEjiG|p9G2KkFCcsuQ- z!h~TvJE++v4P+wudgbwBKK?>(abDi?u?sNknf-1y)Ptwj3UzQZ`Vc}8f*4{A?1y4i zG0Xfx3YX=Q5p}7;U~{12&U6G*Rm&-_{B5;AdtP!uu#wW$;EC99?AC{~GiK{`^wdw-hYE5`Z5of#l31KwsDa zf?xG9n|95!4SPS)PyMylcT==e3?!TF!AOdA)UP@! zIOS^p%cKCeDs8`<*F>cC)8$wD9U?A$o>xcx<_FeqE~5bg3MHwQiX7*t?Zl=4Ga904oqmKfXn^NB zrLLV1eQ6eFeM?_w2#2k;4H@^Af#f>RM{hND@&W5iAAhu+7L)2~MVV!U^fWW@;00!9 z1EL4vu;PPf&w_ecX~;qeip&tHU;EL)%Ah9AAV9KJu6zJZf#Ts>o%o=i*Cy`%HCrd4 zniNbX*3=C8I_4V2`idi%_ey;K!pBR1<(XR1w&p$`y-x+KtA#qltOB$4ahWwh$t@+I zzuVb|vmMDjvYs8=bxYBz@4vu}J0kM*RE&!?dDaqu zIS?$-FP2mU+T(#X+3#nu#hJRfe8;#GtNSL7kUsx~HXz%-(s~Ytf9ehnk`Lzcj)odD zNqr3BVLuz3Z~_d5;tL-MIj_}A60S0Ezv!)!K^KfL*6+KKWBea^xZq9ysr~iG;odHn zk0uZA8;5yq8A3oG#}!#ho@69`?7_zp;uJ2mel)}scC{m9SCpj-|Id3I)Ft^e0+ej+mWQ9U2M~ybHZ;6Dd;@1Q4f@pP}shA&g)3x$wRiyjOxx z`nEwdv?AK#8Ny~2)zp;1oFof&d#Z-~3dLjjP-F81f!M^J$`7M^0C^bAzAO=U!I1-u z8toxE^kmxsxs7vVICVtNPu;>l?_ay({af=WA(!YIz7!$Vlh1TeE#^=?4v)v(9?$N7 z-4x;f+*z#>t-{F{J3Q#v{{$DS{@Mvb#}iv-F(ij#rye%?m@U|cx0pN!`wp;#QIRE^ zCc%xx@8ibVq3VJ|a1!ijSfi|0D6&!M>QnsTbdK{jdRt}up!I4Vke&D;eXWjx!K zaX2*!4Qx<4Z^5sqkI@GIPGv#Wt4^`??C($erJzL2uls`O8@{mS%orcDRaPXFF|C-i zgLLW;8Uv$kG8HwM{GQkRgZ*DhhKx_`Miv24!@Gmw;RUO}ia2xk^&*m=DtUd-$3=zn zn_f&em{2NynCWYPoH)@c2kOGAGY1zIK?2%k39@*m1UB|R%N}M>Q~1Y9T4S3mtg9*0 zp-&EFOwduC1`k8o1&ukVsYW|R&rYaTPnCW&D#qJ(4=Ia&eQ9vC;+$qF}b;n~j@fCt_&6 zT8qX206nBe-mrzFdQ}gO{M+A*1qztrVsp(OB5(t^B635*pS@8*HtU#~URa|ATLgd> z*U3ONUk+BBfmT2yphRpQ7XLb3t%{G_xp}USMUxdG9o@Gx$<=Ku^!U9dcG|-0u(u*<*=d*$z4UWCg%KeMYH+@zmaCNHLT>aQook%_(3=+t| zrpN>PVTVG@frTEcZxpO}2_fNsclG_xe(@-F?X0!DK4v!MA)aM22?nM)>$c^E=-Z+N zACrD6{Y);$oFAER-VoI6;5bccCLRjASz|6`DK-+a+w3*{`=jf++?fxb-@u1xU5o2Xyiwf7Wp}CzeOwb4V zKOnzu_nZ_p1n`p$^+JVQ=muGPRXAK`k=m9tmmT;GTPW;M`=eE|sq*<~RWYl4bF-dI z`qr>@KsurZqR!ZjLR9aIiFN&b*XCzWu28Q=tBwMLtJWr`E3}KJ=&c1(VOx9r)xw>2 zAL{#Uj;CEb8O*>U%%T}j3p~qDee|qPs$5~JT$z+vaqo@}JNQ}w}#!+bO$x{KndI?)D3jBPaVYLD5=;BpG zt;-!fCzt22f36*LKpM5HD=AECJP30sm+@~Zx>T7dyl<0RykUVE;m>yhlA{V_jPq!9 z!<|EgcsVGm9;H>u_&TELVW93i?tqq>&q;E+-l6AZ9?mgQ*zK4DeV7W%RWxqCH;=Zw z_IU85tv&4Fqs&;uO=71Q)TiMqbH~GB?`#0B4&G?d;$O9Mz5OW&0AdX7Vk1(4-(|mny3nGvtp#Ch{j}4nkDWb6{+;P| z4!ZL#^i@{4Xi*@7n3psA{cU0Nebkx=K0G_FF`XF*cgM@S-Oj{%Aw9g@@bWfDY9X7I zCV_K15t%_%A%-tX7S%jSSo?WJX53dHKvl@vRWQUE{XOqWNR2NJdn4|0tnB>vF&!{F z=qd>@RnA5tt@*7$Afj`>DXO0(S&#`UmLE;Y-2NR8AJ{_AA*&epgIqq^{ZW^XytnmT zs$~qsTLAHPum#a^gpfN)Wu4i-&_cswK`2YnEi>{|LnUp#DgX!9`wDOPfoPfW4nB~Z zv{jox9p_!Fv|MU@E_HOuLGI+C{c^<>qbqs6tIc9JRWMbK7KWizgf!IZB||rL4TKF$ z(F}<1G~*L*5%mDw=h6G%Ok+PFdO!bh6BKpq9E?y~h9Not+lm`~<2c?3;u#|!7<+*L z7Hkhb{zQI<;~>7w<=zX=mDSsjN5jja`wSQP+jHw;K&+KJle(NJ#3Hck7!}GsI3)o! zHNwnINNJRsIP1Wth4GMxCokF4j3?n>a(P)WB8M%uH-R-7{X#36-OSH;fvX{1+0YGX z(UKSt3+cYJjc%39BpQy3uh?uo=tT$GyW<5_CjOzPOf*FvsquxQHJiDY>+><+cEeM8 zJLc0tYTqv8rsU!>NM9e6Dmn%aw^LKpBgRtDlJUfj<$Il(G5~|`9=tofd7oc~+1Xj%Wx5lkg@+kVjLpH$igT!0mx$=i zLT~QEUtZp?uOLV!7d70kEldka{HB3h%k8;y$+#cZyhS z@gDKXO^g*8B3SDyEdKO4h>kBs0 z*#2(VcCm6k>|czaOyV7rYpb^-!pSTLW=ab_B2k-h@R4SO^=o9`alw&a4Rz)$)z)xk z;WeY4b*Is(vv7@g0rU(60lt@roDF^%>2miWHZY9)iP)HW!{zAx!MWGl&OeMpuFls8 z;M9ZHL{B^qelIlO2@0cY87>2V&wc%tFWV|Y%#P7{^D7vidB2|v^_^Bcje|P;Wdt0o zskNF{+7^PMsrlqj+j(Dme%3M{tDob=&InbX2Q-0KR;6=3_{rLtsr0!8}WTE zlih)0iug!=W(w2wdN&h6=3l;Jie+u-`lgbMqs+;$&)jv8tHg%SXcei3o)9Ew-;wqk^hUH{67jm7pN_{UDmEtdL=dpaAiL0(K@Yn^GCgbNn`KqooUl%`rD{JLc zUNFZ=pdp-i8z;ktEoOLErv1b^VF+|zMJo*#2-Z&f`6EaVr0(4GxG{cx(^7Q8Na$i= zKiN{imXVY>q+TluT}j=@)oJX-9GiEaTv4LDS`Dx9DTMBfrpnk72_;48}0AUDp}z^p-IU1N&x#e-|!*vu(Lyz1?e)NU#sBZ}4Nt z39FV*vwymju9=`%wX{J30yx8CNGZ`i^a`GU@WX9XtbglLN}N|<1et=rBA;caD3g@! z8tt!0Zzr-5Y>TGJWTyixEYE!I`o4#|dK!FmV|rM)IYmdfRdz*n@_jc%E=QHRq*Ynj zWkB$3JDFxb#3lH$G2b}cS-mTE`@Re2Rg}X0>QC163BweA076Iz^}Pw=Vf-%A9K(4% z0^HPVbbHs~+105zb{PdTXdEr0nIJIBAd$=LQoh{Og%8c!H8QWHL;6Cgak zFZ`p<;M@YcOz8d3$zyUTF&w)$iRzY&rLj4fG-xm;dCeAt5mH~*`_*$Z_x$WUZ$J9I zuI>#N4Mdu;j1zmWbY;+Rm5Dq|BUh(4IRA5Lq*JVmUN!1sZAvGK94-iNarUm#`~4r0 zVHh;L>T)C&dSGh4B?3TuH9!3m(ri3OZ*_SZ`+24nVp zY}b0^fzH0oizH;#>3rP`1AX<#*@*+cr?VanOdudxQ5uhV*DMYZqJxwY+_>LNePMhF zqA&e0`s<+Odr+QOVrGJ$6FdrJu-pl&R9C>Y3Tv(Tcbbc1+F|J_3p<@hi~|r}{R1;7 zhLY3lRA)uFMa>|M0n~OGk3ooK>f05Y0^U=!G(|sHsrmX$v!;Xb^;jIzrZt@J*NvA} zJnu}WomN~ylYqeANiLYdM=Z>ahg9sMBT5tw+SL`RR!`^M{B9pOF7(-JxyxOa0W}k+ zXievw;Bj@JDxSS3fbUOrJ^MfpR)V=s4KkHC!YNEI~4O+=U&=|5( zbwBiv3K)E79J2qjJ8{~D`-1`aK&uwG2K<1gcrA{2|2e>+a(LIzF|Y`(!!Wu>K`DS# z2CI0YsQ&xlnnW6+xh|jc3^4QOYW#L%DnfXi@&F4X)H#yyyFRN;3+7=Iv`01#M&?on^EsEQ;;pDnQ=y z9%K684X?CXycIv;2LXLADGaU1_C7fM_3A>xt}jNEJkNPmXIhe$Oc$RTbqY5!Bb+eT zUb4be$DA2>qa?>f8wQ@q4>vHPGm>w~%Ine_VKt-EW4XsXB}OV1)Dg`@sArwXc|!iH zFPzxxWp^`6YVv1#o;1_Iv3M8siU9d|&cZRAEIln%7l@7JF`FGmSYS*Zl6)X->i<`# z|K_;XYRZMdL({IPkw614{hvAj)(HN!xn2ifU2~qV*!6gzEnk`{d-vvMfB5Xs`)nz{k&=DgD}k=G5IOkV+dC~t`(u71 z#D{L8A{d9ckg{*Pc0Lqb^l88DPj1a#njPQTw;k;KJ^v*FcNS!yC8>RMeC@SccupJ! z7b{R!3atv*)dN4MqtL=3;d7p=wy5Gwyy)`T0EmCcR{!M@ZcV{@_8-C7GTUMla??<0Mi2zI2#NYoa1&|4Rmf;IGg(l`Jj7d0AH@@u*dk zwm+-;_l7mtBcOjL`J$WH6!(bZl&d2Sa)l%Kw5U~ zAb`h<{LL5hRm2~rWL*%c`{n5kaT$(N(8k) zw3O4sCf=|s)_4PP^UlUka)^Xj_uL!Z-hK~sMz%EJ#=?oK`=D&hY^E%tKo=%jJW){e zp3jveB9RBMWZ6&Ok&A)9B1oQosVz$2Hc+w71GPZK{U1h%FNgPsE7*Q_3tj5u2~0N< z+T26z=x-kH{EvWN?|t`b-jJUWSdyE2nxool=`pr1j-xj}efJzRQsS@S7d8v!OCV(u zAZ6N&miK8*JbfBJ`5Rqbd4!>4QG-B`fE4IZK)jVOvrdI``tt#(`?tqkPo~kbI1EGB zs`HVy5nhCa3$U~Kl6>Hw;Qw7S6ftSCQwM~ejSkxLw~f_orO$L}47ka?STPH1*7t(-HmD3-$m04$Xym84ewK3Nc6)m<{!3XG zR39}5kc?Z*1?^RQp=f=!hc@u(Y~I4Iw*J$ya{t>P@zNNd#vk_)&R&s%q0#72nEt!u znB}TYDFvmVtC3pfe&+=0mOyGE&KmR`{M!BMe7ex$N_` za%#fjf!-JiII;CD{tZ>jpw?mi&eQQ9V6}d)@A|v|=}|C41Hwi%B$2}e(hyHl7Cm%- z?)Go<{JhM%Rt)nv3XBTF(1Uj~GLiTr$umO?W7eg)sZxyyF$V_0IIDY9;N%?hh-c`y zjx?xf^5x)PO;50Q+?4%}(>-58{}HNbHf(|aVPyq#`Yjistt!DJca4xk zf({*ks114UvkX+x+n_*gr7$P;kmeQ9Al7{peI>BzW7&+>u+!aOS1UNl&sQL7Y>Kq| zag?1M`iQYW3yDN-uPi+CMp~}qj-Ws+dhX4aiq~Kv zn2(xPv1Cv@i1wmui;1nGOTXkzFvfvphj^7_qH}V@NWr4yru^vQc&w*eWzXQ$mhYRJFAMzD=qgT1Qt~TG!F_gc)dM3Jd za1|dIc%piI`DDzyohS2;VIg-@^hb-dF3NsCH}fa<21E4`^si=|UxSV)v1QJN*P&JX zIm0p+AC=cF+yt-*5=fxu+grw+97xIjmyY%{loJ8SBO{+yBs1WWJib~G-*DM#Ib$`n zGu{*QVw;hfuSFu8dMiM=Sk$b#&sjtgl-!V0{{l*`I`Fz2gm}}HI8wap9Z6GuGViL2 zke^&ee)v%}0H?-XUfu!!9zgaN7)nSWwsF4Rej)%wiXpDK9aJ$SeN|YI5vAMgPqbse zO!MrfI<*M|KF1!WJ!wpyM zy$g!S+lo|)HhkYMTI&9eS57dbIIyII)aNA{REsJee=;w6F+e!c=4RB0+Rmzz7dQ3m zcm})KPy)gC_E<0JHZip~YvVDYh;99cg%+;$WQ-nDCwlpFbRG`&v^&?0$!Rc2o^@)| zz@!c+7o~3f)|X(?n>8_AF7zkqjJ&q!Xj0A0hR_RRHFv_v{xKIHaEvCr1syV)O%in; zDTtP#3z++=GxIk=OZpNtrD6*G0Hf?_Ee7p4s+nEMI;SxwrA?nfVIM5%iCS==J&lmr z@c+h(6z!cm=d{Xld~wvq>a|sJAH0)$Nh^B#6>G$(@U1wS8>Kg0zm5%&{6aT|V3_3D zm>~Gf8|Vl7eegJ?)}!UM3P;Nj zr&S$Y+vrjada4uolUO9{QSA)r+>QhJ)~%Hyl&x0!|t zZ2Wt^%Y6*p+$^i6gxgIc0yi3x0g%`w%ef|@v`kDSLn$IPrMmyMAzq@ssGIhF#b+!P zzIr6VM!dmk|3!6rjBW(%Cr_;8J}>X-xjvN0v>0r8AX@vB(4glmn|!|$JL);|(v#9& zapK{H<4{bc9Z-H2`Y0n}yr+bNTC6M`3z`dB734yj`6wBrQmYtk>h}SD=iLEB zZ(+8V>0(r4h&6wiaJ$A^r8^(!x;{O1jFjC0ODFNotmVDgQX>D(THZ?4Ln0Jd09Mn| z!d3YMkvor>U+v+7!g!0%-)@=G#3?^{o4T=0^jj7_Xp{^>bVQ>-&ikejhaQ-ENYCjs}tPOUc!t4#|sHu7rUYV-(aKgP0F($4QtM3Q`4485-JZat9* z=cn0V4nVyyKu~u+hcm{$$wnDsDi-Ki&vzqgwkEnuSzzo_4o?xm>VNM^}yU1vQ#pZ8C?QDbK)5^*bP2{PC0E4 z%_~Rm#W`PL1}T3ilzp0v6(gWQaFZ?WkrGp>`aLEgZaWz4z(MC-k)A51rGlv^R=1$M z-J|laod{1O{_R>ht7dN`#>?C{ZlnOlvJ2HBkRne?%CrqV;Ga0WuiHb`nzZPNX@i5Gb-M1L4{1fvkB zNDmCzC*Nqlw|E&1T7tuTxJOah+@kavPg-X=;O`v~Z3OW@GpEna){7`hf7>VwZd{z%%?H_`T}q zO6(keClX`m$80#Jv{E9;X9SGh?r-oomJq`kvD$GHZvDPj$iVB*indLOp)OEvIqrPeA7Qz26 zxwYY0WST&*?qsK>$eQb!Ks?NaY9`g6W93-8qd4l<3w9;HmnP`EfM~ZsD)7WijhtzK zx3*+;1=_dOepneMR*;taK>`&>_&vEsxqBzv7K@KExlOI7FyC<$a{f~&4HYx*y~AgO za^*4C$4Rlp66xC~)ujNr(7?gjMw~b)eNuG_6j?0Tp6k$rhS>Q zG;r%_s&F$zpFSEQ}PT6Ys_6_AXWFvD8g;h8JyV7b@Xs6?E0UebB*3VrXCETNnm ztvpaEdy>1&wSjC6hxUsPnATTfm*bYvk|+7>&kgE;H8uk4Lg0cw&|mUhJrVu*XMHqO zUg2e4o1aV3CQuVmxF$JsBw0;BKldGBJW3kqflUCyJSp~|&8P08q5v5)-_$XLStZI zffwtV9n0yeM83aZq!{^0t?SxU`{GzPJ< zklpTQ9Kr9*Vy+WE6t(dw*A8SN#?@+dbJ$tVLw@^~(RS|Xv3WiJD-n(H!|85y_VmOC zQj=p4;ZDW*;hm0Fl_yBCj5 z$ay1@h#g`1oYQ^i{H6YJFqsIA0$I@^cr-8huayMGjO_MkeXi)YJc7SxQZp!kss`AS z$(|63&RA#6!j8i}B|R@QKY93-=yUwB-i>7B@qmQi*3Vm&ZSegG-XaKpnEf6`7Y-_q zw(uza7;9z6&K|3z5uhMzPO3Ay(4fH1*GvS*kb>IlA7x5mtFCzPuM_3i`!7Y{`Til^ zd%6bgD+Wk$Q<}X2<_DBFWm^eGFH0DlYsmsjW3zxPxJQYGq)b)U^!?@(at6IdA8AcU zXH>XxD6Q``_qt>mb|cofQP%nFel(o>V&eoN{PWcnJw~r$z$iUWrc(mo8Y$iEPGRY+ zvmf_<1OIWSjHE4S44%&32ot4FPE1L_W|&$MvhO59e32wt5g>aC9?CD)4wsBhldn73 z&z}?#tY=%qPhZjHZNbr$XAM;v#Kt~e6%aDaz&922C-dPA&Al@Z*_l0-ot3}C~yawSj@-JO7E=Wv#i7`j6M9}zc(dc@bN>ldD( zm+R&|zJ4?^6`T7G7Nn-0bzUaeyNd9JRqn)Isl}AqaXb~dA7R6^{T7dgbZHX4A1wKaQ(gKujnby@#a+LDit9-EV0T^CRo3O^x?6co~DZ=1wCJVTW^8_6_C z4*!8I77qs>sLI5oG{Y(BwziJW9hONVHL2(@1LvD(I#jgXl+kg(1aJ$sp8yOy0h%SK zW}Y71x6t7^!^7TuWcW-iRrr)Tv6~A$zJKv<$rnYKTVS@igC~}NB}q|Ri6c-zKp*X# z>YwVwrFfDnbo^tJ!9q<=5z=7heoazF%nZVq%~idB()i}smU{DbO$VP+T|M{b11?^C zO`5&)c!KqNxqKWuNwNiwx$DmoJa^zWgB%x>+xk!8c>V@aSpP9Pb}7fDa}HGKDqC%6 zuHRP^k&^&`1l>s4fH6EYG2WkIhaDlnu(r+_RHd(k_~mysFj7iUH#9Jc`;csh$th4tksoe~O0t#WCsCVj~}$KoN} zTt83B5#ka8x`@mt1;p|bhI>+B3^j-h*Gcmfm}_yYr)t%&aq!u{)DAU#tKBA`LCm@D z!IGd#Od#BEk8$Ntugh$$DF@?gUw&c;?WB;%Nx=G5u~=fK|7R|!SatS=jyk*xscwcZ zu_c*!i{9^w3y#4!o;GGu)cEqSg6?%?>(m4F_Z+OdGt`tY_@LiAu#DW-9;V&Tmc~6t zzGiTDq*6T}VW95$Be4$GaH5lnKBhngX7WGU!y13Aa!BCzQM<{H?NYOU9y7jwA$Scm%hJ8gm5wcK3>wIDVNz}Xa zn)jua|4OX7s!8Y`(OdBQgk1&K;b4jstzB)L<`g0GEmB08qZoH-&sTx33}-0NVjH!5 z@QC}KenZ}VperRoB;bz%n)SEK9(9{XL1wPFC%FbS|BT}}AX≫i(tZrv=|oMlzb{ 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 literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/Contents.json b/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/Contents.json new file mode 100644 index 0000000..9f2a183 --- /dev/null +++ b/Example/RHViewStateKit/Images.xcassets/ic-empty-data.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "011-surprise 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "011-surprise 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "011-surprise 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1.png b/Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f6d53ee980dfa210a036a7ae0a5578e3b55615 GIT binary patch literal 16671 zcmV)zK#{+RP)08zeXcBZR6%O z;4E$JCPrX4Nt4zVPG93JHiHw}I0j1?gICaqRR|=Fq*?CFoqNywzB7wv-!xi4_y7Bi zW_0J=W$r!y^Z%B!0GKdg!h{JE<$!^SOA5TL4LqvqlyrR)m!wv17^9$RJ6n2tJz%2Z zFbQ&rps%&nAz3WAjJ=C<29G{bPk|EE^Wj)YKH&d1f~IB;Mkk93>(Y)m^gmBrQyJV-6eY?R#R+t2t4X{|+ z@UOE9D|s>Gph}H&*g7d<#E*nTL;u4ACbGgL$SeS43i);3>`zUwj%wGih%PGG|lcoa=5`nK}>72Wg-)3 zUTv_kX-h}#Lvq|~<~)jrsUR~54DGhcXkN)M#URx%{f)9Kk5T|av zbzfcP=)mbkEK!IiSf`l}$%JWQ%^>8=-nG+@XilXaTgqogl2pb-6sCza4Tz5?HyCR~ zyUHCOJ3cE2GJzH%3BIoc6A73m))YhZvx@f8btY~0;Ei|HFxI88S@j6auJ36uO{}Sg z#o~fYrEp?J>|(Qv90ae)9-m|(8RpHO{V;uyDF)^t`fF&Sg_v4k zcoiaO$f)?5h4w8+()NLg1WbZVF={2L%K~t3{C`pnYZ76m0ABPY++33SMYnj)S7W5A z6^aW8xYNhB&vlqi`ZNH;r(G7^`QZ93s4z$8coK&s(>_D3B@55BPN#2ZHw+uw8dhv7Y&emA3hIZC43c{^C|`)Dq6 zs%W6u)n%Gp#ls}XB(be+X>0T1E1tYKaMqdroxQpmwsw348s{&_*pFWr2K8_L8TiGK zoW~|I$amg`it!$hnwy|fAT{B-ai3+`8aJ583zHyaVq2TTAxZTe7$V)4uiUTy=KJ6S zAOCdL?|2{x+Md0jzkWQrfpQ}?H6Xw1YLHu&gS>wAq!l9%FjFaYS{C2f2_|yFBuE+9 z*0#tgGv!IFVXfJ|UwQ5IaKoBgVBH<>&hSBULRNq&_F|_CEemSEpME_iNeaLuNQoem zN@9|jLpQ#SDjkvHU2E2fSJ9-1K@dZ+z*K-p@!HET!l7S01C0xs;iG@BJxeLJ!?NV2 z`@uv8%&sOSfRqEtK}!=jhy?FivliCgu>qDWTTwD81egTOS{0o>x`H55y!_nH;n=|g zaN_kNVq4?d~k&)=bfEX;ERzD+xKWYjdbQem1{MS^l19K!p=kfO;#l7U&OChcz!DUKaF z07p?NMlPPuT4v?-Hwxv*PmTn*4#xfVC2PzXP+~9%QUrqMdYrNvL~f^Skh~C%&8WdouZc^TVHjU;ph*P$EWXNong9Ys}@@z$8df(E4BM;kuTHSTV(x z_>MN22{U4*ji_J*$G`{-;pZ%*Az!0Hu6&LI{h^(IwH2;JV*L7V-#y`H&}7&( z3u1(>D)Eqd?E256%N5!<*R$;=LDGQ4aN^r8sKDd}WPU|Xzk)h#O_()P364r2RXIRv zYROQFvW^!T?P0ctjf}B5YigMUNdl5%E55lPDG68!=ogQpnw%G=&QyRKXeMa^kmg?v za&0qI7&JzmNaBGx2$LW&AUVjKa={dVOs>e_>rt~us@#0MTnh=GM_INu8akdDP;7e( zl4QdDL;xP8~ueLC4u*gUN!2e3-b1fMxkDQ%R1*>0l0$WX=<0y2ufS zK6(c9b4P(yH%zKhPcu0Zr-i7w<%T(eIZcpQq-q~bGxWhXK_58@tY%(W&buIo>H~T4 zyFhMO3eyZ4z;g3k@k!?FeCLk-IEMA44yAB4bK`G$=;pideUkNjawwU@}_L!3diRC)lVFn>p zqj^=0jd3U-@)yN`hl7Gtq#o1gcVq*Z=3jz2fVrw5Z7>Vg=7^g}yhs&^mz!brh+|Hu z$Xq4JR+t5lD5)nYqAye-UnH&`q&hRK9&wP0l-yPLQp21hNX)!yh1mcahi6pz)$EE+TyzWMr zb{M7g1h~{N=S(af(SRvaKX@q_Hz6VZ`kRlz&z}6AsKlG^{ey|?DPfirPAeQzdB&i& z-hpP?Uf8?mVepNO3cqG1U_?~7oH6G*D;lbAAG6i8!7PCh9EC{#OX4%DYKYF2l?EOd zjfQy@D_B~79Zjv-)2>AV-cCzRqYExm%sCUwh=lrK7JiH|66BbMl%Z)AhY|8e$Dq#wa7_h`YqLs`D~-7q#nLQpQ86nqh3F(&x17n3NZgcn*JpFK8#cb-^Z5#1U7&%|5G5%e;>>Qh}>xA zamM6sxXdvp$E0iH7upz;_R;h^Qq{C~%@D*eg69EF?Etv&C@}8NU09<2S~+-Za{^r9 z0%*P$rVXfidT@;1`;^+Im2jD3PG-_Abqm~B<=o`#8eu<7Cpae7xTh1?;WfYpzmc09 zq!=i0Qa+Ijc>s>L1H6Luba)yXb5y<m8ziF71yIWnb$IaTV@AvIan0aF5D7Wza_1fbd9HR)#7*m&7bNjhiyVo~%3Tfv9u zv+xIE1Cpi+eE1pQhi)lM4omb^R?~Ib1#omD=1VGEZ%H|5*7qnmF#IQV&INK1=KREQ zx^K7#({*Bu2qo$ynm@Oajyoj-&+Y>L=4T2PW!6MAcXFs+1MseAF$6RDDTXPWOSzZ$ zkYH?7I?+UR!5qPyCrEH)#A&e@GwV9_So-$>3qKztx*VNZKE99-k(pcyx^|Hn*Ru}V z!r!HkOQh|(i$`=%AV$*oqn(|IUt(j$cLAnUIw1mCpqL>_kwil3nlFm z?E-^QtH5CQTqXy>RFFI%vr7)1>0$PIhgbx&07NIkz}q0b(N?f*A;06fCsxA#C!&e! zyZ_)Qtp1I2P(IMqTDcc^?H##`5Glya(r7`_pcv|?Fk>ZKyv74_7$!jqAoR|2o0%j% zDI9fL;g;<9q{VMUrJ@%NJ;h2UUHCFE-_!XITEMjW$>Z0+ubxgdiGJ(%--26zyZlKR zc=hd|FGd$DIp~n^pR~+zCLB5~OIN#Kj>9BK5eW4?|0LslbD?s~_uoj6zk`D1a;S$I zP~fSDZ-6%sWuHCq-S?b;4frY#4D?0+3fz865hbBdS+e@F?`KsEOdq5OSRuRxqdlHN z<)o1!md#+<$>F_F1&@7sZBB9!lFhEt!9nsqTui|cnHd|wgn&tqBEVYi^kM`zZw`Re z10n-Z@L0LX@waPX;AG)xMJGcNrXIxC%lV3Mi~w(+>wZTvOo9}Ns;hs)jecuquJ6lL zkAeO=K@RW5;^VzUlBXVi7nBYTERbi#IRhS27O$RjE7|6Q>4TJr@QGhi4Qor;80-Og zpl~QP-S>F&U^6`R$PL2xCP6C@0WC^$wd0;Lf23hh_gk-6b6L+!G8vdY$Rwa1-@nar`eQo^ zMz63L3hViE90V)cU@NN^fWuM)i>wV`m81RNeUUJ}R5%?PhQZJ%`1I`adO7B+@TtE# z1dauT27j@rAHwR)WMBc91Sx<%SE~a(4<{P$_~H%;Bz$KMG?^Og_2bT_8w>X<86B;H z|M>b%Im5WMvJGymTL#Oj=An;M*q=BN7=$C^r?L{ISdwUb)4nr5JAYq`>wpJL{M|piLsjtjSJ%SmQ1&qHbv29Orutk_N5J~R->@m1@-C)-J{AZhB_-H;~h+`0f_0r^U27ucNe7_7fkhqmEpopBy z4RZl=iXeTib!`%`&E*mz9geF{K+VFTtlz!W(+ofA%AVsOa=d5$yP!tSB#vZPfh|4_ zwO0&5(BcJItph%=1bk=agA%IEdM;9t7rpOf{VrEe;KBq+2NH%!Ziz#;#>3B{+3Bg_ zHJ3eEE_;GZkb>Wv&s-`8b<58{{qnOJ+kf@UGWgl|vxjk$$w6eWE*SvZQdFUZr=j8M zGoa*|EW}Xl5IVCE)Dun!om~XsvkM_I68%ZJl!TD2lVh@pRVLhcU%QAbR**emUdJy- zGwiY?2$@d`v)qfOGxfl2gDFCF^F?U9CUy4zU;Jn#Joi-gmU%(52Jc;G7wS;8(u408 zVX`2C5NXEVSq2B+3d0-kNLf`Yog^0zUj@Oz3a!7%pi4LSZVQ+9TcL_KUq(c^tOz2A zAz8O_ZfvWxT4aNy=&*3zVewA**}q={zxsK!RVE*x`HFE^v}_#xfD5qb%JI^=giHbh z{k3quzYh9eZxoR;`bpQs1F6m{lp}~OHxXjRwIi@_nQx*Hiw&=xp}S3rLL{N#yUy!JV19#){znT;AreH< zkSLe3>2*mHWV#h28)RDun%5jns7OxGgecRyc4$`UK`RU%x^61eBO5$A=UXTOwgl?< zrRdCGvRzG1y4G)&nWYEAkgk~`2f+y2VZ7g2xL_nPIpK_ANsoHK z+cMbE2A3KxIRzorkR@doa8_^#>{NnD3>1qZ-f3mpd2LsMG*n>39*fPOI1@{fXfljo z)XINuKFkn=*~PfNX9;`|)x-st0xl^9p^z=9#!Qlf2w|~V#EU)?q?#sx=FdTB-ampN z2ifHe$pfS*yjnvS1?w=k12D{rB<`g-0l-5q+OZa8?5g&WCg;f4#W8V?EVo3IY0|(Q$o@rz$J-ou|}$Q&(@sDtR)DN zqfug(XYm4CVY)%8Va=@=L<}po%JiM+hFM9F zQ(wECai8`?$;uJ`HIr!#V}D0$h;Vl$!Sa1}VKolp&kF4JIZY|bD@9O0LL2pox` zAwe|%5ZZA%~^xdjgr<4lVns5YpN}xsanZ0Z?R{RLqf0F-mo}ZMdGL)tXP7i zTw9vSMIcAs9(V}k$ZPp`rh02dCmhWwU0OAY5l1;nf<@i6hID6B=SwgfFl!WqS`H+~6D94$AZu%v{E&(P9V06_97{9E zVQ^!_fXEhU=?$Lr<52X9Uio0Db%>UpB~@mQITH#CtJPaEf3h&^eq>ICEuR3N?U596 zDAl!KpSP$ea){s6d{xT-wwn3EuS$mq0hic(rUy0Xo|YO)#v^R-0c@KsIg(jHkTV@? z@j@&vC@~3`D+J3*AqdMPRDv9GO7B9_q@6mGR#v^|kNa8LwHgr(#s^P}W!Un8%Ee7C zr7CrVUs5cV7r3t;8~sf&N;eC+xausY_8SF)NI z=*SaMNKwd7QEUDJKYv-MOyaj=q>9<9fy?>32L~>mhQP>$lxbMnV8Z%B1%B0FnDs3rNgi^qfl;y&$Upx_*_&>XH z^q^|ojO1|BKfvXLnh=46 zsfL80E-MjBY9*0SeQXPs&{~QRyl^U~Nk>Yizt#=vg_DB3q+E&b8W%cit##W_>+Xj% zlBAnk!oMrT5tg4I)L@lr_D+~uE|^KoI6+kAZ-)|1E4taavfFVKw4oU!B46T|*^~pI z>q5V0BdUfczD*tIb&`3dheKHL`avD+htLbVK<_^&zSoD(WIY{K(7?b6&^*6NsjT8s zVrl}Y3i_!Y2>Uaq>k&Da`gwv()NfvW^A`|$?I#c%9m;t=@S@50%Ht3@dlb#TGx76c z)L6co{r)$gzQ#%2ch=%7!D=$MEY*!k=Z!_A@*rPtgE*wpyS0$1^(7B<&)84~!i*9` z^uuA$0VRT3{(^{wZL^Ui-tjOQRx~ft$x*+hYfFpEof2}gXwXWPl3Hc$WG_aAc41U# zVrm_2H2W-z{-FWPLwp~2a10`WOy7ViZ+Q4Duyef-89f7#Z1%-eL#c^Q5fmI924nDT z(9ax!VE?NaDaxEAPWKN-KcLCSkNpVrz48yp@!YebfatPG=9&W-ZD{VsJe< z?v(dQ+%LSATuPFz!nr^yQlc+HXvAh=Mpa}+2~v)F2sxLEyX<)D$6`JSy;H<0J>NlQ zg<_jnq%%&AY{wiK@U#Ulo&oKRXM{<`(|itn{9=aL6Y`Hi=)|v(9HT%M4V6g;kuH4n zC(-ktJcxOgS`qD{m%V8sN<~BpzV&?USV+j%{u=`4`!mj|jik=D!ut<^{`Rw=BDwHf z4nQRo_vlU+IBJ}IcsD)_NlIdGSc3OCNnvG4+&5t=u~>vEDgRUq%J4<-Jp79@sUkB* z5QS8%!)YBA@3XN_iWE~JpK6dtHaMdoG_`}i-;0_!=2%bYZtT3 z_;{uV^aKA2!Sfy%>VIc-e6vuJCTkB;?7qY{>atS5C}sD!l8Ae0FTFQ#nMqs+X1dy8 zhA?9U(V3W%#|b5(RA(=PB?XCR|o-a~`6*h4C^+b#AyLcAD zZ|+aD_=NBUPvWy65Gqn~r5ERU`xh~DXab?JVFa~PF67r9NKGc`} z0@X3#ul^7s@3>o%H?zAR0j|q?W6>=EGP9EXkxHPL;7J-Ne*Eda8R`~4BLs<#CSxVf zKtl2ULe5|*Ak!)(V#Qf!vO}H?ya-b3r(PBI{`mRRB5FmxLNbgYkMJ9!xsy{F1QKOX zMFM@jK*0d*KFH#hu`?{JAr+qrHe zmO~(QO*XYA3sy!0Cwg=6bhXzsny9MoGt?wm(ss>;+^Uznx90y{cQ|~|5 zM=?~P6gkZ`^mBa8SK@WnU}S3)v|~TdAX4I({t+;Ge*oHbzXfpqbtnWhcN$!-efazC zOxa#78QcdFnV4dgow%tL#E4iWAjJ}jC3Xd3de9(?!=3HRj`m%^yiw8T4oA*y8wMa{76NeELYp zqt09P!()kUL~!+J4+D+0NnnWFlmU|4UZwAcYkeudsa#Y{LA<>WQAK*RIy&8_fM)0( z?l->P@yW06NG6G)^G#4HVv&IMi!gju;6_t+fL*v?>Y!vl~M!Kz!lgnK=n zPW(PW5Hd$Ar6SR;F(r0{v`LN;(5T@R=3ngjw4l*V677t83;4Gq9F)5Py$z&-UYH~* z;)8U21$!XwoNDuMEwt|O)9ycO|hZfVvwFK#w*J(t?=eMB|#3z zFsTj>+z77@R%VUCN}*5}bt1-deXHZ-NC2ChZP-*iL28-UhM`|ew7-^n;`kYjO4*P~ z&xhc-(KNGL+v5L+j=V;*C&kE-fp%=zb`Xgsi;C1bO;g(;&(K&TNe3#7sA%MWFqt`_ zM3j+a$_ny5(jK%Y-i;*Xd_WV@K~8^zNHSYcD0ndzsul#vxj(>$kk{LmysakMIrD+! zZP|MLmWA@H0cNo)A~a16GSkEDkUwB@FEw&7NmQs=mI|3n4ol+4D9&;wPGc2v&@JdZ zCj)E2-fZQt%B_Yx2Crt)P=1js&p@xN3Xx6)O z8azC;cqR-&M6uO{%A;S>29w03el16{=?5J`#tJ?G37uTA596(}lJn+xa_(QD2P50k z7NKF#ovj=%;y29(WE;zp4plEaDKIt&DJ=(M!ptIa^d@gt?2}s&D{=fh1VJCwn|&W} zif$)L&9ptAvTNNBTu-wu@7_j#D6j>Scg0_<0a+D<8>~|cX78C=G4o2crT5g0x0078 z3XIv%com#hZ-T*adH#~F%cQU=Q=!PQN%AI(d`c7=Gf34lyG0w|=a0@BHac zS*#H+3uO^x7dk)wAbbsMwqfAXqc)qpXs4SoBij$`JNu^JBiooW$6ingNS2JDv%NIF zBS-Oq58^=hPv8}G3ykPan0CZFW9Go=P%F4cJ`YFycf)D_N+=8?qi;%my^V90+JIEb zQO{=(Xqs`iZWvjoi&5>W10pop1X}?GPO)^E6GPRJSA0SB-d$xn>?IRqADt+my0FdP z7T;#*g{LhyVzw+g>?<-af_2)ee3W&hj*RmMY0{{+%F-7k6j*+6kqdi56+y zg>|-LR~brDGC@45>P+uss2hc2+EVVy*mw3d-(g8%xuakeVhEE`%@LNz=P4C$Y45`j zYW8IXbiKHB542FE;I?>I{q%dHM<&j3EbyC95kv@l*$l)FUFXc8e`H2`WVp@mE$zbetQTOWmntg0M1r;3mUhd^8fC_@Nq?_EQ|5Zc4tBRsyWZWMjDr zCaHEIoc4I(;-DW!h63U;G+k}-mk;LWL_Q<;K<+@%}Jya~|M3zc! zIZ8JsIfiS~S};Q|Y+{9CEdl3}SJx5*@pyVwZXdD< zWVWIR#0`$j`rjDu7U91Nlw0g5XSJ@&lU5jkM+wfdG1xCJZL{hvVG&{@5#z<_Uo68YY-4-RoE>ey{fzP(NGVe4m zso_sR0ad&=HkBXgvDp=)#UFUOm^m+T&FoUElb2&i($Yx25&{tNLLoFz98QgTc(6xq3M4 zSlGM(rW~;@7xa>3S%f|(>u&{(%tRh9q5%u4!FGc|d;0e96t0H#`Z>p@1r8NjnsQlM z+$fs&&keMCZhECde)erB7JI%3ClKpL-jys8xdC4cMUy{4l0XBq^05Mkc14!5oZ|rLgp;%v19NMiDnZ*#sMpR6!sV{c*vF z0#+$1ui5VTNYD(fP;!0BH1G2Cj_J2GAWw#`p?dc-N zWU;I%Q$mb9Lyk*9gFOfXW3@$<)l?2=)p;-(U?VUM1W7|NF@7Vhc{=THL?t>(Qrp39`NRf=Imrfl)f}@&f1hXNzeoz@rHQ-{X zGX20x!HkSaKcmivkUwpjnoy2@SZD)O)Jm9G5q#d%Zc-zd4M~wsfnlF*(h5=zO3#BZXn^t%Pe$=K$CvUrA;{z+ zPz#X`YB>U73s=YUF9&<{?7XZBlny=Q%hbhoW*j;T)y&c64yB+e`J^8+;Mi0$ruT|0A>EDF{6Ahvv$@`jX zeBQzF>OLgYK6+t(!wm(HB@AEIvn?Zb%F=w0!Vd^rP>*5oE%E<@hJp&BcdS}`p?~a5 zz=NAQBB9J{U+x&|eZyYYjV6|h2#{;ihUWTUuh+|9UQ_;D3AKFmfRj7iQ46`C!Pq|N zl@j)8RaI3RK>o?JX$`}i-{r`5hcSMyMC~b%QqB;`sVB@tLEAu zoE^Xi(o|D0;uS#^NhU}Ywvet*3>{7$Rrr^i|B>GAg%VLEdGn6XsK)$;=j|b^(mjhBf-( z9vt@sjI2G{bH4~hpgV0sT6eG|AmKk{gUGLyxgl*E9%S54x?UuDP z3bW|!Nw0W!UNs+z#j=&rN!)1P0IJEA*HtoCGx3x8J{N>Es<>(DQKWh0Jsau<$#CZS zUXUYfaK`y@IW~|k4$)AK3xaT2V%;?jY&EK<3o3(>O{_8q!o5%-V1&mlj%Y+DP4JIo zRB)#U+zzyj4ynEf~ z?Y`>zW>~V^A^tA~P0h7=_qDLhNLr)_ALJ|D+dT2levgOAD6Hvav_Rn$Jt{rg!fX%E z(>2I991WJ(>f~O|K-|TgZ?-}c+_qdsr3cpjAn2=W_0OUelO?X4lr+1PmRtQ=eL8$YcV!$?1 z5!dD&w5edHwk!{z&!%X7FvF-<&ci%Q`8^LvJ&;aLj4!-9c{{C)Yv_d)+CLKZEWO6D zA9G1JW&56@SM-d~pY$%iqJBT)MoPKBXxzNwd&#<>7gP=&C=n$SWXnIizZ*%?75_g{ zTu)I?zAwq#g4h%@;}=tpCjoDhRsAvgoKHoLJ=*prM0xR!jU6eC!r#o zOW?wg^j-ML12c^4YkrDq7A(1A9%204S!Rv;U(V$1#i+;FV2C1)F44(=rT54ADl5`CsYp9yRLJ~SKjA=5>b{9vgIG%w}nm!(KRJ1lIF%= zK*tk)NV1Ax>)y70^~dSyxat2~DuON6Y8ucVQjLf5DNP(<--UEvgl1mpxM9g?DgFoj z_7Nn-_WS<+{d*QIviIRJ?}KUTCzK0y^7$T(SKZ7x-wh@7U?ug?Lt!UgeMxx}~o1AsSW9+q0D!JQ0t8anI7_O?zdq zv?Z<^)gw46o*CC8k^6I=$Qq_)O$#c0C=_zXp3l53559jpl!-}4v5J{~1*=O@ePBW% zrITXcX)1!p_qDF;I?^r4(N&O0AtG5a@Aj(jw%9dwUhEGPOde`MZ+c{gTMUP+eS5e&ypH%VgT;8qz*9`VI@wUh7Bj=smIledQh z!v)oYo=3nN_T2itqkBRuLcJf}ovlo)%MhAR%oVQ2Ff!wbb6xBgs!!w4JM;P-7|3Bz zxWlYr=zZzWryNX6m{%$?@^xo-uUD7g9t``Ac+Z9LM@B1{EJ<6*eA0C$)QT!T5g_9{ zjBVn(+JIC9ABKDIc;T3RX#9MNsYN5zZdl?iICn5(N>Xym1G|NJ zpui-~^>(cv{jXAh%NsSq|)XE<{TT8ug zEH2tW#PFf-!DKjL@%ajx>ulXQuz|9_z;EI*lS@|7Y?w4bzS6zj%^|m>)8deS`{dTW zPy$E+u$8zE^CH|oEacshSj^F{e}q~g+DN`gxAam1sp1d3?IShksz3B$zOM}%8g#moqE|Fbfy%^9 zD>9$fe*4HF@P+8S?VHlkg-l~m-`C*K$%GYsSC;#{N3}{4=0@1);b3emCEt?w#G+C*>qP|A`w~@$o;gV5Pl9QsmC% z@O~Gy(l37ehIV`+kAj%)iov3*Yr$F_>&L~xZKs5j6-PygZsNX{>HZTxr!?2K0*SMdMJjtFIZc8H! zDRB@TZp)K1@wgA;u|NZL3Pn|#AQp>um`wB-=CE(kpFN+mF^YBab4p;e*m2{KinN^YyNKGC?;;sixs z+2ZQ;Mz^PuWd4e3sCL9EH#fE~TyNXS?sUVef7sd{@M@wQb$BF_ zA-1P?Ih@WuT05gy4E{qKGnn>lve}U!3IzsIMFhX%+gG>_ijeUc*Bwk}VXCPq5u5ms z-LxrykV@>%#eee4qH+hpUF{6d-jSZ~C`1l&w#ny+_N;~z3$9+UmKHoc|JC1Moa-mZ zIVZCUL%s=e;1@mhi>>!uzq8kK#jC^tYyw-W!zaM=FW;tf8vtlVA`Mr79 zt2cWGvsBJt7A6%l(FeX(nQ)}pbEx& zQ`UD+8nT-LRLrR+2bribpMy@=SGT}&7m;Il=N%}{#*R2Ss7yQ=XthiGtf9b0A_py; z6y~}!FlyX{d8(T)1#%EB34+A2=G(9C3=BlNMF++hZun+zcO(+IIqtZVPeKoq@-s}9 zpXdj-=mLAoW3TSC)mntjN_O$-qhmS!l1h<;ZE=GvW5k7JUwo2OjL0G?ewEeR;yRe9 zF~xjhc7E+YzH(26`&UgVE(sH>SiJc0RW1hnOZbu1Hd$fb6;)IT zyKENA7IK^qes(R$;qc~2gg>fBxFC*Vm4wMf<E&P>ea_ysT*D+J7J*Up= zg4;ALf{88G65o#$#a^dC?L4b^CkQ2}UyPaFlo5?oIXey6{y^=rMLeJLKKixWnLomI zptrF#M-g(eH=-ZmPTrW!$qvtcN zZK_{uw^hlXZdzt{8Law&mQJ_$ZXY_1_BRHc_8NP8$RGZ6tcyhAo{*1VuT=z5tW`2p z&s&I5vXq%Mh$P*pJNKtABb`zxE##Z6NHAcTM^10@#v+KdYtf%RpEdi;pZYAI%6*9X zmL+G%bOs7V#IOT6NEsKtlr)(hvBH(RPC^NuHShu!vu)?Cs=6)<`{o$M=;w)7*>ecA2 zs;}-1hmHNR)w*}pPIq2&D6bmi$YGp$_yeGLM>lh3JelQ?Tw#23u6|d89Up-)&D+j( z?e4(Hcxy!CP7z*?ygYR7O=Pzu}b{+iplIkBQ2`B*=7P!v&C+SiO>i zMHkDlFm9=ly7TQKOfxHZSrzMz?E}hu$pa>)1yi%GnThOJumJ3u*CBBkXdz096+7Oy zub>*pEmd5C;9f>E9g5Ycq)AS4XQEh`1es1;r~$Z9N2C@oG377`GEESp`a;~nDx)Bb$)*uSdznD5K@?l6}RI58=RR0nFg47km*9zd0-)yVqT%czG3X(2UuN1 z=MW5vXjL*qC>M$4uNh~1Xu`C(m(X}*e z3frMVxRdW|?<5|1FC1vGDR!FC#F^`uu}GE&OiUTf0aH_e^m%vR`SJTP zeiVS#E5GJ1#J$_`&F`e#Ls`)=T7@Q)HO%VmVR--b$2Ul_@ihiTMV&ZCr|x_5@YRpq zbJJVzFsZmG7hc)}5?6MAxA&_4h-TrcA!D9oVtUf;fAkq~@$2qb2M53YK~7d%DRT_Z zWtarXgE%Rws;Zdx{7LxtJ%2B4zUG+2YPU8-xZ%vYk61rXawwRm!2LI%*;8~lmL_ob zkIDBu?YZ(tn{IgP9jmqYFmUXG_i`rn>bmhN1370uFNH}S#rY}E@BH2u_)nf6;HGJo z8|IzKf;chAM0)VS2U)!}0{5-&X|Y<3@8BKV02PEmQ&O?$dq@SY%gU8c9lh%0hpv0$ zKNJgWwpgOyv)HSG@Ss{fu;=AfySIF}`pe)?F^w)Gw-d3Be>t5{Mj~ot-Jwt+6@;TW;^!tN{B@ zC=pbNwQ%%BB(U0mS#7Chf+6S(2bo8f`Qd;1)vYPxL+Y#{`28DuHW_HL)z|YcrTHXY z-xw_#gC>&&k86#RrSxm$yBAx1 zu4O+K?HBL?*FrFYdGeiD$?w97oW3Rom$+r`!-v-INhb$kJZyu1K6KmOr%znF$KV-V z;~TJfTdN!FGk6U>0Y7jxDEycV5K-w`_^38@b1~XBZgqRJUQaRAs z#Y!iSr~!jo>kJ#6%pPjN&?SgA+kB!!^!T<{tFc%jg=~g9MIa(tH%`qmEeZT}+`@V(eA>U@pt%p}gk%&V#XyOMB!vXy;5jcJfG_T?d zVwwO`L9&7t)1>#9Pr}B+3Os!9mW^ZEsv<|!jD`RiO;Cmi9bX&$Wq9eg7 z9#o}oVB3E;{_DhgJA!5JF9ERtPXFR^U?^A(VN@bpt+W~=UGWuZGnOzL^i{*7uiX3q zI{16+Hsi06u&ZO&CCY|$1^(p)LE02^t)rtO9_lrTkp@#iiUW(21ttm6imyMsB3WIE z1({eMy7ooK{03`7Ir}HWBt>yB2~r-!eM58PlDU5|(}`dbq6C-(sT@-7A@cPBt_AKcvu?rs5sySuwP1Shx$2of~-Ai>=N1a{tUzx}c2 z%sq4N?XK>w>au>Sqg9n<(NKs{U|?X-L}Amd?A;8rinKibS)- zdw8~Oe(C$uK?W0HM)?2#vc@D~hB>sPAMV8&h|xkU?;*6P5m+ZgWazNNi$p9Gs2XM# zUq!Kqor$Ta!{uY10})OGm3)y@^=ppCSyW zXf%M2G>jW;G|b7rO6}h#t0olUR3J&8oe)yI*G46^JpRw;E3Pz+ou1?XhbI7pG~6lG z_t=a1e5|rkJawY>%H22>V-X@1%;q%n8ic8?u@vxMzuX_Fdm-F5zIlHC?pfP?_M^S$ zke6ag=BpWKkVgMTm7|s#oWgJ@=Ks&+K^xlRCG+tWmgm4^BWy4~n8Uy1uBimmyy-NW zUSbFKu3&hPO*+aLm(Jh{mr;O zAr}?wN6$Lj<9ok={(tna|RL0&;9^QZCym##{0TGPY(7m1< zY&LMhib#{Ci1kUTttt1f9X5kE(y>Qz+}9bk#CML-s0LtcW_ibc z{@Ab(MMQ^_5X^z<_KA!DdFnaqmT#u+H{LAT9UT9!?L)JFGJkQw)K*#k(4lyQ*UZUT ztChRs6Vlvd+j-0*T;ayWvMT7gAH+ezyx~5o%iIjCt#`KPW9(jE{GX-rU-w;O^RA#?g^UA+^^v?e6F{{U5?5Bha&eatn zY&3(md@p*DmwrqKq7lCo5n}|s2>gnv#$};U{AFIl1fDu6T}R7m?=eAf#V{aMq&0&z z%SpkC`zl3G{}NWR>PgPTgXG}Jp%n%Uvz52;tZ{DqR3*4Yr#sw1MXtKL*`1lt@nuiOsqKU*y3;D|$P z3gS>g1kRbcxltp`k)MNs^QS0`k>W_Q{PL7>v*g$rykU?Vq;bV8_5T=2xb4^g?7;|X zGLq}g!N=o(s7Ayo4+?(L7px*eb>9DhLutIV1gWWR$quL0!8<(dlp})+v+sVH`g6yY zA0J1Y!hicGDZ7g)QFn+tB5+rfbS90phK#xgfO38uMT5)O7%B zng#f8jgiW(7?dGs8UeL)U__69=EGR%^S&DDpoKD(<6UVPVu^o&?2Dyf(nJMpC zx((uRRygTBJ#@g0n8VQ^ENb!T7daKr%wEW16w2^Z z)yoWH6CaDanuxxKj)pQKfsiyF<2Jo=n^^4mx((XJ_b^NFSr~9Jy5q&mMi%k0^)GwN zh|%@wbfSbuzq9@N{vSIStZE+u_p$U#9>6uKO-^bJ{n&RV|D4V4pKBjsb>aH7P9ut? zNW>{Yqv~m7nrllBkCFt8`In3|HeCjck*t*H#iN|?sC!U1UqP94`BgMdcFcPM$NIDd ztxLBB$^Y^Ty-luDZh&Za%2lBelP=;&j3=dO7V&>-U|*JoDa=cF61{>3fZ-Q1yz3!BK7WXX*R5&`*NRgO=<>}Z7tpM>a zx!eR4&(WLhS&LK_wnvv=5cNqrBn6t1IBwCPeF-|T5m2v8R}lhpbN-IFNL@=q;0s`LBBN*pKqGeN>k+ z>@TDib6Z$7eV|)M+|3#Dh1YCrco|6p`M+tzehg!Zl9@dIxJB#_+%b5^7P?9O0}}bu z`{+-&+;0ijIr{VG^S4wUGuBb2G_Y&>!&ur!$_}rHS!l#|%czeh!6w}}5RfOx%&yFw7 z4DaVgbUVwGTb#eFeA#jIer3W{fSA1f>Pv$g0Gd}-P7b7**dQ0iJOSNQ4yu@|0`@Y@Ou;bz| zg(Wcr2^dBu<}Mi?ATrAWWSC4xf49~NH@n=jWO*MeVP`;A02{3TOipa3qpofgwdgTNM28JC_cEXXrL#TVCk6Y5t0?P6ImbK3-At{l(R z|NIU=C)jMfW^`zOEKq|feunW7U4)|{RuO(M^0_{y-x;x&ZHb8(Uf;USy#jf^(WRk` zOA&TJrCYF9cEThfD)BWHoMe-fuGTzVO;sJ~g9seNC=C}c*=?72{}cEZ-RBSDn_ybv zYJKDPYh%+aA!szXE}+#g7x%xG?CtnY#2U|Jp^OJNhTw3mYJWTD9kPS_i{JGQtTxNK za+4LmQNaKAm9X-O>#r#&>>Ae^mVuY-EAF%urd>2KT81@R2mx&LZO_H?Wz*ZAZ3HrE zHRldD92q(S7K%9Q)$`RvbZ>giQ$4U$h^oS3l8>s;p3f1IP-sXpGtxyydhN=9k)Vj0 z|GiPdl&>nB(mj)H8*R7HJ}uxwJ0i zu6HozG(h;x336xrKbc_xg)Bx0Cz_z1(2e`1QpdoLsbw)v$5U=S_Zc*=qP)69yP$rn z#9f{K1U^34;WD+tbPYu%vvJ{)IqLW$W&A{dsp>Al*6jyX6x>sa-KTufH;bi_J*pOV zKZxnPqfORWgpsbI9!+L(d1vG`3t_YAay%~D_?6~o3D)|Hp{U?iMVKj=+3JH6x7VM2 zSAX88+VCWXu5X?Dhn449X>*mTsy!@gzPNJiJ$*dt=_o>?8IyE^_#o{;EjumT|6db_ z6a+RqYfBlf^r|fc$s_oxWB2@{0Y{knss_^@Ar420>1c(R%=p#i@j`exx_+u5zdMRZ z+g``5lSZA(s>H5+2lMH9L=pobl@X5{1x|8V5lzWcuSy6Hl|Xp-9;M*kb z9?*^*NlCi%t}lEr+?=PJ3PWt~wDvE-wti68Sdu)+FN?|Uy%+upp>1S1dgdkN%oa-Z z7Hsi9DQ{f5TcpvaB+r|iaAPHj0m!doV>-rimZ|^cRdC?UCIb>>>vbg?>BT`q)Lu@S z%iXReeOgzJ>EtCWE7s|dJp)bUA(FIk`{(zIet)3xsP2R(-!=+g|Gneia5&M%g)Z#0 zjBpNeu!p-IPNjwf)x#;X^L||&T_iBf6&NFnVJsY!Iim`fw7vBmv!x!p*gUBq#% zF+Z+{c?wmpoH*r>g=YB0Q5_#*gBz5%fcO&7IUS`GQdR{t8J|Q(k;QE63(gFQ6`x_Q zfIa-HGl)t)ObGsB1VYv$!OWF{Z5A_d6=tZv-D_Y1+}K}8VC`1KDnXN-R6JY^l%&)z zC5LqhhFPVugF-J%`qXw@+;Y|aL2C*O>DhJY^9z=-k@+zOqG#h%!Vd8~P+OZOQD>_S ztdeB-nBsHJD0sfoF7wK}AR~g&-oqqO{liri-x%TdLT$0KxCxbmIhHLMbkp>Te9lH| zSyjiUqrg-sK^H8vb86qJd$Fa5@iB0*Jg*NP%6}H)vSMQ?UpoSz{fUUhg-EQTk?Ox} zwKp9a>O)-~m)W)x=Cz9{mMu2aY;$F>F(UQxvE+i?;=D1@=*ZAnsFYy5_bl_W#_?@9 z7?A2s9%NvIO?#sD7sD-X$9yZ0M?#Orrb??7MJmM2U~S#5;I|Pxi8;LCqLD0l))s@J z%3>pJ&Yd)`U0kHfoVfmGK}=z7&DFmRM>Nt@=%aY9X-$eAs!1)3hSrr3nb|v3g$_y% z@X)YO%*+JZU@u-QJ;ZH~$>r8ld9|lglYvQ>eba`m^6IY4HPMhj;MA0uFYv|DP1di< z3Ya8w)keO&Nkk#iZDgLRW*4++b?)TjlEfJJNpv)xRF9IW;@p9ra{AMh9~})4(q&Rq z1=zSfjFNd5!;=1vH`F170?P!}KuR&fJ{sEEDC=BF(yXWYxLjngU_(RH*pNe|{q7%S z81(D`13b{6q=Zl~U|?FXd{c#I1#Fz>YBEn%MRr)xdhVNiKKc%yL%5y}R2&`vEcl;= z(M3WqxM4j*4E69Pezb%h+P*kmr5SZJ;VpPC`NL;{FTtN4P>^UeqoPwE#^hd@G1vT@pXUubj9D!RV0&n-&)aOWG znQ!NZEIo#|1Od37ks!adtZznU@)fF_@X@l4?CI0EVZbtEa91OA6v@LKwwW6Ug%=4e zb!qITj-DBxHXL*nBv*>;i2KGl()h3p2t6(w0q?DKY(0%`g8=nEQ2r1D1}vnn*|XdW z%Yaq#w8J6A(sfyR@B--S+yAxN2Tvx{%*2NhaxwsI=?=Ra^}B;7rw~j}@X@lYijEC+ zXNCVt@&~-~>UvFDy6oj{rFa|E$Y*}GZJ@^vQRj&7dRaEO6*;)OUb*glgZWM10nJq# zJGPxu=iwALhX4yZWq>24JvyIz`q{z4z&j`YP{?kR!;;<8UcVn9TmPpQfU>(et~woS zG}VgAtacOwfV8VUqW|wcz3J61`*inXLXQZb|Mprmlr9)>%m>iuXadzQN!z7U;vK{fJ0vLheL=Ei8%O6GZHO7snn8?t#Ul&Y<7o|LP6!T<5 z1{PUaDB@K#kdQv*?@TDn{@Fad(h!|~3#yszo#iU(+3iDDlsgLU59?AS^7|g8RRUT=imVXw(f(sgWG{?))(jb zMptj|*DreH%xxE?6arG=>Rx=?_q%y2J$rEEPB|XNdV>dH**}H>3rAU&np!JFQ#$n# z{e(X78CIx$X=5*w!GkpzKict9mr}5nIy#c^29n1I`!jDQ*^1 z=f0E`eHwM%ifgE+iwRiOy^hlSS1*)YuhE&*giP`NT{ZW#QdzsOC(aj)u`D@DHz%QF z<$i#LiQP$8C(<9KWxgb;fzx!u$FDxo#PX50E!(B$CpV_FzJr8?K)PyH+2nSBNZCQK z5BDts2weJ^(Tt!Y^1p`O?YA%2p~xMrj+%x4{OF9!mR_C6hfnu*(znry+2 z#ya_O{|utl!#nbd$)U$?HJvM#Xcw$F8yGZF3J*JJ)i!6ps*V2j@mnY1hm^>m zY6D%d9DrF*^J;nuLf5@Ik$Sc(W^r1^4GYiqMy6bJYPwB9h%%qgtFW1H~kLpO6)g2D?yM$$5 z9SXTuXjjXu1}Hw`xRXs;$#qIUaV_g4##K0h+a=Uj%~2K+B++9poPG|~e1@(oXpx1T zNOAV=k&n{rjG7m&fM|zQ)1=@jlEr_X3qqkxLAr`Ud6vOmEf+@%MUGC0oh%pN=U8U5 zz6ViJy*Mz#BdQkvEoKzob*aO6nMDQdmjIKAk8tQ=DhdE*5U*w(wk>OC3Ao~vI#|lq zgQs4v5@RTkBTR8Wb-nwssp2OzeefScQS)b=tJ5Xe48H?n05n#h4h@I=UA$U<>Bfdi}skGFn!YN+NE|@VmGz(%MS^+?0cYiLK z+U({4xSfzhty1E~j*Bb46CeoyEh!ly0PQgrzpU3D@PlZ*gLQ9=^ZGo+f8~YTZOV>W z!^4Z-8@C0_3lA*vLZg|KIpi!c90T%rIA}-@9=!X9 ztLXh!kwGf2@R{9QYE4BO)ktGc6vp*Vg`@9UC=IQv#-GgovgWNUiD%AM4)2e)hc=0v zyshK@lk8_`II@^-mY~pkEP7fmrfgQ^pic<#ImfZ_^~d`@(9X|v@Ryo-zx$Fmf;R>0 zu?g$ugZ?^1FxVEU6TNJ5AbUH>ax(btV069R`|9?I&tI%=P9g8u?*R51NQ7a59tblJb6?(F{= z1c7-RcB>AFz7=8Y#6+IV5>HZ+9d-W>#mOT5Us_GwsDk_#?#oIsYe`+IXm?Z6jiY>@ zqe+FON`pN~81{{VR{4|gGl+N?kK{U>qU0bx7$+3=UiMmXJIl9!&ZAZ4_i4+Vs&X&D z?TO&~WK)e)(RbVlK-Y;0%9S{F14M6-Yo0-2LdlM&K-j$pP&uYF0#rs+BR6Z=MMYfdgJ_x(RK>u^SIoLm9o~%M zLSyM07G&!K9YKI_@6X3jDzcC`iQ&AmI_%<-qN;BC<9?p?Ho?P%I`5xx1fzRL?*RUL zz8#=fauK>`6wGOgD5CDe{GxZGuQ?taP|&IIgUJZ?MAexaSgFdpWxd813emP;6Op2w zbcc&zGknrlKqEdM%}&$I)u-*UE1V$Q*jKdojK!rE(4FU<@o;}$RufVVMBiz98Ng9L zmpj3415NYo%*pbTN?;Uz+2m7jAh3S~tgJY>T}vMu=<8Tps>vz|~6!GD7T_K5l}F3j3y3_t6o z;KSz7Q;M%FU90$Jx|U~<^N8Y|1YND^+lVlV3;ZJr>g3y28r0!7r>ImeEp$ICYCp?~ z47SyWYMc&I^I`)*HXkK2hA%!(#}~tN9G-C%;n!7^r*+XjVBg)JQ+r9NX$}T@5!iGZ zMiOh-ifePavI^Zx*ox|1LL?3Bn^#{jL-YAi%q9LCdKE)7h~f+)kXV=KrtYOCgzg`J zCiD=`%kAySnlOYYa*gW2ntiD}2B_mr408Ai@`)H3@bky6&(#ZPV0i0O=(k`+oXI7D z!qXP}*Ok&jAA5DG-g?BHfd=5akC-ut)n(U=xCyo|`gwo*i^3j52v!@I$3|E#Gw;NW--pb)-TQ#ucK6PT~U4`&#bjA-VYnV&s^|b zY31)PAKI*CnSTqOB>dJ;CBG44hKD2{&oH2F!^{@%T#*N7y;1szS2xs7q#>A$>5f;g zY;>J$-3zi0{4Nwlz71bwgLPl(C4oNU7+1DQF zjXTO`5kdKA!ScFf7Kky6tKY%02ncdT5h{j1-Lt5Id%H+q zin3V78yC((%Yyl<0m`ORgG}Q!mpjmj6&iv!0d^4!an5Ervu1xoMR%Nh?OoyA<;GaZ4|k-fksR zny6#hV$>`9X0K?xQ;7i%J*dMFl8%bUvVOwf&2W1)JMdb>F=>6kLo9_3HzOvln~p zu>aG;d$BI|iF#5{W$|hgs668WLW!6pk*|~N49LqDeSCshskH2eqDn~Ex|e!LA9vD> zDlnnCE6pH67V`ESeHo?c3et$XHF!L{qfS1fzl^2VWFQdn_+vu{`sO9GimsbTP^hCrIb3}4{*2GN`~7(*Cn-YhMPR6(p{{M>-KqVG=%d@F-L^!f8`pyk#gsZZn~=2 zQxehitY>tjTU4KrtfjV%iUsJ}#PG57sPLu`rc&djiF8PKtmXfkhb)tp2DmgoFXDFn z^9RCgt=8TyUi#_2f^_)HHxW~4wdVhIB=%AjMxxH(sN$93;;s!DytP~L@sTe7^f%_X zSm05v$?HkG{sTe;WAN`N8ZITc=qQpkQEc9W{2C@QJdN$ghGKf9NcAtbpOn0-oncuP z*NZ^x=XNmcZ+eL;Ih;`j2zk+ogW)5%#)*;wLK)bY?718ZpD4XZq?+L#(p)|JFR>e- zD~{~B=F$>>c--w*prDzR_^^fTe2hctyxM8>^*jK>XVY_q849!O{_4hMv)4oNOa8Zm zvk^ZW=lHvzWNaoM-SCsOUjp*>urLaFd+aek4 ziNM}{H6~Ulak}3Xy|O#uVH*u-6=GveJq0d@Jccg)dwH3Cok8TQ$F(?s7R=w!h$^5l znNTMQ=qjPSN`-Z9gB6htQ)nr{gD)*U7s}5AlH~*>B&cp;$$f|b^$2O9z|5iOapzS_#XOO)ln)XHjQeoB zB(m=&pd(D!!n@r|MF`b%KLTnh20o@0ddqvS3%-#OCl-!22mzmplfYFE;|9fsZuwYW_{_ujiNU2`g^7(j`PzdWS zo0N|+;viFL0P*c9yG3e*OOwCvy&~?5CE?d`GgQ^^a!b+{vEL8~oPAc9^zgfWIqkTb zxt|vr>@Yv{EF-WV@`ea%Zaa1Z0S|7iV&QU0+lKgeg9W#Lbd)_ zR!iNKCNO^)5+P@qP#FGEFhf>*6$2NWP7HdhW<-#!GW3{-iXHdOZK9n`Di#Q&rWhl3QB{E9`8ppM2rm7{0_siXs}xkYHY|^N(Nyk|Dlg@-%Dqv zvM%UDF)sxbXir%5D#@OQyM)>N)UP(6M*F12LTK4ac5_tY-wRq=JJY4^k9yU zsh+_hu86CyF(-TWxe>Id@))QZ@#EX?2Y&qj{H}$|CLo6BB=}QMvor3IkYfOjl)(Igh&u%@U*3-_6lh3#M3k*u{`^Gn)WK}k zx`h=CAIj1`TgGjMT|LE^rzR&s*3YvVsclkVC?gD50LjpY4J$9BW z(>axDX(x-Lakc5rt|=|WL_zVbs384m7B;RN^;wJzycxYbDJZa4I|xNvF&Ct%MdV6z zmTQ?HYO_Szem&$`i9kmS)4f}9U*ul7beAZY;xCWK=z zrQErr$}EU`67(Y~Y?0T6^&yj=V~aM}uMgC=oQ4 zCxh{A(3ltKGg~YdFq?uF1@;RTpg~Ej>`&cCH{~FnT&b#=zz(ooCk)#Kro@)fX-RVQDGLjU2czm+ zBV75Cj|Covhoqj-pQ7?Vyaqh_%V9+UO9E9i*(F?W-xS1R+h*4q(gr?>k49*+t4Do) zaR%5{arE1%Hs@9Mr?wq1RXA7x|&v@vJQdIJ`jdA`k#-qw}NRM;@RN#zi z_{<^9uDPdXp2M~q6^WH4)y$6qYT%CuaYcE}%quvE$YHOT?Fbd}MUI&)XJBHcOt|1+ zK8YNcH3_FqhJesPZ6cIYp)5(n)HGp)9Cc5_BC3)O>5CXF6rKY_xac;es7z~>Ojn#q z=G;6mQ2!I^mG|#Y$v!cLP)+7%#hu@$6}u->tm}A7-8R@Kz?kZ|zAc~%I&=H_1&?t| zbmcxyay3ru?hr^=^&1kQOC2_Ot4m$km>F!f8VTQ$2Mgu2jX&s3-CI1~Le&?jRm}b~ zIr^Y`Op@j^Os0`9Y{*J{iHqWI*aJ6%z(s7_+hSU06;j8@QqkkFQ*=VX?GznNw`i~@ z+>s@g#EOHcF2oEwg*IfCO=c` zVr0)+v~Zf9f2iqtt(CEor2VuL-OueM15@LOd}w0DkyTCTOM7lukfPO)nvTLyel=xX zBx+Bhv3TVSYDlJNN?OEbq2L|)JG%wgBQRH@Bta+5%nt%)k{15`qMhUPqgyv7#8vB( zNY{%|pCI$FnGN@KTPZRDVYFHG2z%`E8Wm+aesS_qax!G*iaB#=Wd1<4a(YDWx5Wxl zPrDr)eiCs|$ey3Q)I?{SlD?ZYH&P^=9{H4$h=obyJnL;E+{#c$IF@dLgsbJ{8qw(x z>yW6o(w$Yfp$QG$+cLZ%ab5)XtRb3A*#(|ghJ9?fMW7jMwk(+cciv7XCWbhvwPw0x z1)e&-l2iD82;dK{m@|b{*gp0=)mlBTXj9NM9PS_f_8rkM&H{?vP7Goeeq)pdbw49W zo#F&dwDD2UH=6(+2I>mM4dvs0=Hk%svL8*&CYA}8{)l0wO$N%u7)3rpC@f?j|CoFq zGOis0RpCUn1_fK}_}`5ZE3dN_l4%{uDoXn@!0(a?9^_XOI|OSYw|r9W_*WUFLX;~$ zfmkHBspUREt-7SCstJ7EBq+MQSs-SyT5ml6VF#f$9Mj^z-}j8id~}IDUoQE`=n$`o zh@ZqH){Kt1>!dYLW|u}a;D!~Gg_V%~;?LT2MG#1qrtxn_E_R&`9}7E?d)653`tOM^ zZ{g}_RP>90LG4XbkY>_aGy0Psx24WONSNd=-j`1}0c+_^I|S{azJ~@yMo%D~MWHG( zX9+CI4y{lN!*t0U-W%mf$9-n#twE-+v&*R{Po55+r1D}!kGX$-+Se3e>}w@Pdav6Q z3->yvj8jDpb4ktSlbv90Ou>GnpQMI}+TVdWc||}s3Zf5#x0tiCV_#MQ)iAgWiLsxB zW9Ir3OkCJ`IB7^~8bUC`F?in(IwW2kz1KR*ZN=_h8RshdQ2UN_25~a+$BytwiEpa- zN&^Ysk3Ud|EDN|7reRNqA!n@J5dpm_mI24)dabA913rib6lC1pJs66vhnqEX1&&tN zE-dIXm0j2vF9MFSR!$(T(1DVJB%2r3Ed49Kq$|ge7TG{<%XpfiU`!6-2dhqw4M7E= zGuf*zm6wHqk$1WpI18mr&$UOGn<7IQQI$yu^>a=&_o?~i!g@c?34y^R1;o}82JAYlczhzYj!BX*o;MFOd zh1WqI;fw9lGyp@klEC`vfijaqfKl>x`(hFh0MK&bZ{Vwi0_Z7y@WRO}rQP5x|*MK$Xb22GBWN2qfs z{lZV7Yn4%_x6mVqLBdoq;goWF=7Z3fKew$_zJ5nc-< z+D4Oyvfqp%Ahptm?*IB!Z~FZX(%X%pkKZ``x32l!4>RspqZnfnulWe-OZTK0Rxnh| z=M)B1qtK!q%?t}!OvS3UEF+}YG)Uapz^12mVZPy=R+YUAU!GDV5H_y*x-O9x?)-g6 z$zMti_`BAlJ!uI`O%x%*Z>sJ^P6zs)D`V z*Ml)Fxj?~*>FYR`s;2Pi-hnRpG2y%|IBa&N?5`EXvnXJ!{$OoQ@}h<;%8on_Ic3(b z73rE{0!2S zeoC^-nT+Z}BqYoul)(V?7z29|=`cE0k5_@qVXiuh->wIgSbE#PM1@ckjXTq$K~=)h zHAjNAlw|u%Ej>#WXuo3)XCxG))k=JlmgW}%^o*~YI(lBUudsXWkr6W6G9L2Q!Iq3t zzu!qp>eqibFEXUEs?{+>6QsfDk@5|c^$Aw`sJ3e{Ld-<@N-0v!Re~F|xFjc}=+7P@2#zBVes_ow>Wx4mD832>>T_(?*lb3!abmt(nw zktnHrU?n(nJQZU<_EDbgQq)?pKR*PBv;{g$TzRV${EF18`hr+#tXNXK9SyLtC1n+m zHo-O5fV6N$*795(Fno7yAkJq}a>;A`bax$1nxoSR6U}1;Y`fEuSoez#d*|14)3Hjo zvG~KYsc7k}rCZBn+5$8KDJd=U(2kLE!u8(k8I?0)Kdh{-CJ-}5nrpg#V0+0b>ny0N zy2e7W$B+GZ-9FGG-cUWwUh1@qh$&v8IaGQo6<>~Qq8<<9)h}G|tztu~Z_`V>XxhvZ zvkwTe*2>BZZE?XHvuRmbq50aO_0VRZ+4h>j>%_Rb$yg;PGZ`|dGsD4ePg9W`TJ<+(;43HiVpwVMN5Ao9T)Q^~_C~IrQ^RT7m zbArRE$HK-!3q6yFC}yd%a2P>PdAW$FdNcc;zh2XXgVCM2>WaahoPq3ir~9x%lZmg- zi2eQzTTSPsbWK#NUWZs33s`UJ$F9{hZE#ipy1?+g(|LA|(c45FXAqDA)F0jeD?aQo zYG2<^+14X?!?jmEO{&M8#z08l9%!9LBZLIa6o?Dazu$L2?@iSf$0RAlB3N;M%3mqB z43$W^dUsZf}Ir$-50oZO}x|(wapcg>*>!(v7 z%N2schF7{V4J9DW-73ELrw+|AP=~M#mEw|a?`YkmMh)~dbQWN zG>awNoZ>pV^_^%$Uo>OI$g-c^qwVkfk_=l%Ob{DWvy0Z?%+X`n_7a)}Y1&r%HmTF2 z$+W8hK6d*k(7{S)+2O=XAYUFUWROkk2t&LaOLZf-kcp*Evyf`$@9r+gLD#w;%if9{_p|C8m0X<3gaJ21 zY)wBRFt%1g%1wv%^>S!R5CsL%%vzt-g>~fHHi5o|U+_~xX!jio2OA0WI%mFLd_(K1 z)UJs6{z;u?0MbA0QH#QPUnyQHyo+60&0-7*!JGzKq{0 z&jJETc&Sk{ zUNbiQSL#8+CNtnqxHgGxPE$BGvX6;gaEjh%V?nPkC^3iuY}g6vqoGj=MnMx^u2>)cekACw*#_CQzs*ZZ*`bGglcF#gs-$L**5B#`XVPrXJ~dMvUy~lzf@~Y zVpVa3EQ8n&g2sP|lEr=zJayOOI8qln$`8k$KU%&>^uHgN&gbDqMf3g;cp%Y7|I1X= z_kt$tTKC2`nbXF|iwM3u#+|a9+w-kexYY6d=S2Z0RjL;|t6rF@8g0+l=Wkx6GT5=Y zQ;3e4nI9(75o}p0A2s@WB*R!zN$a!40#F4zCaWe+7>t~g|h={P60p`Jocb)sBuQJtr@4-u46bJS0 z%%%aNjG{&_$@q(~swuI=ajysgCss#;N{6cI_q%eyqMc&&d^#-|l@1>V3k7^vL&bQV zqbhJkOMpJ=pZ`ox;j~gk?B=hUARqA5Pxh_(zw0Jjzk4lBo!)ARFeRLQtsDMS_SD%J zDtx~ahDLa;BnGm>RXqm07LkdVX!5D;mzX+$$%^@x0N3Q?6h#PDA=&JwRSky`rMgfG zZ#?95qQu`XC9wtsnsjM7_6e^@`}5=H{c=KdKS>I)wjHX@LEG{f5`Ub(soxLnoia{0gFB%SC3WIJqRB^n8Y&Nx z{m=wz_5?Y%VMa?j#no{SJd#_&xfjCt4|DrGy+Ly<0BY=is));xl4})yOc%)*z2)ml zH5XBgY4`4i+O}X{LhOh&X0E>N)h8SL%q1A({*R}BwJiWKqsGmc){it`8kxgI2J|M^ zmDx&p7i?@?nWSc94iizEp4FIesnC&Ox%oD@X9lUUTG6nl*mocoR=7>45A%pJ3%Jdi zFHr<}`I`ws_Ol?DA6unm>YQ0cgPg+|qK9p`i^{(KG&7WeBj9pv$9h7VuZ_J3MqMOI zr?0yh?EU5pnX0oNY_T4E!m+m`-qnvqcIL-T>AAeu?YD=~@COeUD*P>}P}Qya3Al3O zGjqkz7n<(c3fq4PENr!kar1l9<0$4hr4Oc#-=9nO?UnOjsdtUV&i)kj$l5&#=ldcn zw&E)iKkZ$hB%cq7dFUjsGYNN+4t63U({wFO*m0&^Izny!Ily28Uk5$tZCZXam>e)?>xoG8wzSRicMFB%Ofsl^_7 zIwb@#o{hQHq1Ob?`kUa+@u?U({03j}3V8k`y8^)vS|{_r|K1Q(ld7}shrfCHHtE;` zzY-2`o?!{YDIxDpK#-k{C+#Ku%p978XqQ#Z&=q<}+Yv}WhVfjDa?cc0S+u$~tqq3q zp;eDD^V0ZR31JD9Z6ws~y_(a!0S{gy$!DX0SGNGTq{^vm-cT;~mj=O)HFUv}7QJlN z+EdRmh5y!0%{3&Nd;IL5;BsWB)`$p0pgEoSw};}mLYVUM%?1(zJ-@GOMA}CWKUzPL zfEOJy_2m~yP+R*Z)Qf`p4eE5gymR7Y#rphAwO#V1MqK-M_j+YVg9X+k(-Md``o3zm zw{Ap#oD!K3zj@M4?~ob6N;XeaXsli){`B;~$MX$up%tL6bXsc8U9vc-WAh+$0n10v z3sks`MnsrS#HA)1@p$6JPADuyPNSzfYVpIxp8YCVJ7tHyf0FIhLBc$$1ukM3Gwq39 zh${47TN1IE%a1NBLwleDLWai&IamcnB=igxk26`&-E`CGZ>67G{3?H&SW!yObx z>X~ClA~yVdI|g??z25aacw5Kfbbn)DqkFGB^tMjA_t!~}lj-D9O zw(MiUV(dpPoNw^WU=;&3k!D>*)sl zNNEY(jC>FH`B{d^N*o_+DgLP^^EbY1MGsS|;qv%&;MWH@gR6=3bauQs zFH|U&cdDysm&nl;tFa0Y^F+7!gmoNNhO^xFw22(~?~UUknSC!tUD)-Bjf7*i>;>t` zlQ*mNlX~zC*tHpH==)Xox%Q7pqg%6VOwp(Kvll|a@Zh`GP;O*IJ$arvYxny301rkw zcc#L7PB?v(=;3W;I>J1`Y@H)>jZ_MHqvf%(kkgxu*)vhKypg*uZr?A*>zv7^E{mFJ z>$l}k3)c`UR;=AToZ-rIV@PPx71pFC}iL66)^t|W-gDAzevn$kJs^Wcx{lax}(+YyHQOI2tCK; zyQX`R`}Aki$HqM5GY6(9cjG}2ep`z`@BW5OHt2~D7W=6ET&a8-*WDe9;!cYC{#2jc ziS$gVL*R!}{^ZpLl)b77zH0a|LsnKlL&KX_zY7#qdr< zkhJR08#`4uLUXQI-!=zji{M}XB%6tNs-OMRZ2j1Joa%xh9U{E6BE?x7Jq5z z+`eox$Rsfba-H_#nuQz2O}-*+h&8Zi%CDPGYEPLVK5|;Aqu>%WqX(c#v3y^id4Q}u z7b{)z+tB55SdAt`;xcgMIZNID?02eBj-)F+hL?Ki&#X&yR7I=FRMy1~H`K|%THkK= zG$lxjQb~Oxb|LkFnc104EEKs_`Dh{p>&1#Z#)8r{j_MI^8OlPqJ~W9Xn*EKO;Qqrg zXST%h_$cW(#lv2|3O=Eg$GT?>_3mq}Dwj>yL?uG^Mz?;Ixslq8@ZW_mj859qZevRk zA;(L0L<&pCGx&f4W(0Do7)06g3pOq|+{giWUL;bR9*_Bl_ zHx_=k%@#~=Isu7Bt*V)swQPM9a$SKGyGn_Bq=NPwGACd1v2>Nl`6Wi1emg^g6T~qAY@*uT6Kcwwd}qk z*OeZ~eZrfG$ien|_U?l+v7&a++q03y9<-;<&HU|Dvb)7RH)8jqqBb8BXvt7J75jeb zmsMnt-wAq?E6Z^;QKdau3RDGd3)@SjuMQwXk6#RYC+`9I@_&LCsH$1iZz8r1(BXVQ zN^>aJHk8(zuS$JBsiqr?g6YG<%@a&-swHjD9Y5E%?9!GXQ~^=L?kl}*Vcz#==`D9c ziS+kVhwvfTiLuuZM1x*C4`M&~BIrH0pe(Jl2k4^Gg2{@(AhcX~+00#35uYe=pr@d> zzG|)QYKo3sTq}#xmUH#?a*I%f9r&g?4$*lD$kRXZ#QGpi;V*iCYYPTtI25`EZC2`) zGPjx?U0D7F%k4#|Y7uf{nT83KM%9%rSR5l4`4E&ye?Kjqd;qWeq1LJG{8C5`Nb-fx z;Tw$!(Aw~<#n~PBrMT`|d~9P;`#SXD-hu8Fdes^yR;{U95s>xKx+s`$lY#cF16!d8 zc5c}VA{G}AnWmi2t^i&Z=#kL-uKm{@T}hPfwD%JAk{dw3{#U?mr-Bwlq6{m6P*99~ zZ~Tq4dy)Zt*MakF2wJqz2NitBDTxF_!20+SZ>qgL$9wG9afTCh-S zSf&Ic?!MnxIZT{M3|#mBhFzaS_M~h0LF!E;qJWc*ga}3f!d?% zLKP@=SPW@UebY=HQ@W!PtLx->U zcIcHtS^9?L8X7JF?{3hp_&Lxnf3qF$AVDg3zvTMVJY3`Z>{J&VA729F(N>5VI!wk} z245Rnw$G=ij|duBd&gYOcBSlx@Ia^=tq@ucF{>3r;!%@U2rUO4Ev_STsZ529(ZFcu z!k&Slg4_0Q-i?zk(cKDi8@|O2IAZjrJxqD$gVdiaAOZ(q?bWi_Npq#CNdci5Z7dw_ zK_h;r0FlpP7{D+0et(-fvg_|ZmUo{|zW2J`uGRj7fsV>s1yp5Qi3V}yLc&1;k_Xq; z$Hm_W9?CfAvvTwD=i%lRWz5Q(2oeu3;%BdqErBOrzt$Fy9E9*PFb(3fUA=2Z-3(6k zY=tCZ2{gaFUB5jWkqJ{?I5xfMwy(Z4lyAHK_dY1%30etN(07^Ft%&b>5HI%zdV5D| zNknSSQQ!aGf1-hDBfha`3y24?1-CmApGxf5`To!5-O$jWPxDo&uR)Dgo);?mO5`aT zODFXk_275^s2lMho<4O0{OH(vU<%+-^2Lu)IKJ`1hJ4~d1o6_3v)^Z;!^1sE-+KYJ z1i?`3HPv%gW!7qOVYSlgeF2KvD}DL4LCXWhL!xkq-QXh81b4U@-~IQJzf(Wd3Nw{#4*Pcs4|mo~mRC)Ubg2XQ>retHB0HnQhkCL-M)41=MeTzs zQKdH0MWF>22qo~N7{We6Pn~kBhx`BUOXInP?~qviWO2*0)nRwwHOIP zX>?)C1@!)+lxNi>ZrD;Jr`E8?jx^&gxdc5R|@vKvJZY44N54l6%1P;*-^@D zyh%rXiQ-{HZOPF!*;jD8R9y( z1fe`=S*{zQ2B;YU!I^CkJRn=|B}KwoMXgc>R*eaW?Mleku3cK;?vH$R2;5*$U{qWN z9uPAtRw!40i1Muug6ciIAmAn|Xk$P4bu9#Wnk-Uvdd&sXMfE0<7Qn2vS7h51-RH@V zPa%2?=y4ffZ zl{f)`ys@)F$6vK6<@~fts2w2}7QU9NwO8tynh_AM6jg$Cbk^VK&y@-Ui*;coBG!PJ zD7=RDEa)X_Oh5|F0MP;&0%qQ@*RHR@mN#x#u)r^+fZ=@GX#RGnDM|^XQx$u}a^>cA zP?A4saDRUvG&1wnOi}hr_?CPIqT-y0;;;JB@C#504h#==1p>v*n(?gIHGVD;Ty$x1 zStPZ#CW4~+^S5jVTKLG!I{+{hM1W^4ODL~)Jk|;x5puQFlBHlyg%0F9>K!*$O;x6o zeiUI;ko$W&oRE4z--Y5+RQhe;rBgw0zE5AA`n`AA`KD!pwqFrlL@UR<2*{Urej5hD zk9332*C&PCfOD|bom~ri$HJrFHLZFgSd1Nk$JN0TFO3hhFZ7QdANNgMU1E}P(OQfa)UacCIc{-Y^p!yJSha9z} zb|?Pq{ekx4-%qX8e-v^b;JYo#`jBzySq$Vk^LOB<5fi$V5m=(W1S_dbhE3aa#$;=h_&%fKQRRz4&sM`0c@aMpa*yary3zZ-rSxfdd`IpXu> zwE7=6mcx(7e=DnaSf)4YU7$-j>~>qr?*oi6=RJ<7ps=>wyTzZU{#F$~hqxEB<~L8xlK>R#$o<@ZyYl0K*+mg0K#wUO1ko_=uR zg4p6~Re~kebJUQ2ka!d-YP2jP1T{hw#pB87@4|$&92%K&#Dgr4XD5CYT~*l+Y0D}y z=_3aZ4sLfXARU%pDl-2Jo5Vw?wbPxtR4vo|qC4u3(_p<1ZSf&@&$>7$h=gsed15wd znm+f11oX!u(TD!7|2tJ1iK-$X`$;@d9ihtNQ4Dy9@3Pkn0obVrO8Z)B$%Un;F1(Xc zhM)+9>fI8x*<6-nkvto_r(rFTau*rZu_=rdNZRg1y5gFBm?Gd#KSPMzb*yLkH>1TtYB)I zK3+jrsH)di;b3xWZKEfAsBf9C;Ta$-qsMDE59 zE(;Y==Aaq_1?3IhC;Ka(FIlApGUOdF&zOnaUuHro2S&E^+1*I#?@|KjwG{s#gyLeh z8;wFyDAh~grQrH_*xmaZJwFYBR&Nsu<8i~4D3N&OdY_7>l$5G_`ozSX`zUyxk4hz> z6eQVx%Y_T8#ss8<^VKOvmQvgi9u9X|VC;kZpIt(F#Ys!6kRUvXf#`a{m{Q+B_>qcR zKh+Ts=}nb+MUXJm)Bi;1RP=nBBeW8=0!ue~}7ot+tJswt~O)3u_-qqWTk z=g&;S^wezeGGvXlMlTXK6PjvLs>gstgxpxsK(yBf_QG0Otq?Qy^9dR&;>ZkRWv}YJrhg&f6AFCQ}nJeC&d4`LuPUX4k2v zh{d?9vaxJs2fT9lG@Lm(K678q1<#A5*19y5isrbnq_SC;9nymAt$>{VSyCwT<|dYL zv*PWL=dG1VCSIA~a*hcuLUxC&91YRPeMSAUp7_bvY_%?Ry?`3i4|nU5)Y_ZQz~@t8 z#i~xU1jbfL9bZYnEPRb)N5^n5p9CFWn}mg|o&>%J zdOs^xC7T73wd7S(#HA}2*unJIkBq{J*T&E)LF;2h{^xj=!Yf_4qe_KDgt{Np0{C9= za~7}4sxvVV;$3INneA=hdnDUDT$;)8Mkvzz_8K)r!*%1$L^YEpq|EM#2$B10Xn3#- z&wI+if>PImvJ&~1_^d@HjdMY$Q8Y-#6-XSexMqocZM&;bNTx7o9ca;E%^McM(iN3$ z)<^rN*C8u|1dHB7OX{`PT(t;AMFTxhn!73=D=+JUAihRRs}Cl|3de#>kBSJP!U9q& zSji@$MSs?`rmVqp;Nhb?z%^;VA(FM%)V4-~w!U3A8PCzwrxaX|_?d7)Ux~b*x(5g%`9KVNnby(= z0##844aFLOIzutyoo=_a7sCldmltzLrHp`TwZ&rwk#q}ca0{9ks9v^ z{cc~ff$!M(7+TKNTVP9=mG9VFGXi3G6azUG9t&;h>$h)rL?oE@@Ac0i6p&!%w)hhd z(~qmjudS7(j|t&uJbpkLTK%0wim$sr^<5Q0PEA8KX%X`_al42}T1&R2p@?~_^{HkC zRw5B!ht9A^U2SYA;ln=*ga_MX_no&*LOp>o3h{SOtlPZx&4(eNyRZ34Cu;dNeE+A* z`_GR1g1>e1;aQKNOB-UA4u5^(_ICp$&z)&JhnB7Mb*ZAZGSbSS;sRoK;Ej9-s)aQ@ z+3(yQlOn84!PscLE!^#!0$Ly{Z3Y2@&t2PxKWa}z`g#K*DPYCAu+C1lh8{h*Wb3=v zABB43{G`I`J@xVTJTTA8C?K>1XZnwK@c6Qwv`s*{c=F{dILyXV zM_2ZqkGJ$fjbWLIf{RK0?08_CW$CU>`0VX!2 zZDdvzi!KvzYP|F$3>^~S$FU=t(D9*P5yKCoc zESYMVE)MjA6Mm(1W;C!z~sK8Zp!1Qn(x>>#gdK#Uxz zjOXJ?0ZBwJ&Xh(Y$yDK#bO$fLK=H@6^qSKVN8~$Tln45Xrh8D(rJE zYAOicXqJYDX}m?_#sZOMZMmWVwN^bK%9fdmtlbvRD{!- z5Kay3xr04^YOVI5;Tui zUUgFkQjH_N@&Y1_Ak+Xf8!!!T2l<$h6d^K&YfV5*(_MGkg&pn(9>t?USgDZzmV{!K zrNQxxinD650j>VR$G&BhJ|U_R0a3g;T)f(kL%ML( zQ|447(Cu;pQfmT2*-+hqq?=}Da`nv0M!E=*PqmhiE?ow1SW#Oiwu2^I#HKuIURdiyOxN|ERp-i; z?kwF}v_Kq+5fH1uLSymN1oSvgSet>Sh=CAff!J}7SpEaRnL)TAnkGVI-PDqZP}4d$ zR>&Jxdb<#lR}>7Q7qQA;Gf?S7lw6Pts}PidRVz&t3A;|CM3=J>oBh1;MC+`-$rC|a zWV1kO)q*dFioX-nQfnp$ab#*a#8VbXcS~}BnlM`DY-hO)q(?H`V9|;40@71aZwEs& zQMh`1acBMI@t3+#6XPxP^KfRTP?h+S_0N zoxB~{;vZfeuc}%*lctIbh$==!agY~|d+Rqf z;#01+d&6>f?uBY*kmQ0~R$h0$t#xQ^lqw?KUf!_6o%QOqfc)%KdF#JKCzBIBXONG^ z-5u9PeD1_DA!d&sBu=kPmRDQi5h17oHPH)8dX$1#$n_MOUY2xYp+GoAKXee$eSYPl z_26cvkxnF$IuOgWKwdq&0D4!P0$-~)12y@b>ANkoHprE$On9!wIH`^wx!tcwYb4dDp+WnK0a;VUTLP)stwy7<6^X@|1 zS_$v^s2MR!s+RFtyjgM=UFSSqphq6Vcej6W+jJ0Ie2y%MGV*Ms<9_OQv3k+i-LYvi zNcW8;TJE1&$ySI?yk!Tm6rs`rPn)5Es0jh_st8I|m0|qhaxQdFLUAG9@veoF6YIJc z#==s-H|+aO-@8#jW-KMg%~go**2oaP*Y44pXdgJ7$D zAeN0C2Qg!yD)~Er-ncpf|NMitgN0U(#6UHj09COlo%KM{UfZ@jih))V^!YUuo%{kC ziy07)c~=iZ!ettkD?vJQVjO~RD8D_7X?b%FwYIhoefB^9WT?<~(_j8=VI_>6g|;)} zl;ZB)cRMwf7{2)p<8+RfBp`HtrYsP7N!x`-cfI|YT_7em;t^I*K%5G52R!$OAAa)x z^q=|k8$~1{H%y+jf|itzeCn}>`ZJ%qbIV?cg~Rwd(>t@qGErio`8qn-gb}Z?}y**xdulVW##~K++2m$M&ESBk$qdf{Lcg1 zx7@HL5luFrn+_+SeNkyX+B?=B*>mz$I^kM(mnuS;7_muo`{Wl8ii3RNgXivS`S3s} z*Eap{{=A6G=-0u66QJlIAbu585LhfUvp@0r7+l(ue`U|JCnlhMfp`7dx)!$DOVVC> z{j$8`MN8J!l0Vxma(_RBL!lrJV||6TO~l5*D{%0aX2f_H&&w_er3Jy$y#$)3g=q<& zD2Sk&=Vn?UnwqS$h)WvbtYB=~l8Op@p*E;WJL@VG63UutcBzs;!AW zYx@$50?7ghqZM-U_3X|x#`wEYr1NQTio`+z3 z+6dkHl^4GWwLyajhzq=158ZO-$rs|0=(vfY$$&i|YQ|ijZ_HI;VAACiKC6eEdmJ}b zDc~TvdgI`5c=B9q$g9eB$Bk7G1@54kWv!q)bs(wL|4M-d@yoAS0;kbU^!(GuA@tMp zaQ@7seWAho@H5BZ9NxYPEd{Tkr=S3T@}L`wAykL)W}%^-)WTAe0D+ki()&JHoVjg96IxLeGm%WE&5xA&DLgOB!8d zec<`q4^2kXRHCO7jcO0ZqgL1w##;LOO<#L)82y>E6gx6jSU~VBvd?T9^zk@+oo>^> zU#bOx`{+$w?-@ViUEx)H%GG+Pec_jfgHR(lF_3cWJjji8ZSM;EHVxo3nA-z7S^%`( zIEjawLA+Qf_Hxw?%V5#cwxn>NrQ^IVarxCt(E9MM*`8OEFes3{Lz9eH!nOeVpa5RF zukf6bu_0GAA(F%!N^y%Y4G?=+fbTYqy2z$Wqvu~?@@%+W-86~CkQj8%4LtQ;P zhQj#6?DNtJadR@GMYZiHzJ9jHq-olp7d$|7SqI{E#VuJQinwDz>1GQ5dzJgkrusxn}H(W)PE4Fo{W1& zq_5z>K6!r5xhz#h*cqHUbU=L4?2Jbf_d{(Ff+|pP0Z|k&Txc5)&2QIYMOH|3!kQ5c z3a)2!V-=_^={g0`Al*pB#jJItCoh!d#%gbiZ=h>6pbe6Mcx8noB4Ibd^sa@gF1Z8d z9SI%EDSIss1_eZ|rhw#j8OVS7UAo!=E+!I*$S8P4_+(W2+x30&pWcgcC0WwypW#!p z(!wRWfrjXYX4=UidH0!_eMRmoUqrWq7pcd99Cm0OP@9Pz5S}hHm|fw+}&; zG6F=Aue0uNhi8kM6noPDq`|vTHkK1dS$?%PjKA81b3e_Rj9Br-U8W^%x7xbD8>T?| zkXKd+1=HP})QYNak$bnme1ZY=kS3y|%^9Ja%R>EV!QNnAt%?2@gWE&79*ZWekAlJT z1X{aZ1<&a`5&}YaJ{&lE_AFWsvLx#xGcKtF#6h{Yk6dki`JNlW*hi-O3eU@dbvOZ~ z+t>HMICmV$hR^gYi_yh$2pG^;2B8X6_6+$LNOFszpUPZ8iI9%KIpD>@$q{2uZ7k!1c zO-#E=+9(JO{A7I?ajT#H4n*(_lVSrDNrv@-lOz~k_t(Rr3lq3Qncw=Dx-i#$D${G5>Pye@moB|(&8fRm2Rxy-*Uwqoi8%&p=^f|XN zzBj81o(BJ7tq}CBZXi>gSU2$eAkMzR7mj(;OUSJif(QD}l)K{MeaTAaAb3E5URWU! zi9gcO5g3qC>;lH-6903s%=a?P7cotxN}PhR4==3`8u+Cp!xTKHzYQ%x*2vmo_L0^4 z@G1XF*U<|t!n8zA0U^sHOZ$?cb$|O}VT)t_kW!KTP$jB2#Z$zc`0q%zhYZ7`^*}%g zL77OHJ7`Uu%l-ZoAvegKefI5GL?6g}JahI_`1PUdY$!ByP#Xs9v4e;c-kg+ft&pk7 z$QD_>-^{aetXov!-Qmo%A(8|D@$V0}>Lm6z5B z9ryk=ZIFWJa(^GjKkODiMY*uDoPRPl9kGuo#UCX>dTXxdj-Q=#-s9nD*7Br=j*WqP zKKUyTLzSqSfS^eg!ogvalyU$7s(uo<#SW(9kC1*JSs~6!hFR!3CMNsnMm7tkl)>MU zTAy>9+-lNeD{ZI1 zjK=H)m|(W&lJyZ8oBdg|fHFk2A5aRq6yQ-BZ;s>=JQl>Dh{f)ODpFM^Gl|GOpZ*mZ z5H{h5r8GG5r_`XBn7cAFvc^v5K1nU1^f|Y2M)RkckE0(KibJ`>smHKI34{Ao;a>cH zvO`u#p%&X1gzM5Q*zUN~qI$)CCff0SG&eTk@iEuhXan?toBOO9T99Zykc5!CR(||P zp#CvZxX@S1bf0dmEeq|CWDv;Za4M zUHd}$=S5{x3Fr%@)nhnT2%T77t-bE5I$c;h!(muw-%f}ict9%tF+wphJewcH&$fDUQgE&GJ?7Hifc%%a7_RFIcJX2et2_JQ2b{#+`%OlJBJg;{I+y2eI)iy;H=vf6R zi}fM#-R!BAR9!qCMpH56z3B7Zj#kH-t)Kptc}Y~7_jc}dB79==Ztw!j!*pSEW%WPt z>(}0eXYEY2I>kc#ZCO+3`cjP+t}QJI@`RhUHhbL%H30$pT4CkAmKsyNd%_AvoZ-Js`jQ(TyMfXYd4cw~U}*ta1H> zqv-qY92)lHj5HBT*e%_gsXm0n!-yGp+-MM;(yBVqiXD3$hi%wh$o8bbxmQ)^_>G!~4c5e&=vjWW$Mq(r0u=b4Im9Ryk}IB}fVRcC?N|)yk5eix4gT)A z=*CLlrem=(ne8>7kzf zp*hF5429?_2p%BQVj%LLJ}4~1+=ln%bsKpZICorE6#GcGK2DFv1=^pRUGL{qazE*) zx{y=hSTdf{KLqOd^yX~hF&#GMSRWFUt=Bv_9D;H%XrH2B(?&N~ptx%qTLn1LJ`ZpC z%8OJSI4dYcv5;)l=|YG*oVF%T+#++EqFh-SZmjfu(mu-Qw>1L=)MFDas+<+r`AgRy zDX9Y33()I@Z&eQo=p4F$dE{)&z*cH)DH{~IO`Fp683r@Q)Z9p(skuU;G8CA zj_XR*l#A8}S_@Gv)`hXff(48Oof}!2nM$FXC*LkV^Dzy!9Vncu;5<RTGfO*I&c&7QQD6cm}+3UD0uT(K?r*zyT><~BA<%$s7sNKTMK6ea-{i%J@^T}WAMU}c6 zS5|ks(dF06pY`L6uIL^;jvI^8d1)|pI`m4@vRyol5?m)SB&)-5(W!cJAuY6cAF&$= zWxzySFI-nt-{izA{H@x^`Y$~<l~@)A3R+blj%J z1Z8wOHY*+Z>{&DK;QcBWe) zl)d5C#qVX?A07AwS1-h1dZraZ2e+nQ4ARqnybuv8Fw7SZxoX82T()QuN`%hPJ>|@v z(yb68Q$%cQ1mhw`9mGcH{gG(cf$}s5rf?AiDRy0^BcuvVAIgWj)=*q72eYS}yfsu$Uv!8FIpTiV1-+JTU3|A)J zq^fjOmK;-|aqg3Y+p5;4#0@nQM8^Y{eETIXCa&zNRQw~8Oc9~LTVi%FyD!rUx#{7< z4_Q)VojH&RUnr=a%?f$r!-xA-^`hI(D-p5dA$ew(@4V@CC?OU?zw6*92X~ZZC6X0l z>Dqzx{#cnJLXZ_g19L43i6b23uF6bD&J+*44CIP^q(igYfKF~;S?c#2djHS8N?CTn zd>h%-=96ckTxilX`&gADi>_EaYhXS56lE@}{rUDo=S{BEc%jQLt$*mbnSE05dF60r}s9JBD!>rrB08XFP4Y z>yzKuR@I`KbP=JT-G$dFzNvM8t`Q z#HMFoT7KFU-KLOFPWA^b; z4kRAwgTA5)s^U3qNdV#(TW(r!*i2NcI_?nAp zg65gx0m%e`U77KQ(L;&6)(4#@X_;FY;Q45pvjr)O^>N`?)D{u^qA%c4aZ@$K!+}IZ z*ZtdR!klNUvzuj-YaiW{>;L!Q_L^)VUy0I*vgzNvy9j7|ICl~bLe|9XBU z#j#dXO15RED~d-b-LO&_BWFI{CoGY86i>6h%*Sv5NoHl`8A3^LXwaqs+{@M|wxuJJ z??L8U4q2pJR%({kI1)yd|KShaw|mK;zkfeOhllaFq<;M3t(j}t(L6xP?X?I)jjD4H167igQ-eQx#&foJ;P zC?e<%bOa=PA`a7bwYfY(*3W$QxZ1g8FT}#(K722m@rb;U?h|&PT^XJR`EV^|TxFvs z1tgvAC?+@z_A2(k1mSAMI*MWc=H9MAAh8?2%q?x*8gwrA+4q}LZtUrQdMI=IgTLF` z8y!tNDkKyuBB98%zAm$+#mMfyu5(YHeH6#6b?NteAtHK97x>$k6xs~WL%6rCqxC`Y zYoCK^Krx|Hr;I+K%ACm;>d$<)Aj?^25{b+q`f(kLY zcZ;Z&cu;ZQh2xRAD*|fbf@v7*GiUze|EEtxWPB$o=p3u4ka%<~@o&B6!Dr^Up^kp) zEdnBO+xl?CLvK;{tl#_G4q(cLdtrG9b?}v7u9-L&A4yfUQY>Vn%y2mo6hqO_+|Cvg zp_3$6Oa#3m+cBU%XP2 zO;P1Kx`})NAE-VxGuDt3)SBmWJr<9~Ntj&ur0Mm@RpkW9^NI)Qol?1Fe2WneTKc#g z@u1`F#7h%%#e)X>#eq9B#e)LpQ;BF#(c*z(l#td<*~Ej^vQdqAZ%RDm#M$_W1hJ9D z!#h|&Jcdq;Tfh3^n(=eSuCY^bsS5E>dQ-%7$XA>&*pkaqg4>3Je2G4 z8PUMkaVZ?mYYutky2_*|@raIN+@tiOQ4$S0-ZBULifg(}zfiy& zV;;BL2`yO&y?8`e27KKXk28rq{^;~g+!)bYSU@TSStFC9u{B{75j-2W=ict65Q#{( z6kkU~vUJ`JwzVa89>;)VChPugc&KBE@19H%vD1x@MapWz7@In04=x3;MTAaip{eJ4un@xylUwC{U#8~5;fVsm@cisYK zMBY7dJ~29e*4TLKKfbVo;~n0^0#ZRp9B%ylp*81E#)b=R_r||};U+Y%=cHdc%@;F+ zkmSk&%2q+sKa*=7e0Ct4h!8Y8BvC3@0iOdJT-=BV9$61e2YiHy3Y=?)loq>h+bnnv*m^@iKuyBW-y${%&M|eW=->^<*{EL5n19a`2zJs`ywB7 zEf16wVE4Bz&byjn3Yw|!YQ>A#Isld8{AX{0L`>O^LyIR%TjF~@xa<#pcvHS@&VQ;; zBt-m(n?`>wkSO(Ami^%mJ#AAFLARAfBJLtpw^Z>UYnB4#xz?x27vQGJ2rdxT;q ze*~TTbJa3Yd=Fi;yHJQ~Wp%)&hb@pAWBtJM1LV^31r$n8oi+WUlj_tf7X#vyUMf`e z(W5YwbtEU>uwfWCWs9*8WQ81iVLZ7KT#;@qa%Z^-tkd8{mdM1z9~QJYP$gJ+;q4IB z{QE$7vn+rcYbL7N8D8GZY|;AgQatQMn7;JEii!uhtLV5Pt0Sj)V1Qfi)UpP+2|Mng zs9$%)!*0or$9ER-pz~lq74EWl)D|otH3+%1ZW?%gldjX+AF~I4TGcQkt11|1i9a;< zz%Pkh`$`Iu$l31R7N!#1T5hwm@a*qb%;?v{`$FBc+MU;s_0>sL@0Rppa3O18sL)1w z3l3^R6x_}gE|UPf20Z6k( zD5yv$@QlA%h|Mu`@`2IaeOdRD6r{shV=U?Wq~PbV!{fG)xV1=JiU_^vW?jOw;ZUfD z(ks2Dd&dw&eLhcu(3WLBR%n|g)Kk#(qyw}prsq}O9ewjd5S|M4=m6*vg1ZZCUre2c zOX0BJ26fh5*t2kbt{BD1-F-sPqE!;?epODqBO_QY1MS-Wu4Vd77yxIhqekHvNS$!_ zzxVdW;^x;AF)IjZzgv17Lx9}n(|!FknC9Z;KX}vT(bpy)$QENshl&{k9h&PHiOY(0 zB9ur>-PzT;{Gj-)zXGp0^_jQq&sSJjkRsZMTzK#;B9VX#vY3Lx3@l3yuKc4Py&K9z z{?i9Vc*^WW@t_tU!9v@+ZBIhNF@82?5Auapza*EHqG|WsJdnE`dh$DycCnx>N~h+m zrPj!|V4wzoxZIzbEC^vd?BGtBSH<(8AamPsICkSt7($ zpMG+XT1en5@j=K_n@zJpCq_bkX}V1(d@g7(iiD39T-6W>>U!I=Q?ZF1mB`R4Hl;Tc zD^Gn#CUI)UXUQQb9qCh{V0Kg?DAOuBY2B?QEstQnZRz)kj-Spe9`rlg#})qWuRS+b z$l|bf>u*)}>XVa~=M#_fpY0QdVQnMv$da{1Zm*H{Zhgy}{{Ap$PSpu)fz&C_eYkf^ zB4XZ`Zjm@yT5c>6g4&<>1NuYpsMQB9j|FOtf+7a!UdY~RMa9QDFR`x+K^a;?*LJmB zvPz1L{ooa+Kl7H+60HJKgdNNO@Nrizld`kF%50iQ@ubO-qe2KtufMI(_D+}OZ0o&{ zXi(Pz5{`JpENE>wZvihuoy%KxWh)L$hb#{g56e<^Q>{q4aFE5(x5Gp8g?M`-p^N_Z1@~1c`{RRkcOM*P@aO z!@j>55dm^(0c`4OYaQ{bht|nYy}2Jp)q(-!EJy|7H!b~xr(D&P$o}`j3H|swRTs}f zY3yD82R|%nofK*p6P}u;c*jEkgedLB+ob`lH{3K9(pU}pxe3%xvEhA5`y#!@)> z$yi8fLAps*%@wfV*b>UKsqjZ3(Yk8kX>rw~_{cW!W z_qlnWg*f)-Z|>Ff+*xP2zz;jR><@mJwSi(T%7}wd@O(|NYkt^I#9;a4`PfE$$6qhB z1g)8%MXWG}ar$*gM2#7-$le+x|I5;#kH7IyWYTms=u<)8tI_`uE$wpW*qQiFv^vPu z6^>3@djiqPJzN=H|FD2GAP0ZDw=WSjQ3%9_mJV&$-?iYLo?Sz(Pga~U21AF&`!r3t z3kSx&lslv3V+8}NcEz@{^eo*@VeeSg)Uc{6`@)CM?^-uF?8%@~QZT)QPPlG50(-i37Q61gy^R$8pO98?!OiiVP7vyTN}_Rw81hG zy<~l+Z|-id7n3PSFjP&1qy~r1YvD#ExI`eZhGjst-v%SY=JOE zLlzDgW|v`!UL0sTL0GFbO?1U07u_Ph7KMD>Aq}k#Da30=+z6qIEd=Mn!_{zI&>~wc ziA2Hn!D*DVkW*@5tBpdHj~4T^Qr%bicS=QsBVC~%9_mFaBq%Kr#NXvIBVl%_X}=HN zMr%;mzmLCF2g8s@g(5?0t9qzwX;&z7!7_%)1q%q%uoUUWk{Hk~I<1{tHAg##x?7CI z5w~#=uWCOSX1?J%5T;>~QtorVacS*DDCpmsfN&ArfN71GZvewI04yL(!xGhfgTh^d zMKm5tZ;a^IVnr1oPDgal+qN^ze82+2G%P(khTK~Qic+$GEa>)2VJfZy@aVpJgkua$ zqrd{fG&t@utD;j{>6u_h`ydu@^?Y_;F%1O^2-DC+H2*-sjWGUEj#c2qLEN-uchl*Y zVd@1I5T>CaH&&s6y_on#F8rDwKoj}*gF@wX>Mp~~CoCXL!y~P{0dlE#Dz1wxbFrX1 zCS^2lv1VC;dWNY*SU{MDM*%f=d_qEK$wz)r_P{Q-4uQV~1ws?KU14Pe>KUdMVF6(p z9!n;23W(zKZaG=ivcNK|thFbC&a@6A1Ps$aa4#&T;R#$92ui~Otcjk5QnqJqppam4a)(s5PK(GbEG(2d01cf3%^=tNJ z1`pDAGid=8rZss$__Sc=+rVH<5E!O`U<-t427+1clOV+qcuk8bC5WtUDn*6Wz%UI2 z3kcKjp!Jb;;5HTSEf7GLl_emQ?IBBwwZJe91Pch$@JNw;oes^&KG2uN#3bluc3~>C zemTR`8@!+t)6mHM{SeW9oGmR%w*LITS7ZVedHk1!G=!DyHCv2`A~p^I!!!bHfiMkC z6rKp?cqjxFLJDD5xI@G^1gJHaQJ37`2Mp5)uz)ZP zOL%CwD_8NJw4h?a>?zC2S^bW5aVjs&&04yL(BNNQ`Sa@j2^8h=EQY_Z_?Wi0Q0xhpTzD6oJq4T*~kEUFjZIsWuJgjZQn^6-0MQaz0p zhS-vCJG4%MoQcIW0^E(4X-G!*Z|?GIvC%@?VK99lp0MusYg)+iThL~hKt3op9dqp% z%J48uCE`LeG%#XDuh8U9JgM#|__Bsv)3Wh9Az+v~hAj}LA<374m5z{di(eB*B$yYJ zn0$1~RCb3U&?EP6&ig!ha5Ib@IM5xPjQ7*?Ofzvo(d4r(#KVR&v6x1H1%zox@?~IU z-98!g?!yye8w$#+Q7yhRmxxS%{~aPS8Q<rT0{y1 z=o_GP1PMb@M7GS{H^xi^SST8DHGPO2GqftSZ^{d~f z=$hCL-XQ#Xi*4aJ@10@l4GkEk#wawHwzRa+fIjE`2mjBf#7AyB-Xr~Ys} zeag;OT)lWqyzfR>>sjuigl&`J>^IwEXNRJ)10srogbUF!KQ)bxc*r6brHM8YAXF8gO*NpcB@RA4VGD<++Yn6u-7sQLGKP^9_{}4u|O} z*#Cc@NLnDPP(U_c{nGbZTPypTNC+>Fn5Ouq6*CVFzH)8YvSI@+ zSJ(dJkN^=DmYp!-gToUG5L%R~()G@$ZHQ5BD6JMi<$+$ric&_da1;DCG8H zAz?~^j~b?E9O1|m4Tq&2)9{;XU!Z{YM{&!$MXjw%?gA2tSQKaK0(N}v$y@%4?pxYE z4ez<;@O>z1JNnY?{&PHSVkCWXwJpJ7_4ikbI! zLjmD&g2@VJVKF%g1OlR%x(&*fs-{g#!V!-_wmJ#2BEpJ*?gG1z{(uWe&@aw7-avgTMnc9F8^8|C^WQY`lw9Ch=fGpFs!5{MDY`!e|B7@79bH} zON7aUXBJFO{^*bXs3B4Mgv z#^E&=n@XX}51N+vAimc@ND7|qIwKL8uChfEiHhfdVM>545XLiNae23i{(aq_j5|1G zA~OSFD$B|F+j+dTt#GWuf#Msn$i?T{dlfK**WWxdX+8Y47jLr#Vf$O23cA@}bP7C! z61u3zW4nv=-f2r7c<7log)!*9@6M|p?^@WR-k~b;qmW$3T{xLwWR2)9v$`x3!qZd9 z?~xLyoQwT;YO3g1HqQO@I)*841coUA77!*Ul!dcv*REo$5NV+sD;9;~5QW8q1cTgF z6gP10BH=JCuY z`;8k9ZcxB{KnSrGU0Z_0lJ@7)tu^yKIw{E)-&pP^DMEAt!;}EKu$Y__o5CrjLh*pi z=g52)ayw;YL1pYSDIDb1NfVC|Q!2NA?#Wx;_JyZ&XAj|iL%ANKK|GE^XG%B<9zkND z2y2uCG+#%05`@K_zBz+7rP9*p`G*(Qt+(A<_&Mo*`hM)>fC7StuOGJEcm=-mjHgM% zQtpQWVElvAd6_wI8ZT22DW!00iEO>$sh~e#kt+rdE-^+eH%wEEDPV;yp@xO7gy^yJ zWAQP^-Sm;0pLkaHiM8aav0W`PIT#zM0dtnS3SiIKDeF(2=jMAKtu5B8{+48_Y&tZ6 zN0V+aiTheyXkTuj8jvklJ>KnaQ_j)nXu;Q3)U2;9(cPB!b^WRVzj^J!V8CzPhgQ^G zkan&*slQ~A(CgSic-(IyCWk-w^sVdZeY_jpVvD0$)B ztvrIF^%&$KB_1pw%p6!i7*`Y{BE|B%Z~QUUjsy#AHey)vfBwxgw>|{8TRsRLvTDJYc*j*QeNTa8!$lh46_LCq@kqV)$mgEAuQO?`>s87H^xW)1d`uT?%zNr1q3`IRY+*>85kxD?80JPLGCO{<4m==@DvPY?1Sus zluV|(id|?a++2)!5Ew$(V_&Cc=!P-Nnh8l=E9kl@ma|iBG8R>4+)rd3IM$RSTzGN) zIl>V?3=H42FA`PWM%iVl{bv8Jgfa*oK)*3r9Vr(kiwBbvwm_It5je@|D8vV^eZ0%ps{AERqVJyd00!SJRr{dRt)vn^Ju93s1f2VJHK(IGAE#0b$BTkT0lG?kz8% zc!+kzi^L77(UU$a^f$m&+`N7^K6(z%UHMFbu;m48t%C!!QiPFbu;m f48t%CQ}6u$v?%FKgtk=g00000NkvXXu0mjf0(Prw literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1@3x.png b/Example/RHViewStateKit/Images.xcassets/ic-internal-error.imageset/022-workout 1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..63f7eb30fdfaaf8c166acecbcfa68cd22585ef10 GIT binary patch literal 49090 zcma%ibyO8!)acM%mlWxc1_?=#mJ+4!r9(iv8xfEOC8WD0E?h#oQ@XoDkVYh=;SIm< zd++bZS}Ybb=j^k)&Yp19xAJ({l-K|O;3+D|ssjKr?C}>99emPik-P-{!E#j4aRC5& z;m2PjxkO%L@F9|my1X=i7@^t)|3UpAr6L6YmC-o2CTIZA233@m()2_+Xu(RS+BVp} z^DDVdl~IpoQcmPt^E9iDYP{pZ2wo`49%?EmYhB7hEDry}CLU)DuAZlFFHqBub0rd8rPnSbr8uH^MF z!;+Z{E}_HZ1c0Lc@%42xCYrWcI?890OH$HIX|EIpoKi;rEQ*SxJOd=(p#*?DV1{X0 zjqkL43qza6Y+&SaX|Pi=Qy~VjKZFwkz?rc8pZfQ*6h94fWE1ie6~kc%*`jTs03eP- z#R)<%O#l+~%&~dd8*q1cCj{yk#Q|QHt$B|qQk8hlWmp|#3Y~{ z8F1y&$DjK3x8*xK1_YENCMp?_&0#XD6xl+^3wg#B^`d z-OzSBNqyYh=wHy?m=I0!YE2gOhBy^7oW=!}U> z2&_u=Q3GR6!o&JbjxFyp1Ww4^%V%Dm^u0ZaEsl+4GXKH2w-FX|@{Bn-q<=RxLdnuf zod$N-$9O>uw3E|S004C`u~X0Ik}N&eFyjzW#p-DS4+RlTMkSI%RlgpC#O#x(Y7*1Y zu`U8y2Ef1YQR1Qz@9UP`Wfv@a+7Vi9qg(AtQ$7oY-P06a{#)wid}8sE&B{s*U6nFh zgy)n#AvC^c021&Lv7k|aN4MSZ|V&!%Be6%21U3&(9+_e7L5S{xi zBTzR`!3{|C9)P60C_TgdMs zz!UXRiFYdFnoQMtHU|FC`Mj`K3OvxZN*UrlpCe+=ln(el5DTaEJ(EHPs&W5YJZ@Tv zVTR(=gYqO2-X2X6oJ{3?xz5|??|NWF&(Vo%@?s%}tf5@Rhn4EdEqM6_@fQM38X^^lmGu@)cet!@B*sLKx(wjI@W?D_oFsIWNh-L9&(j{# zgoUU1`^&AG==%CgD)g>!0Juj6%@&hqd?&foLqn{GbQ`gE7RBzSwK|;R2FImPuPY(j z`_rfZ0Pp@g9FqBhHK@LB#*WI;A*r5$jQ~&ldIxqson8)6KT;?6D7p!%#ht@E_w)4! zfK1>KHnWocVVRq61F1~frn2t8b1psXUWoQmQ^ctjHERhwZx{_ISC;=!#b|yaPu>plnM|V{i$*ANBIEgg_-~=S_(h3?KU$g%!&WuPXR(aJCKXr$ zZ}>kVpq>9wr*d*LeR>90Wfw`UXR9+bS(ys|)CZ-2e@D-$EpFI}lpGP!6s~ZYN(5v_}FYnR%AopOyzEl{80T z6nTc$y~5-ukSpoM0@iRI4c1ZBcA^2-z8`2VWJ3JJ1lFDk3!nnk)P^pq-KO#!8M|rC#8Q-(NBz0mvvA;edawsr7>8)*nJB4MTT+%_j!% zn1Dxe#uiv5Ufw(Lz&=CaC@d7||m-45~-YZfWlT zH5yMPjJj&W1G6+SMRjEQt?LJj?7K%{Eri6MaI=TA4^i3TRT~3z`fH9vz!+H+J^_my zr=Zq-2D$4DRy`dT9?B0?B+Mtm#vuJ@;$%;C8udkyK2+E+6NlRoLV+NHcuXX~t|P`- zHhv%wHa5>oJW#WMVuB{=`RLKB(U^@}g zzZ&S0oT6fu>NPi7)ehqTL{Wr60kpGmMZXW2!Bt5yo@Kx4V|`@X5+7@sR^EtSSEvaiQMnt zgEM#ImL&fF0%ha@$+dikmh{6beJlM2zWq_jAaiY%z8yHG{bCDZsJQC>RER<)x508z0p8))NwU$A6H5C^763*c zDMuYp)Y=$G{jJ80hnP{NvlT00VvBdNfGkS{(TM|@0poZ8A!~{>eb2V2QsBB|0yXn^ z(X{~nyH%&&^7 z$Lj9YbX9;O0T?XkEY&&72<-{P+32^3;&G82F&-bPPQAUc4uj)Mh2@V4Y=TRX{(Bm< zV3qfBPO74B;vD1q>(}Z3){wIcrC2-we~u_JgRds+<|QO?@q;S%8R>6?ywjPKOxJdW z)fYB44BcA61fjOwgb8RTQi3@F-sDc9e{~f^a`a37!fAaD?sbJ+;>NX76J=8>PE|KN zIU3thj0wP$#h(jQu|in^@0g_e$}7SnvR4+roe8uWb(M_!nJB-wGtF#FM!)2H4fub5 zBtO+O91c6EXiR1hQV>D7k6hUK-u~@RN@&+b3z$w(5Xty>HcpQW2>h1|kZ6%nLCxEI zinTPap660kNMV*n$x;5SrDu-E0>%ixI0OD6uoMoSZqmGNQVT+N;l`*$JYWuZ3_*m< zq0L0lq)Y-=zVl~70Fd}-sYQcedX*oj+QjvI$5k*j-UiHWNWQoM{@1b$nN6e=t^m*i z{1gQwee=(ned;99K|mHRy8&2}7SVPYV_ueQ$ zU5!SYvvynk(th!kveY$Pe`A$kU{N zMyK(pF<<+)@Nuzumj{eHbjt3(!O=v?*}BD1feJKyHY7kL1+*C67qA27H4H0u?k^dL zX7!WCXlbSd8k^tBZ$Ulck?i)a%_!H~u%K|c;GzFBr(#LuxJAhZmtx25j6{}rviY3Ff5 zmnNv<9n(h@Z8tBdh@=WJP~_%FmBzJ_g$`17&UrgX>rcHoEfV!p3NKL%V+Wcav(~k+ zU9ltKHyzvlqR3k?wKIu(OgX>J)v4ADw6Cu*awk5j+Abu5Ry+F`x+_$UE@Mr+ZZ}tk z${+6WMcO2@F>&Bw5Up`quQa#$-+9l1Vt&P{2ra(@v&{cep!nNC`PZ8LRy>L>vZ-Et zG%5K9w6|zT42L1Js<-6wii;IdORBCl0$bLkYt~3(a*vF$W{9RyB!k2nC}|!hPAI77 zNalBwDq1aP-V6n5UUou@q3h{dw@I%Rp~!DqIkpUTxe!}?4U{HdNYA1VP zP=eZNYs%`q24CAL@;RkG{+GL6S|?R}SM>k8w!JgFLf3m}9w)Ky+xGV&^5d==>yrp# zB9nulG34x1Fa^o()p=I>r5U0X|2#CwZBT0@ z3F5@gr?^cflDA-6{82$#%)cv%8gPpDo|5*q&&5=r)mPt$kg?* zhlYm7h>aewTdpuxrR>>W{^i_y#rt+y`bVa=ot)+SaTSL-dBA@R2bDkx@zd2CF>_~w;=zZnn4hwC#qwnqr7xG z^iFm2pUEDHsvs&|Iw+N~Et0e#>ze`{iciiPMmzoGDy4+l3C(vI4*@HmE~3>qTuq-v z${dV{R)$7c1rGU!4=>^q0(2ygTMJ-6P=0A&oG-t7bIb3$8_-rzeEK2nRg^)gfsbEw z$c)kJvN1L;D$yJ&OLFd~d!0-8LOA~aK#P(j@3cY3RuQ}GhPDda7PLLk3b-A8$?ILc z{ob_G>-T%RSgVt>>hm8fQmTRB1(e5KkIYKyC?juu7}}g$eYm1!E*!~xR(HE}^B~dq zyKz`!vuaWk1r4 zc3UoS-QLH)nk?*jG!;(b6$a(jesYwM@Bqg^;dQF7?n+ zteN_x_8+CQi)i!T+x<4eJNE(6_w-)j34_<&!u{`A`grDYChAtDVi#-O%zqA0!)6Kn z=|DG`Ei*4(WiCs+kqt%^+P}GWGF;8vPpXO_dUdLuzp@<^=z(vBu2X#U8 z%Qu^vr2Hinq&2zIaqnur!3xfz>M63p;)yBqFm}B+k)Ip*ou_MMz{C{qaeY{}K1T@J z^nTs4ZH?{R$F1pB%u>FkyNtBBs<927&}o>dwPQ?oh+DoLtXy_FAu$`7%U_=iXnmAM z=rM;wlXcrFf;6&7Z{Yc8G>C>VqT5r20+|LS7R}$mxEq;n^MIz|WkF;g z%C{gMoK3tkz4G)DJsIW_&iHJ|_$vk#mNi=G2q*Cm2Sj>xV5R?G{*B4oB#)q&3Hk?k z=|h@95l_6BZHqE23?fZ>kPd}tF{B!Y21~l|;hdf+UCVh-@2^NAVg#P_r!3M}0mo5b zo+sU(84Eumm5z#&uP8E=avMxr*|W(k(UO(Lf-A&JzK3aw-&}T`Z9*Rs-Zq~xwA}v| zTf*U#>IzPFhh@HWCa|DDUc+;&05Iv>_^Qmy*<-(|;Z%ezeB9EarUy~iGjGsl#hMA0 zoBm~V1@XNJmoIA6dnl*A#G!1oWvoG75C+z$AGbd#3xl5wNsOqsd|KpMC)YApg_I8B ztbY0l(b&@9TDg_+sN+OX6f2E~RHt)>aRR!iV4+UG0hLEAFbBU}+vH8)f4H?TT*H{* z?66F42iqgQH~sQEdIQC&qO+bIM>*$DcV>@nlusbSIzaWK&e7+PSW1{~x8`JAZKGx~ zQ>b++$*+`9see#A?}oO?x+jU7I-ReqUWTz8O=A;&#K>j_Z37c&DME^Pylcw1*4XPe zElx=ksg}901L^+$?l)tR{E^(f;O$KMLL0>@js6Ym)9Kk52T3!eHA=I`t}fz^4fI5arJje@}flFW5O@;#F0@1&26Mvw6V;pgLfw zxX@jV+s7YUWKRjE-*eq$@qH~9qV0DczWSFb-=6$v&--&fN}qX5Cx60{HLnc#H-aS=o#f^?WBO5L0t+_ee8Sla^;alP z(*ce)L3OuHP5lJI@6T;8?mw^G|LM|&lm;Ti=@J;hBS;^QpmS!4{-XZMuYyB4(105; z;7GQA;r{UD1GhE>7)hjPaQt;aS4s$^H%+LBzL~#@FT=1TD$qJJoppKkt=?6SUc*U5 zSv_MxDLM?!XY^2ru}dp)x;=$`pq?-oVEEo`aNACPr-$QA{ejnt5ESv?MBbB9^b{XR zS{*eV&<+7vi7I)2xoMJ;MO(~`r)!4`u~CS``xaJ0ZDO0vgh=PAq8t8P)fW%X9U1O< z@~uI{O}FCH#Zw~Mod!2FKZn`T#=WtT&ONR_^-bsL3E$c7x)%qtnTtvX$6GfVWb$*U zwA{X3_2jN?oTk4IwHIX=vNN5m6+i+wK`T0b0%w*Hbn(A2sLY1k?JMl-*n?B>o}x*buLC*?d!)Al%Tqy*Nsu;qWmU-nmwyRRy49~=!;56 zusS`E0P<>$QJ?b5YxL+a1x_|}A=ZF|Y7WXh2()wRZ4Fyj~dk<%p= zro08`1f)Inqn}HN)DuX&7Aw2SaLz@uH8I;C&HNaN&0Ia>P(5lKU+d)QcS6$ zc?o*bc+thOw-+TE-$ViY{xl69ozH{#J z@ppG4p*!bwOC}lV*c?`riSG+o$`4pgwD6jA6Q4E;o8NI`{}zvh*HSY8-V`8ay4jns zuWI9!d)UHrw&@>o+)9ME+Fr`U^k|iqZ(HDce~o{pW;SQ1I(YvIn7HWw%Vgu(L{rTwbw86oomU;W{75n@ecnAEnT7nDw;?2!y4;z)J8P295J{d;eEs*G7i z+NWO$R>?=Rnry18A7#qxwa*pclgSVruzMb>W-q&&6k}cg%`5S(9t4&32R>s!}=v;J&^q6O1oMSzp$*4*x>QjHGA^0I?u5+0Yei4@l zQ(4AMQrt4-?XyR6+6obnG7I1a3vqu4A+${G(Cn{wu1ttVk{Z3SXk zvK{HM#3%mBj=!-t2AH+83SXr07{rb`3pvK2L(1?u5IX21a)PtC&KpHjf=s@6WxpPAq1`mv5wUqUD z_l<&IL09BAPJavhuqzh(Er;GGq7-o!QG-seI zj^rPO{sU8LG#CAEo+hUo|09-+n&faEC zK<~x8BnVv*TCUiz=9o0wWE+BwXiXo;bK@{f(NLuKc5V`nRZ1EM7;ZifXkVkNZ~eEo z1y$0~H+`0$<3Z*>y%CWiyoo^mz;pdR;4LVsGZO0x8s>O(lwNjH?WAc>3lsOK&X9zr zfzppggit%A0_p$2W#+gtH77|P7pbpD=mg_#SH@>!;i!vP*EmCGN;_Ua2`zE-*{SFO zQCyI@%3p|<;I%mf1}%KYhze8{m{M?!QXuLDJ8F9mGBwza+QCvfBK6*{PSFkUfKN6# zS1o)kJ$*ITB3;pPm_POu#}%yIv!N7>WA4Jo+}EMn`VKEnZBM;}olQ!9pF5UIcTpgX zNr6NnFpjk9jpZ%TUcxKB26&|CRf`ToQ7+guAJ0Jp&p~r1!o<^tHEZX+Wp-YeehSa5 z|Ka?e?#&knKny$0wD_JE$>T$T^_XaOLnI z+QHmQ+^m1IGilq|xWSbw=`ub-A52At$q({GPwFaLW{eVbz6B#N|D#E;<3zg?!7~Gk+(YV--{s;s)ObxgnUsFIL6@X<`9QQ>kPxw zl?=P2Ygj+y;F-KVkV6iLV*sR;f`FY@>Zr);V@7vR#Ba+Vk}|yx_GkW}z-PxY9)5@J zO5Dv}O#b9RR9!F?WH(KBv`}X5_A-mFFIQ#@;J7&ukAJEf+=UwEVm$0=ob|}~$(-`b zIraFRKDGCW`_V>Q-Kl~qsX&A(nUtdxL_p}hd5Ikvxq9D|^_@J+=lhZG{UlGT5!P3N z80wSqH{a65HBJS`vot$dqzp|)(rX)gW*OY?+L*;YDu$Q5^WB_H3etLk0-qW4k+?MR zz7dyDY&Qz}43Y$nSHy0J_Mbi%@QS~LW z+_|abQ>%C31ox%}PCdsDJH)hLdDggjfb_sxCW0-w1IDUlg$RF#3QN&EDo(LmkFAsR zTBp^Jjqg&5qr7h23Bf8!Uoym+4xkJ;m-xCb{8hnnvylk5{?$nj#;fg}dx8bWN=htF zE6;kfsMtbnWBCC@y%|iuv*#oOj^$7IxEfo4=8T*hN0f+SXfoP2P*>WUwSqGK>0vx( zme+yJCW%lqQdIj!EM5Gg2B9Di%Kx^o=wqv0AV*E;u>RXnPc1_jjRd&9`mZgAi*R2F zbLslck+!NBE!evJgV_Zvdd_|u*dV+P@iybXLgy}Tq&U{Hv4bFBc=NYIG~DB9mvgXq zP7su+2``VIPLW$n+c2CIU0#T7;nlUI_?Ls{{zn%6?j&+Yc3+f7+wAyV1Fg2k=j)-N zYw6*)vzJdDeB!1Rrnot|9b6s#0Lcq5z%&w+FX5}kQD5A@w5!-va>`TF!`J>X$_XGn z!+D~2annF>kFX>Eb8+Mspy7%%q zBCV|N7i<;B9Jfua?Y@E|+5$dpc|6pwuZ|)gTpT^fb0!g^deP3nQQJ`}$mn-OJwJS@ z;lB+I?z&8h8Y8E@dh>u{1SRu|h7M+k=6Licx2} zMuv~D7-EysPxcNU;vb!DiLBk@JI`x4wh9q(skJxas`TcU6Vz9h#^M@#;%Gn8H*^q* zXtezT*4vIC#qtVwgOApg+!44a+Z+6!?5Z z9axr;f81v~n^teEx}6a`zc3*WTw;N~P|4A3QEEU*urXr zSgrNdYFIYLozeN!$TG5g`M}4%O)PeZA0WY!ImRHD3fj!0M^+$I(IZzC-N7x*$YrtJ3mV7%diOb;fTuB4`xVQ4b~p$V~F*b-a*K6%+qgfws6?NzPgUn_1t z*?~_H#lK=vihpC)Xb{kB0}kdrk%cMyp9gSOF(vZjtugKSH` zB?jnGLFlyVZ*@PYGzJC=<|zekWiV}#@2!@{vN~fYVeX5Vk}`~T*AiQ^6J+LIS^n<< z`_BuS`?jk{KBKLh>C6-d1Tr_{Ht?TkMmK#<3MO3|Rn>4h7BGlF0|-Sy<+{j8Net}S zz~<}(Q^c70X6qm4rN8eBa~pIRolh`iPL}@o-sj|u+`SpgN-)LuM#{)O9x1QA<%FIEG5#r*oO>~Rl82Y+|a~W zto>&;0#O%&AlidV9Ie*(`iD2pR%2Ee9vUJhulw;h-kipf^F$(@>%&W5;F)ha*SzPZ zfkw==WAoOWWqyMiUbk$TVo`UQH?2(=pEE3ZXRd)RDUb-ol}nwHpg3cGFv&7yS@2`vtbzZ!gIFcBE;EEB6UYANMyj=tmr^J(l9aDXYM$mqv1Y z*VfDj=n>|FU%W@UOO$!af|6J2zJDV3T;oXK$9N*;tWGUk0D9`cab#DnNDYl*%c+;T zUeu8sT$QPk?W`u|oSY8z!y5xHPd^Sf*}%CqBogS-{L;HSiT83v&7KlB)VAF4Q}4N1fX)`|`#S;yT@cGdMz znM=s-Q>ur$n4I5f&|%^?YN+YYFXO^&%WmE=3ErhUH>jiD_6`kACHJtgFa++`fd>2N z4qiB0vs;l22K5i@tFhyTiQ=PT^bhk#e-nHFtF4C(pIrwmGEFst>T~nFJy)LbR3ha2 zcK)}+wq;M!SqVOmfER?W;#c!OFoMS1wTz)_=mmh1$!QdQclQC}1^Eg$~Y zHv&13U%OK9W2wGqvojB$E>}AjFZ*msDR4x(!&(7F5)X*~*}5Q`3ItT zqj!zd4lW_DD3!IY-6wTl;u)?Bz@}DhDFBM?;>P!MXo< z*G`rkpJ=VhxONwn_}rj{U<2Eg9gK+Y)XT3dnHeBj_A|y`(f0h&M#(ueu7WUSAqyke|%IQ{IR$>Hd5W}ciJju|8V<1JfMvCl&cxL zDy-~%n|Ka_G6wh+se}ZnuwPF?!$D$=oGh32zvmoVGOMO!3+%dl*H}XpUq;HWP zp}Tbna~OVJ?L9I)2Lb0`>K~C4eMBy<$@5d)_sLIU7l&8JVt?p9w91?v5MZR%?I}5F zDG~_l^gO@$n6c$h^5;z`1AJy#25=Py!|QfsT(54fymE-Pg~h)nrq;VWLg=TlG6rQO zo6a!m*%DM|XtoWQaQai0YQaJ?oqo*KY}Bli88ZFNXrf2l<`2pyGR~G@M#2wS@jlx> zUYxRrtPB^uERCuQwUbb2fa#X5>RJ@;8*c{~aJbX(_0l0eZ)p9JeR@<76(Z+lZ)hjs zg%O=&^&{IZ8V^qe0vJ3tRG7&MzpIZI6{nXz(kdu!?QF74jASrb!Ll%LAT6tH?!d5U(E?trBQP}E-5XDVu7$wjQq+P#xb`1*djrJrj%L>=aGKp$RQ=jfNL#@Sd^XWiuKlp z!7Z)qq*To&?Q`J|boz@?%zZx+i>xb!^cRL~E+qB;ryqkZY`s1PXdw?%j-c(H`6(+hOCvGCh^AgiiZu#^Zo7kzpyeTHFL_NrIIbH1da8aoy{H~?p#uuT2_U%|g2iZ_Hs!L1=*Y*@lfp*n3< zsw_1v6>}Tv)wG|LozbJ~p5#^E9oPPvkDH`#$v%|L;uymL=`#*oT1qkbdWO+w&JBOk zlTlDnN|j^PLkIB_)A=$z7e3%jm@%p{Davz%>9uXC-?+Scle`q-j!Q4|%%1M_1;KQy znjL@Q4#ay`pCePC%+)2(u6M!y%Qp(4(m@&#%@@4=bHq=V9Q}bEqUWVZ#>Dt-`;ENc zt#Z4bl1{&-dcYj#XnQC1S+z-g=<6SrhQBCNIr#}ii%$&P=24NxWFFhPF-t=YYRpyj zX34qs>j$ebo`1>N6bP+7Lc9)Tm~QN|qZry^X83~-O($mrkjCDh&3v{7JSA<_K|`MGEX;y(MCKC7bb?G$KnvIlkdJx)Yi=DOio@j|mCHYfIZ`VwIIy zd+G+K(if=ke8Ity36XtzzgKXb_k;eOgM9xFVmCkHpHVIz#yY)(80^EO-!Ol#gBi=;d5&9Psf5-dwSTo%u22<2pGzkSaQ z!J%p^AFwpFdBu~amC3iZ4#;+I2r}p$3uS&a6QSq z-g|bPG^$^>X>4$}z;+!j{!T5ot>9;JjuhhFgij+YN44FK3Z}Ycku>~@L^?`d5bqDu z|MYr4`hTE$eYW(eW^&%-MHnu%V*Z)>6Hvyu-I4wr?j=#xdSbbv|2DRp#d8QKvs-A0gDTtvn2UaN;}GLyI!2dh)y#$yps8If6l_@HP7HC>b$06 z*1AW_rogGDrTWlx`?1SVM|zC43JN?5o+EPgW-km8*`*AXy-{RB4`)!amAi8=;%-RE zUtk+J(C2-s(N{F7IPvcOo2Z0bz`BdoahAjlrT0M=!rHsd9-{L*!S9Xp4okm~FtjJq z|7l8YMb)@JNr4o=4bCn2kD5h)x4m6Zac$r5jCngD-lxCQ;R&R!X-Ex|1 z@xJP1Qz+H)Gu;%K{BW~#dgG9}H`K1;Y(DVnVq){brryazZf`w)6WQXon z+j|md#mnn^wcr~O>n9sV#oOz(_|%ai$_q<@Q*Y}9D2N~p96$+Z1$1<#@r!JV--}f& zHT)C<7@CdxQhH*@H%f3LIqhFx7k%~r2qWV6Q?Zj9qi}`-rC^-*_b1e=dzXe@v!#%= z443?Xr_MHYl;hJQj)37_Ricixef;+VPw!>W6E)$SSF8W(VLdv5eFjLXIFF>}|5>Pe z6BB=-7DMv3wzuU(6~ieSu8SwzlCMKs_B?MGZIL*#(gN?>5;#hd3aS+0bG5SPWM;*x zL!WZQj}qi>UHp&K3nMsVy`(c}3MFHI)5N1A6+O<P7uHp`|ozLqs$>wprA7J<9Cf^4me)d zpQSgW5)AfpD(z&C$Um`PUUQ>S9(vG_Z-6fS+Vi8S=dIonCiBf;sJg{$(pz3Q{Y?Q5Zw1z1 zB4J|9=Nb7)Dl`PXl=Qpm{Y(nWt^S>jBU=0dnFn%rWaRhlTN0OgGMoPS3!Yh)^e9Z1 zr=Up)qkz}U^d0a5*M*6i<*jeR4@)N0Q-g13cHbWw>NoHjBHpp09)^HZy&@n&K|vAs zu*oUpjg4(K%k)HyMUYS&nAx3HpIjnL_)TW}9ioB+9{^|i3H@VYz1DMbD^wn~{!I!K9yG)Xp;VpYy zP5oBH6P=0>7o%)RHO8VxbIArn2 z5DG(*h3CV+RTRjhQCCwte(rSS{xW*yLw$}tvwD*T3tZk3${e*zc z1*5e_eap(uc)vKJd84@8K3C#l?C_8$@?;^XVViO#xF>=ea{^h6PRd}FO-G{NceD<$YOTXB|1aUb_5N}HJpm_SP)z+h9 z-g`v$%<%u#Izl#yxkUqwO;UWr~fT*y>#%~YjV9IXpxnAetuiq-;l%@Hxb|ahHtWD z4*oXwY^G9v0%Xi%1bmsjBTXt7Pa<#->~9@J#%noAy_!##@@iGy@1g&xuT|IcqTb!8 z&6pm8u>9Dy}oyG&aQ8m?y`s;&UhwqWwEgp#o+BsPvMC(M| zapSDx{IT+O=K0hxwzS!B7EGSJbxVMsC7~S>M`#ELKiYyQNsp$zETbIf3n+ZD$qW^?Ny8|=9WbcegPO9M0*h9$| z=Lo`CA{usH@{+>n*B^n0-urW<>y7Q^KTd9^sb$(a6?$tcIz|o0%^wWbbvL`u0{ro@Y!3;H5%Vf}$9mRR2fHOj{L}g*cW;aNw>^5rzM9zF-kA90JCD7l zS!dUSL?ZYm%U0O6TTmmW1lkPw!@n12b4ksIPCZ`mx^h3?odq7xa9W1_-iw!qyAz^^ zq_An$4(4hsm5H3@A-0Ye;AeJ?pt_E|h&Nz2m^^yM<`Ers0;V%<5gYcyXtO8qDe} zPp+zF!?x%8$TlMB>*}kE7%Gs^HTwYj$8MAWX9)v?cR6LcN03!w)~Y90MLk~E>RtcW znJ-d2>pycC_YoJIL*UnNwO1rPLRs3|g~fkTtCDAqdFKdD=THAt8G;F5+ z?Ds2ovRB>WH~75KJC_+Zo(d)_JPdw*EMJ3&ELA+1r_0Eilp-qu31!|YAH(n|=JE=bA8Se`t zlV-g#LL1ayfiV8Re=1@o0a!WpR?}{JCv#m~^X4r!Un1Xu?0- z?1|<^WL1MArW$jFK@@{w0;Zcm_;A#s9(P5nqmZH!yzTOtx(dxGkO9Ij=YjhUFn4O4 z!m6;`uf4^8w0evDmZ{uOaJDfNGn=Ku5gdw{3$`MLoZakRJDo1BFI@tfgVJK1+c;U$ zefFlSJuSi-=+VJ$%rV+~!MgZXG0C@$DfYJxzo$IhzM zSJx6DZqYR0eca6V+6xE@OX1eLOv-~s6W{MO)YaZvIq1{A0IDX5Uz zYuXLH!*8U^ee|9BBlx9~;FJ6Iu>9fKEIi+09?N=Ev2*8dhN27dy{-JRg;8a>k=xgO zI0q4>x3&@)-kaxB8kkOf&xdbfrjZYkk#VYn^WN9t+sNig_xaG5E>-T85LaK9Ky8<2 z;WW^fX@@1V1{JBshG415T-um7MJ_P;f!OuBKuh`aezj=BaOXUcj>f2wq6<%rAb(Y$ zBK%~XVjz^x5>&J7Y}_4c@0ZF+tJkiRHw~cW9ZiLB4P-PrCn6f{BM{n!-Npgc!br5j zZnoguPU4PtF>B+YiG2acn_>0kN5gul@EJtRPIm>@VhN!XRl55Al@8mP?-o5x-w zPGYtxZ_VFYn-u|2?&ZqkT1szZ7pEi&c%}-XPqj#m#l% z#XP(GaR#E3aM#8C(S~C<>$q0WcNWM&`v@x2C329Kqiy49TK?|Os{Ill{lEB0a+>og z3q?T*`_D41rz!@5D8!|u)NJv%!x68}8(Kl9RsG87J@0FlR(IlnXOfmkwC#jgFVQ;L zJ<-dBRcvYvtwjgK5i~a&)7lL@Zp+n-9s}Htm7O>kJ36paRMdJXK9Q>=R@n_*wLdvn z(7Y2C6-=LyJEN0=)db@$w#tnM1e-@Cl(+X_i#N=F5?!__d(zy2-DPx@7JbMF=mK4g zmRLvc3v9+)n5={XYR9cVctCfQ%z7|`NWjm=o>Y4PTworge|qAu+NhlBjO$z4DRq*X zWMzEHh7HLQN>(C&)CO&vtr|ZHt)>-V9L%rfUhWZ@GXaj=G6) zwkCzBXN#1f2cakKiB3B`1zCWdDn71|G%*P+=h)bO)-#n0k-(aRVEU>~epmo$^7={97dkDM3p2x&}})>t2=`F{KlX|bRvmqjeAas zzJNf#gpnrwB$9cEs_Ku9E4IsSXDu2qiz+RKw)^psYwM(NfJpG=M((Wty0LFc0*U~9 zGT3XY5IP}T6(UQX7bjZoJ57Hdaz444=Bs5N%onopp6ca4k!O2O`0*lRp1f}2VDM=_ zXEKut>w>E4kj0^z{ft0BCOFRv`+TFz=H!-4hgiVDffv~~XmM7ghjHw$SGFoAon!XQ zEK5ehA7Y%tv+~#k{Td%FTjjwct7tJ+#@oelEr9}nbY0rn@^ru(C(kM zg;hnE(~yLy4$=~Tvt{<=3Yn^mkWR&p0QtBDFQl19J{-ROtzL=9l7I#a&Idp8=IKE+ zTlJh@T|F5X)vw@|cQ*PC`|Y5h@tNcKnL0p|7xkWx+(_les-gUMlkzswAZ-O!L6+sv zZzc|(AtnSGoLH|_A-0TL;4r1Su{gVOP=YLmwuY;g(}*;TLMuQTla|8RCV|yybbg6EiZ~c-`lIm#S-26ew*aMiKXK8Ni0ai9EZy5FvksKeY zO~WaIw0#u+a&|p>T;d%zx(e?vrZ^#bH0{npcG8ENi3?np%%!=$UmXw-9d!}deCx$n zvvc){k|Ww@PEjyNotsBadftsEP#B~oc)~q_A*7R)M7D3UE5emS8m$w@BB`g!5E(_a z=p*)XnFe{amgcjawHwoU#lqmK6di1UALYH85jFhsg@@{@&C0^rC((-m$kGpXmtCc; zRElx2qU^Wc>uCWmSQC_t75fo1=hcIqh-uSJ-}tZh)#o}DHVG8$i4KhWb?Wz9h4FM5 z^s~oiC@Md+feKWF>?;n-pcsiW4u?hQ8-lhILU4`?87|Kn&aqjx0Bo1mlk{!3wvM#x z>Yo4fhzmPkZ1hu!l{>J+EB>}F);}ev+wudMNVf{ccc7J%Fu7XXJsmpr@DYA4RyP|~ zzFc%qo>cq9cX%t__b-t(sZ9#=3YpFadel|?*Z-OiBR225Sng9Kp@AhI2~^YB`b^w6 z%aDTy19%^9h_MP3a_?lO{Py3)v~GbzD9$*c-ramzc?w5HfoV>xFykT(0?vl_VP)~* z&7ru5AqD%Fr(cX}b;7g3sqZV6`zXFq-;|d!yBuB5`}*?UE~0yeXZSqtssOJP_M9s+ zjeXYmz9jLZ*tCX_6%;v_F;q%T@c6xut6NsFXEP&XEtgG?*cemTxU&8z^+ zm6{M{F!Xn|_0VuK{ukX zhsf$aAh5a=h^ye?Tnh);{c^2p2`lS$H@}XeZ}@lQ1uU*I=T9{hS=M_gJWKI~`_QP= z0o>DSF|un}Ik1x0YUM@_*b~VYzj%NOr@u>nz)eaEIk;H?1CiB*Kwxzt5Ldy&!ir0R zeo!t2MiVP{zU*2>Z~gI>-K$D0k##{iS%qBF`?jSce1uD|)KQ}shuE|FyR6b+Ex2t4 zw_~u2arP+9J@hG6+HGN0VFS2iSjeFhe850tbr}#?T?WKez?Ax0`QciX!|TyRa@lOM zO0;Wkr|7kBBtOW_T%f|dy&X6Q;iK7q46L<7r{uG^9Jm;Lk8-cJ*1eBYaaAVw_~$L5 zm0P&ro6thZFmNEUx(EoYE}|G{mk$sK1|P*$v~P%F{cGzAE9>QzYsJ|sKgrKcQ-0Ro zBqs#nFVQH(UWr?A#h4e4Q(lQICa(lme*U~F?|I)Ie`%H>%&eebk+lu83p*bOtS$kq z7=p#GS%O+5PVvFZR^+T|5xL>tk$%PN$Zwj>Fsz1!R($c(6v;nIfuWUx@F5t{a@yM{ z8+lLNa$uQO#8sL6GyhEHiEm$eZRKX=l+f}T%rXp?((J+#R;iEL?ts+rx*ATRN9}TXj#Hx*?>CGEJS=lR(g6+-FB2kL;4UnOP7TFP5 zN>~(PZ|S*4r5s{kh<=Fjk$3Wn+YRsQg}7q0)f>n-c4X;y7Uq$}YV|SY$uzuMRlD4r z)HLjg?9d{LlTpGx4ym_!xu!*~-+%a(za`MIz`^Qp!rq~s2Qo{HRJ1MVZRykSKo!^_$jv)L}*)V_+j-9HU_D-uD*vz$Jyb@Psa!(#2dG6?n z>-{JjcC?dKqog1D@~5B!SN-PWdkAzSaIiWUUbwlqwqQ8L6_?R!t-WXcE<10T4zI;k z*|mzV+Mooe{pStRy;}CV%7KjZ57t~>rxB*U)mq<>#GuvQArQ>s8i$PVv40ka*yp2T zRM2m4>RK_}iXl3&$*MKU$u?e3A-=c5K}l% zE>hb-xx~9@e)XSIKK3>W1Qzj1SD2YgV#~9qwiagoWtxwDxMsu9T3Ag)2fS;iQAS(4 zg@iiQyiK{HiPf8}T%Tu@oS=@Xf0P!wu6dIZjj?#l_q9UZqFlo&;}#812yS3E$awog>fD6D%Q(sR4N2R#jy*m}pksi*>Ofxp?OS(AlMYY_aUw=?nOx`xXFjTp#JuSNz&qN+n$5Om z2-bZ+9(HZ_0%@97D+jy%vZ`rIqf(bbtJcEI%@BHo;zJwit}W;#+!sqKq16bU3Cc4K z^9xht1)UqFo{%0XUPA4Fc~JIZ zwxCrKOm4AqF|82Y_D&Mf)}F<V~Y4kLxdFW}PoU%=xT*{GG}T8dM_dcyKcgjpDhm zvAJ3ycKyd_G5X(Zmjf9~T&=s@nuQq%g&djZ(hcvzpI0Q-Z)N_B+yb=maqdY@6%#&6etr1#k}gJ2r{+n_UOF zIS8Na-_^DtJXP#Zt)5nq4>=04mtmoqSbKS(;;Q(gOWo zUZ6RAZ7)sS7C2ZP0Ozih{XRw^q?IFAjUB8IN_@A2 zaT!gES}hp75Le1znO3KL`px%rRI|ZIpK@{5T}~q6UZ@(88)!kfSsCSOnVK^f$?fYc z_I;Q#(VulCu2@*LQ(Q6Hx~uE9Y-mJ$U_HeK)=?{1dAvyYQYWoAYu4WrP8)*bA_obC z8VIZopxCKBgv;OvYI#5nTUo(cMx%xI#NsNEyuwje_IjB4?4h~L^tM$y$H(-6wH?<7 zhf9Wimum$yPel?z#DjzvuGIDJ1?Yjwt7L*7>PMG^$c@Y9<``ucqA`H}6O2Y}( zOu;oEirla?Q&104UZ;?y%oqRI^>$du%~N*flgOHr6>BWzsYNH#l6K^LJ56s z{Z-_aNNm7rDI#31F=Ty@LNbBH`aXIwPKCErNa|mWQejAezzQ*?MV!Nj2c^Nv=L*GO z+``|))7^PFk`|q-3FYl^-O}m?1Vixi=d-^zKXQ!8b_ZxnVS|Wk} zKUPj@XoDrVTA?hoGX1~iIG@F(#>G_!T$KaMaM_a^i2AYQ)8fVR)~OYu*S?V*jWoHW z+_z2B+f3Y2j|>Z!+d)3FKr^RaQWYcT4M1CA@!|y~vT}8A zkFfK@nWer#YL!ClPTN6v7F6?Amdo7?LB=!^izdB(F#<hb?hmxy* zW_;8rXqd}WVO4j#_pomlW45vc0yVzRA$|N0-*u|D};o$G^mI~eGo(K zEEBpc4Yn$-45M)0x#KTw-|%yvZx~LMLfb(OD3=7;MOyYeix(;P_}`E*^$PjP+_{s* z*E8(}g3Ik3oVZ!+%+)GEa+ZqSsmgp7FT=wQS3dru)C!y(~ z_if+KE>zDANVjes zn{?$^0&jtX6(YDas0N0;6jJo4e@AZZ$Tzr|32Eh0R&ORZa7oY*+BQ4lic$aV5wZ#A zb!wIbk3C^IS1hiW{9J3@y6aKQ4Hbjg#w*WI;iB{I>z13fzH#5I+`^nC!19^qWxAHd z6}Mox?9$A~@U*0#UK`L^GVQlYQ;FA=WU&s8LKEs9cMNPxf!5$afZj6xc0Z?yrZt=EVIw>b(I zAzZ78=;}?bW{#Lp%K`Gf4O?nvv$AtVp~zXULM}soQ7#FVTQC%qJ80yxmK!MY^VW5XErihP zVa>o~Va2Cs|ADm3^3Qc~>YSq)hFM7~O3ba44B5SnJ1vcun{@^yvV{K=XTsdJK`HA| ztW_8eAh1FLyH`rTgtl9^pYGMtYv=(DT7n#xI$P<`ZWIdplyfk;qWwbC7uDa==w@yl zT5Fadi-6q2%5>G!R+KeT9;XHIdPQiU}e`zf1g~KqQYYbiB2q!>G2H1 zIqqp@<8#!q3pHDOu+UeJ-p;NnIV7q|mrj?}333^oR{Gi5CfqI-=|Y6I64FaRV1kVfqpSh$oMhc+t-u6S%dYY77{ znLAqwwyW1P(vKJ4$Hh|(TQ%4v%1%-#1YdTq%#+_H^WsU%#WM1(zeX7?mME446aCAs zXCcEgBl+($&wS4ku5$Xgbz8=2N#UJfwLTkT`R8MP|1im84==keuf(;T@Vkf))}6Y~ zB5T!q{%V_)bRRi{m(_{(4>@`a3m@MP)C2`8 z@jHv%( zhwuW?yn=xfSd{n~1qihFR_I+U4Oy%<1A!F+l${&er4E90ugdtV};wxSigJxIxKSa zg;S&%i)5Vst`c)OC9vjNDn%~2R&{11mfb7sa>f7Ga_f{^$Z&}^=Yh~;jK!H{B5E1u zUm)|FpIs4tXD72!F3T)5pDe)(in|h7eDLA0M^+>f@nuZWeCW~FjF7unDRg*mFA!L5 z#%jwD(qKCiqA*UI+mzWBF<_TqM0PlK4-l~u9S~* zg5_Ez*VlEe%9PzJe%XBsR)yWg5<>1eIyUUzvIC$Y5LoRd#BCY;=!9$+YpD&7 z224GsyP7c=A6!ok@kCt7qepl^w8}bV*Qz?mzSKCh6?E%Ct=W}LTb zsP#IPCA#wK@OCNBJV){Mo2bCScL(CenjyGhOVj42{Mv=mtjo&s;L`261*^Xp!>`}! z`hol$=AwZ7^?r|PI5rG5ve0eBFmF|QNHxp5qLXTc=; z2AT>cE(fx(s-7WOkFs-CPe3x(XK+4kU2e5E7KipJW8aOFFFdp&{9evwRlX0aA68Mc z+hX<3@o}dj%WB^+=&QCwMXL4l+zpk&qdM5W;&n=`6x^~n zUCb2Kbg#;@ZGsXt+>?rD9I}(uciCp@+jtfAU4E72Sn0~Wa`f7zzmcE2sZ*%L zt~~Zw@x5BJ3Qv(6SoBtBtL$K&{T>-l{MEAXJ5$*&E4uO3jszC7=4U_aIQZ@+^v-Z3 zfS0!6a(+{xRmxk1MO-ob{=>ZR9J^Qq0tW)CT?i5C4L)qSf@1JJQY`s#BSCKGAc`kz z_E2fSwFX_6c0CI#C!uz$A60(-9xufeV@i4D(rc7lD@Q^0X3sx;lFaOat8!MkG{{s3 z+pCca=as;6*Q%k?B`fEg>QQ#Lsuy8)({Z1v%$L=3&Z^11@bFS^EN&g)rU9wd?qc3$ zclc5+OH3_ay0Y9aD|<3+E9hR06?``ew)b9$PjazlFxUB>2hvQ` zAz==?E0V|e-4@zbK-~%iRvWO^93=a})1VQ$7P`T!jMWjkET$606AQ1h=yHn{YInE< zNTHC~(^4yjdhbQoEw{l-*Qy$JpEyA81iPidB~*#fO{<1w4E>qdXY86NB zRR!hVSPZ*IPX2aYipQKeUB5+xttZKn@ywx`xvcEMtYZhO46k1(O~cmunGCO4=s1s6 z{TzDffU4H_Jfve&7$OyoFiDOQ2owmcHW22n?ToJX-ewUUSnDWv#if&>_x{fVJdAYyOzr0vU7X9A}a$T{624Qau;TDJ*oH zx>sea))W<`!nt!NZNC?5DW0r1pLIExwX9?)v=p^KLDP4drkS>Tf6ik$EVXw&fw~gb10AJDa+Jg%8g>W5=giPpriX(Zl6RE-%`}v}P}kRM1<3s?(8 z=d!ljH?SidYq3<=X@ouOPL_*>mJLAxffX>yLPoefL~u(6yJ2YFY4eQ1O&@$DO+I0g zb|VEu{>4X|uBFGKqrC2+8_{F8C4^OioVq03xIF5VN*Ak{sHyq-4Z5~FqL5uC(D?t? zs0k_mk1eO^qIV8fC0sI;NB#$C=U;Z6!zwfM-oH8IWN~PAhTXJo=ww13b|SLk<>~2A$+Y3WeN0uV)OdM5HJvrqb3~J(s1@QL=t_(SM7B+dMn2k)u>D zLAogoR#SGdI7j7VmZY29S0h;H882Q6n{(*BmdILi%}R?``-Pl6O@*ib&J*XtS{&Li zZBOpt)(yQ>Dik4)SfFJ?a6n)Mh$Ic=!I0pzG-wvG6GQL)+!*>#FO>RL<>qFr_4StS%c5u2#nLz2BWkg6!_i`|rlPoVKQ6m$OC{0sFOc7uQl!Wu3c7X=+00{E>pu2Ssjvgegh_37AineSArH4Jv}g~xR|9Kpmj+E~P8*T9qoqUKB1i<9kEnEO*vXnb^)gK#f58fS zm&J(}qK5@rHI{RA`uMVr^=?Xo)s+9HV%e|p`hcyLK%0?y{BK#kF8yxxr7Hc8mtL34 zg8>LEwc}qy9>Gqo;h+gAmkN7nR$iaBgQeFBxP;8&r%=^rtJ3u;FDl&%?0j+O_{!%ku9>%7TyaBHFWe)`!74dNjn)Tb z(N|dlZ6(-V7v?nn5G;e4_UKwoZFO4*u8%*%_}{hPo$SM;^f(hUN%(CPCmG7eZcCbpIn|Rw`5@0^>Vv-b~B{<-!5yJPCS zFJVz=zFZV8EbeAby=2XnWMNfVo-5zi>(XE)*3OoNloDAYcj<5E2?O$}&r?uHAH@6M z&hbe{vkLk9r-i#$lvjlPpmktCzng%sKwt%cJ`fp=#6$eA?vdGpj)Uz+W<03UAQL5{ zZHM)8l=g%$u&NBP$u*n2&@2z z#l>9|VnmOW2RYbo7t_d-p(kvIc)cJ`vh9N%iz;4I&+BrTd3vS5GEO{ei7VO4`g={t zJ^6P_rNV0XdM`?#4XJhTa{AjuTow#aTrtuofn{}hH|;M7&0+Um2)u{=pf#~dqiifY zO29XI!>es055MdBR3xFb+~Chov~aJVZmR) zNj@b>98w#>1bM*2?|R+n`l}KL;{)NHw#zHkhjoQ|ujo@db_Ykz>Dg1ydDgL=x4C}e z=6-@ZC^vKwR>kJ&mdl@^>(;$U-H7O0hsf63NxyQNx)3K*l`FmMchv|zs*@fG z_Pd`gMCpYKo9UH{m(khzBxQ|a<}j}3>Fh#s!s{`v%*?^jQ8lg}w0nORSVrD{GuTeV z$Qxu73<@h3j%TOkS#9gKLzA}Gn5@MIcI+QfQc~?#1&i#4W1QOOPG}^@KYZv{?x!xN zX9Sj$om`2u+F-_7-3T82kFR@Rzi(y4}Sx zm3vjl<|(YqT`17S(~H~h{M>UB!BK+)!`3 z+l}DK(Kk$8wlxvjARz}aBeCwT6gzRRID0jJ_Jysjx>rR(Py5xyQEGu3FMFQexaCO# zod=f(qw!$ATP&&`eff2Eg;g~zjd7LC{l(~R(yZ;?7QNtNx;9UVS)2Z7FmGcG~!m7_OV zCzs-iaXrRWlhR<=6n*CN8*Y}s{hUdUTk||q^tL?%DHlD zU9LcoIqq~LkU|be6Cq#tv&#eSP8%EM9W4J*kD{n2&n7lJf8iSX#_^j8bP(!m6-4%m zg%!J3Uf^botA=M3N|P|7u!1lj#OhH&x)8%o+BJA6u9o0!k8@nqWpu5;VsTX}3wnmy z2oCTpFuV8HB;6eiasMk8SKSb{8w`GfCAjNtr~({(g<*82PZImlACUIa)zoL{|zd zR@h#Ps}f1IEk0oP&Qj1YA0dR5Zl5{mr0Y|jL&1-n?}V2#3Vcd^30Y)&k}+p0EV=f1_+g2JzIUaF5w&ks)9NmmN2lEU_j z)CYI`LDP+Zm&Xy3l95=51y&cA2c7o4QlwYE_wQSpO~vjN`M6l~Y;J(k)AnaWg7&~A zA-@k^9)0=sa~vE?R|4g&^Dn;a+{`j34VZ zUqTk!*|^3iexGcI-6M%L)-pQXN|?L4^FB)LGn)q8i~Cj@A%96K7i*Ndgs$77H8OXQ z|D>7)@(f{>$Mpmq|R0|Hc zQ;6y2e7lPy;R$LP5!mNFo9*5mQ75BCv_P^py!=fNs2%D})B*)%wvmG}VK;}}t?eSD zWA4%_BL%s&(f#~dEW8HEZpmSFmB1P+ekg%_Fls2RJNO*lF`Tpl?jg=!b#sGJr-QVa zo1LHz0wux_5>VeO&R+#Zt0nK!Y{E$=kLl*wgkcT3FBLO1(Zs>>Zvsy>aSC^XZo72V zUUo4gAId;9m*VqKXRx|dU%4m`l3^MTQHux?UDdw@ID^Gix3xVHUW})v{Tvn(?eE_5 zcUXh&co&cD zMc54v!o6a$g%|~ebWq-_M_zMQe&=jx*Om#r&0(cWCr_|~?y@^vqcG8Jd)X8PM5DpS z(9IN|d$ksslw#lfg}i6q&Tj61<#=$G(oqQmfMtkag6(BmSZ~k`EekAFCUlg;V!F0W z=%K@D8ZtF~D!)fMEWtJ*)#B}*;l;w^VE_)6d+HAwrcCjf7bX#ls}s*HOz08KyWU=1 zns9eh9uy*ShyZX&G#>5x6%jnZSq>`}T+S>=G!M5EK6p0^a+fLfd&om4t68fC;Eb*j zSO-7wKx!}+4~504j%U5;0x0C6tH&N26D0S>2E6;Iv@RA{PMN=W{1|zH@VE101*_t7 z1lkWfS3!uYyiCyP+;wz3b0fWyy^%T%Dd{OE_vi0%SGJK6-Ui)c{o2T>=cZGJ)VEWM zZevA5>=Xgdh){=e@B{yAM3T0n*nzef&Re^2BfawSOVnJ+#ogP*x87FFrYZFC`jwRI{pzsTbHI0b5XXAFa$HG^E(0zBuWJ-}US%xDS?l1dVUq``96N zuhdw6ZzS%mNcziMjq~_;{7@q7bP1G6DApBI$2rWRw^hd zYBRdND0KiWPIpzML49BGqCUo9 z#`u88rHC#RSXv}bP7xyFnS-ST*rq|$XcC)|N&0r~9{OfxCoM|Mw)O?#U#NZ2SVLc* zeoxnls|wOi?#z=_x-p04^|ll1xAqMs7i)4_nsOhtK*(D)jHuJmgYW;sUg{7+zXe<3 zis&%)Ncc`UV`IhA;Pojrpx^Dad)2Ki8r(Qo5i&iqdxGqPrEB#C_msI+iL9T2$nqK= z#T7eOkIuZC7R~0LS&%Nh=}`uYannw~%|TP>@p$`*mnJ_6sqNtNtM@%|K>fET$Ss1_ zP}mVPcJKrL^ng{>3OS({SW?O{vMH{@F!)qXbCu2`Vd*V(~<$ExA~o!*=CleS$(vxE(BwI;Pg@0ZZ=HV?X{n zZab0U%h80#B|_w{mhfVUoC<;~5$g6_O%_=%7w#nB4sONZcO%hnFZ^5T1*GO&VCmgh zA|&s};7ED4x~AP-zRtaiB~sK;$lV8j?F%CmQbH@R*uA1&YI-JUsiU}|i`{(A0r!dq za9+Jm*Wo4%YZ{)f=NFj3algPVx9+KOReKG*Pe zcCXIlt|KRyW^geG@?fc)RuFoi%K~*Q(fHBp{^w^J!Bu}ehU=rhNg*Y? z4wfeGcKVR84L(jXSca+JSH7$?&|Q4)b->+vZa7%Q$7p(*dH@zz>|)K$<;ZAZ5M_a4 zc+|hgDN=2+^Rqc}3;*4=AJ2KKMAVZeqO%t>4R1eRa6V(uFoKLhcqg!gi{)Ib(!bWR zy|C-!@emwew#tV#QobamypL?sY+t335!?Z!?)bYm5>^*0#3e#8LJkSr;A1<3C24|Z z4)Vo^-*v+XEtLm-_;|X}!E$k=Ynlb>6;2eksj{M=b7$tsE$2_We{8G7Vmh5ZIZJMt zI=^T=M>90t+mhgU_5U^s^~a>s4&AGsLq?V#}bAa_|qYbll*jha+AKsJ$0ya_=f zzzBrn{hlyQbA&=jCpp)9gE?0%_CI5}-M?0#uqCDYV_XhM4{ zg^-XsScMdID49%R$=Q-N_hosRd$4@DTpnavS!$;qq6-z4X!B;g7{Y*iHS>{IQKBzG zN56aCk;vlv9zS-GhSs%r{lnGCIGsE`<0y~C@16hNsB*9BIap=a%8zvglk57GxSOMs zFW2r+P>{~WLy*gX2@&yRshpPHgBIcXZphdXRd9VG1E#we^N!@Y#N7a!Fv> zdOKEmu=tqD@}Tt^ei&HY*rx%5a8r1J=#86JEs2hq=}gnd@O{4jowL?sHmJw8ll2=0 ztVti=d+waAQYX7^Wih!WRYU)ldRuwzT2-=YO~N{zcxjr_-#bs)OzUN7Bfy+#LAJk7 zTvv8;_o3OdUiq9tEajI?Q5bLbSR>!O(jr6G2Wth%Fg70Ts;xI{gO8n=8OzIq%j?L| zJ_rXpXqate3oh}oP+`$=?8Pa1Q3;T#^UKSI`E0=wFnk-|hf8xT%C{DjMd*Suz( zl_g^*>-lHTSns{k(c<^c*YSIQ@p~7nziY*NFO>shiC7@38lVAbPS$syJ#7gs z4!;))rtRjUy$l>IdsJ3Cgrwne(@{HR!b1Mieo6_cW7MH!65)##g>#CA8A)}x^h>K# z%FdBNUdpG+msR=huFBgqk9Pn@fxfEF-a^1r^pLh_sKur&tF3buQS);->(mGqC>u5n zQW#*N^y=4MW(lZr>9QW|c3rOC`#L2kEm&BoG9Z@(gLH9Y@d&-1${MxX+#^&Jk2tSwh3t!z>~1_onvjdEYYBCg7? z$h!8m>n-6|>;1E^Vwdh(CB!UoRdTG#IjeS*$omIkbln>^UJ`q~3GBKOxkV!>rSLTy zRhi{ANgQf)Ut{?(R+>7Lod@m-oxtj* zmk7Cx$&OZEU&Ly33bu-GH}h%SA1P79jk&mh_63R8Wkl%p;66jagc2qG`)L#A7rrHldgAzl2uD} zY}ud}mXOw$tiw6SXIVv5;anh=bsKV)rM^;;I@J zg#3P4Eb`?@$*tmyRl6LkMzGLYw_%Vj-@2JVZ=yv6EnLh`dAVL7JGWJ&DsxzTfL-sg zmFg3Q`EsI`*+DH%4g~eEK^+C=ru{ciXUBS4@KiWwDeFD zq=zNKAiErc8kEa`iD# zY}Gz0O`S<7t214=4ng}76~d`;H}}HQ{iG1S_3==p$Oku#J(B+RFKr8DuaH)7yQZKJ znr8!kkoI{rh8dFK;kSY;wH zjUu{slPL;&)M3GX@{5Apx^!8}Nj2!zEJ;>IYwrBqb7|^KAh7%<$iXMu-~-i6eOhY8 zjW(aHn+uyR_rEFz-1Di*8@=q}t{mwHzO#EcWwd9l-q14jr#n(Zzi=o`pd;XNAB(A8 z6IGR%0rvXKF658Y&F-iw@=xFPKC;Uf9-pWG=hg)RMUKy|{x_faKW}{CJ$Fvh)^+}9 zgO@TJcfI@eAF(PU|NGk~Qa^gbcWd6SkS&@3Gx@&hci;ZLgSGBs7{*-@Js7zVjdssL zWOoUy00*DxQ^)w|uI5qMV>9XLTa(|jF4ybkzL1Ni%SVT^^yqLO`KNyJsysM-s*qZ> z4(`V?^k~lyGSFOYU<|}^SE|kV%A*&O zz6q?giTRX}G|HF1duDCT`&3p~W($4E^8KqZ3I+uwu)2v*{>Rinnxc?nn$e^6ZhQQ~ zwRGd^qZHQ)s=i%Y^gVZG-EjFip1k;KdPl;a4hkn{2I)_}ddtyk22RnBt$UWb5iS$D znN9e)uUvNU-M7B4<Ks9`DpFimGksni<6TR>5Un_9pIWTFy;W9N&gWKB=Mv5t@{puHp^gS99-CFlzxI*a z^unbLe!aS%U!0sR_Ay$Ym?N;9L`)8QVT#BAb%53-ovq8|K1S1ZYgwqST*e7ltX<{K ziITEA1r|4_%H%&GHS}^d4kHLfm*E^rke>YkN%#rQx=oCCNmm4 z7q>^b>sEK?(Qz#jK|APzmJ6!V!paa+y$9#7`dwzQy0t{e^aUWWR!1-GTc#FP3arX~ z(}~R5y3Z42xxSnFV1+e9E=mdojpTh@7F z%LiGu3w4*{9&MfAhDBoy^$J_oxp$#t7fyXHlyXml(PFvolm`N}3 zv&(~4Bh-r&LXg4oiSx@GtQsZ4g-Qo&<@Dvs?z(O{d2z7v374$tZo@R)2_>%_EKT(G z(H&d*5r`_^338USm#=l@I`>D5Zok`|fGmld@ zk!OlRNEc%7cs+WQkD6 zQaPa`jDydK#dX$st(k;8bEFYoh@r~bejz8V=j=w2)k+Zd+D#qUAIc$~=C8`aDjp5x zT7MvXY+3Klh3Z!Ks=AV}sP+Y|iYz-ZluTjyKBqE&b+(CvrHKGz5M44;nhEP)lAW#e?M!vP9$jaBygj{+r-3Eu;-7cB4<+9fQA42Pa!3V<1Qx?sh>2d2i z>uBb?^Wdi}utbIJv}m-}1lrENqWYk|Tv_2Z4xQZti!)eeC^J~yBNanPdSTckmf{Te%`AqTk&t^M+!iALK47o#K`3UE*URf;Gwi~QTSQj_559<++6u(T} z8gzF%7+<-*cUm<#Mro;Xdj$xq_EQM350+Pvi?yrVf4{mlgOyt>{%^};GSlkU%jvB1 z%7A-%VMD|FYQ5ml`$X6LHDMimPGpKXtlWI?0;^Wvlk%6l+i*J=bB~@Y*0%0qg_%C# ze1c8cwL*9uw8CpPyZdhO_qiLpxYx_UPPLf9Dma`-Re8YwN+~N`57Ffgy`Lb1Iaxc8<)wo)vlz3^Gqc?p9Bt)j*X>TATj8t~Tq}QBG<%~D*0r169rzmE>Rweu zH0E+K@&Ze=)!Da{m&vK79B}9USM~1GLCCPKMTioi&#;4)HH!i&Uy;K~L@o)P*?jE{ zJlkSkDq9h9H)Qdn<`SWwLHDVJI9~R1)N@ z6$l?e&Xo27c89NYIfJlW`Kxm?-iV%hWacjYKV(HuJ3Et}>d`2E!ZDRHmFpdr_bt!O zZlSI~Vl6^n33Bi;99q}Ump0VbO5zG7!SE7fuRkx=B5b9DyP0?QU2X+F@O<*v2J(}76@+GOdm2$| zDYi1%irI;k2le?VbSQdWoZm<{u1Q-*4XbFS1JTH$ zHI>NH;;rxW^77J`WZ`0-607|C=pTDwJ>B-Iv&%$X5V$?+?N11+;pq9GD3)AWas_U=Hpjgv9QUK(a=&Q= zA7wZ@6{YkAF5Mm{zo^W>=1p(L;6{~>TKkrATqTU{8MH21hmZ-Kz&iMWFQll;D3=Mf ztYK}~+!c4IKeM!S!A!osz{;v4jYz!p!F$n&(NJmI_0z!`>d#tV+Vf{ky6o~`zbq`U zxCyMAzEn4D&C-{j?k6{dy~}Zg8s}NO5Le9XOhyST_sf1vUs#~^8~j@~q~2?;YvDB) z=5y)@Uvn(5!rljKa8>_(fAp{a-x#&PCx2n|h&mf4hZt>eub9aE?D$)+edQ^2aXEeaOzy;RAT#ot%a@0TIE_-w4#4K&TvUe74 zw#(GP(G=S=5QU3jRf8>^3{I@O672n6zeJA#P=J7A5sR}o8x@j;T^+#I9pSJw-R(8`@x5| zZW?aoa{YifU(;vO(t6R?=%Zy}Z;|KjLMb@H_nQ%8zR>TcEOMAS5EfTn2HJT^s52*LXu~Gw|9^g*H5n*i`Uhil{OA%D;l+{Pg4u1t!ji^z$-GeBjCO;lb?RwA5K1a@}qAY^GRRP!u0ab zZ*VX^Q@(7Nlyq~PlU=BP04_~=Y}pl}SgtMQuO{yN+;eHNfksBs`a}aj>#{ZtT_do< zKKR`Exo0OHdDrVFlwca+9F~;YQjK8yp~-1=TbgRPSR8ccWf1geYtDsoK8_l6>C4DD zEWZR6v+BC!p^M+1+Mif87-%iT>YwAHOvp2yKJ=4|)2nv==>$3CLtA{QD0oIftD)U_ z=^Kw{3l6S{(}|ZZ(wd=uM_DWuD*U)Bw+>OzB-i#+`g`Xc3q#I}z3`p0lw8;GQ`~() zZC-bi3)&&BxU>4gh5RA%5q^!z8HCn#eflwKkw$S3CD;qWCzQd87M@m@-`vmWWC2_X5EzuGuDwu>G?IfP zN{@=!*M8)&^X1<~)&9UP+4)8l4s)XNH#HKcvX*-#)3^W4x9%t4JLrQIAlb#}xT=d! zb60mIc$Nh>3{BJx8#c0m8xf0WSC=pAQDd2aW8vdl(@|-r_)OLM_syIMzG0x-L0TQv z-AfMnz>fVX3W%sjJ+Qb-yB|$NS*&m#DW@E%XPf$;Zoqk@4DeWRVLgUU!^Y#fC?!l>t#^b1}@J&bb?XHFV$R< zSH#k%pIh!)`PQyM7E7I%-@bnG?33rFS8s?XgKXK*!fe9i?7`8IRXfKgsEgt3m0xVw zyxI~X>;`c@iBBv-`ubx^#0X1F<+6t5T$R~$WwI^qRhd{kLa)01GE3~0-!osw`K-SF zsFf|t2G@JJj@)E-guGe2dn(jlxnmZ@haO*s`06R<3gf_8sg(T0* zVYSMG>bvmrvMVG{D|I$THgc~x;J!`mZ_2+PAG>w9pbn~eUn0raM-EVXrDRZ}cek}^ z=$=NS9WwZ2GLZv|7Y+U@E&C#KMvL98T90A3sj>^aU8K-b<;z>gCa2YFF8fmRQI#Jh zJmrp9M}b@>R2$g+?QpU3i!KkqyRb}H*$2xn_o|Z3S0$Bbx^zI!!h|zUMbS0CB(B&s z+Ol=1t?pGB7J;uF-ed_YhK1nt`337e^LyvZWpTw~@VXl|c3tl)FPJ(wn$%o4!AyQJ z_-5SGCo>f7i&U1&T+MuJM76kLlxTly`8AiuYP*zY1J**Aa#=+rPqO4*(YW1kdj)}I zu&~&(&lpkZCx(itHr>Zi}Ki~zVGSR z9(ZDce?R`=H+n9v7#4BWL}S_$%dQa4vR^!&W@j5YSmv_Oz9wmyqb5$>t4<-2q2SfI z4bY~cEf`};Fx|VpzmIp$6&r?C8?Slv$FA2Jhcn4dQ!Ja7rAO$PSv7`n*j<(I$YWCF z3+&82{-0hysYKRra#L`@-tyXndereOuO#K>M%DQNJ9kz?TrwzAyH)#~OQu0C;LJiQ zb?y44-#L%Po!Y}LPS~L;mn=KwJ%hscxJb^2ZEe)E!1cP zn!Gx(G=uQuNA5`FbIuN+GY!O*riZC1 zRGnuqoDjdR1=%s{xSex%Rr-${VPNz*BUqpJj=mG2E>*B6@%Et)$Qt3x=IwH*dFlKV zRR`8l99J4Ci}LxI2YhA|Dt&% zWE;{wdNBTVy;YN~8$bAbvH-ondmvcRFsZx~>DWn2Ug9(ORZ%AITxC!dok?oEh`~TD zrULsbl=jc69_D^QzKGw3R<_VgGGp>sGV1Jbs}3IHxAIv%nVGcMQLN0-apVHYw}G!p*1fDILYfADtU-VG6KUUn`$BSTpyk2sPPEyw-ZmAts&+ zc702drM71AqOu>PpmQAQ%%4_J+i$x~S|3`?>X7h?GLw*8b?m$k>aKfqrcPSgsOwGl zWX{6}s?@-jM|1)nzsb+B6=GuKpO2!|>mH9xxH@7q#XnCz8s1o{%?U&*e}aZYXvEEp znYp|1*=>~N0KNYj5rYkX8pwQ&Eg1z`H=P~?!5G(CnpLUJ_5SxJR22ORy8$cCQG<1> zf|ZTWE2F*&O@^|+!N4~t-eaqK;*><<6~96ZXgd6638Frv?vRy*rlfQ;nf6tw;_?0$ zbCmi^Z?DQyc;ERVIUcp0+FJViHtzZCkJ z%vy*2NQVwv+$NBObxNu!OIbhe5pBeIftEZ^i%TRvqW_tCo zL$>td;~r}$mymI~mgBx*1hMLqKKxQz?y0_nF`=I8PN}H|X4TvCn+z`%9RDr&oL%yr z`swDttue-)PwZNgc-~pd_ud!MfONJSIlIOMB?w#N@vEgLxBXT&7%WoiNF;VVgfbRN zi>*~l%#b|cru^%>Bj+?4;^*%z%P8D{>&q|v5Y55ugJbejOpsNq zDZvo$WU%K|A`_)e^O&Di7R@rnd*Bem)e|q6jzS`^a5D{wN7o>9Oeie9d1@-oqYnFB~71Ipw z;KPLrH6CpuK}mqr7VlVHcBKrPHyGUm=&V|9VVF7`V>HoBoC%h?FY^LeJp>snY-JhK zN0>{D<)FGyZVjNy9^9}}6<8V%s8FN`w~%3xZNY6cQt-PcufLB%J1v^*<>RU86vnaf zc;%*@2yFiPsrVP;Vj1S91f-JO5-Zz8w>~(PMn6 zU2&~}9Wga9F0&Q&|6!IIt4D**u1bHd3VmLU`)-Cbl=JpNa2C%x4PCZ$KqFOw>}fTa zV^{G_u1E{r+!Af)@MmH&`N9&h!^BR_q`V>)0t0$+4(DKjfT3DRgeYs~7-ld!DG8Bc zoWh;`x#+Vml$zPcwF>yADxT*C^(x^IF(>}u*1vB1Q@eN$;#vbTz9 zRg$YQ;h-S2SL5@#_yA8z;d^#x2bZtlJK3b8AeSnwKZzS*8l&1qbNZ4-G16J)UGu5ENB_xbK2lRKDdkteJk1E(W==Iy@fmBZ z6WeCtK#?i>($p{Wg;T}U6(RqwMI1w>yard;Es!+)G>wmkPpIBmKw--e0O?lkJr0-? zp~Eb2p#XKW`a-r$s*aME`g;lvEP1Y$RYGqUdwNJC3fz=YLzNet>%_gyL zpE&d9=tQ}YlrFQ_z)!O0G;Yb5WnA%M@feoXv73svhIV%QoeS2B#Hyy)2 zG9lthZT~DNGFeS8{hQJgmYYoD!dErsaFK%xSNk6N1qTGb*Xa&$ukZf(fz6x|5Dd@>gd`|mAm@%xV@GtM=J{LKxctl1O? z6Hes^EH<6Nr(m1utu{s>?%Rl5t6}_#Z1PpCqaSE6n1hU&i)@;)A{hVKQvlR zyG*QZ=`Lx!gZYJYiUxU6%D>vSQPzG}{S{TCQ|IFZq+_SAH$<1n#IhRF!kj*`~G$!!Ov>atUi#w7z$- znIF78)Bm|tC%51!risXCYKhQ@@tyPZcg_|m z1fb_t%pT`t#JRTVJub{2-&>Mue)`MC86bg9*3v>VlTvo{*I`-cV-5?Jhd=;a($F>= z{1k(W$TcUCc_=-3?e5Sw_PS=~f)4KsLfUkAazTxDZHIUwbpUCA?^;E`m$|! zKpz?R*TWOW!VOZo#;LXCo`^zXL}*q+t>u|RmE6?(K3XCY_b>iX3wX+aA`p5sOl)-GJ7C(Cd0RjtOqusH28Yb&d*p@i7{YYWQis;m{_ zi7MCFt^|4%)k0ntN@;IYSIh$5>anw>9@=T=$0*jR=F(53;oeN_OuYo*TCP)cC6V)e z-FQU!?Rs_vb-O3@^hv}wIqdk3=eR#@3&oPxm;YPu1T#ge9(@q+J#0%S;g{tZ-9D-N>_Z1j7d+;j>Jp~|(;MPz zts5wtAWW5ELkx~xN&e2D6sth|on`vHkClmSPS6)Fr^qi%`{UOlky;3s`Tx=3e*KLo(V{`~oEv{hlVMZtSu; zb1vqo#>{0}{h07BbwU(%x!1iWc(1X#5VEcCB1`CM88#RZE9A7xa4K=s#Gp0a1zfd` zPD8%C?5BxNUErpcveR|?cW-b7h^?yJns}G>tC)g93S;8LJm@oyLB6&oe6vRR2mAs(J>uy4Y?3_0k1VIrcL?L;qn6TJajR6;k?mOFK-a1w{N7f}_jwYc?NzbyVa z7#6Poc%Aw`>AyRjz|_5$mt?kKOnO^Z2Qjq@2Rj|;C*2R{3VwYe-TCRXQS!L)r_Ffz z8I{sq!{BoG&)(AQ0!jW#hZB~a@ZD@6s-p%Ys@-GVY75KrwgB05p_R~U&3J^>+XHL+ z#}oS~Rq4yQ?q9Zi<&TSyqf#zZE2?D~q1>#;PSr(lVxk1ZHHHyQVc!~IAc1h;ICRxn zZH0`A=!;+DA<5LO^|tZGCEccg^2%0+dv4qr>rZC)Rcm1vjcVJ4Iiywgom2P5>l_4p#BdzWqz8! z4@i6s)@O$mR-0WN%5yzjxAa#8!{#ZsJG}}-kVQDr8CbF=D~9z39&SeXh4Dxo2e9*j z&NT!LBIMtl4LGf`hW8B^)xDF=0;S0D#xdo+jj~4lxDO#Ib;ok;PM-kOh0+6KM|(zJ z<+T#aKtdI?4*txurQreN=00!NlGrU`Sa<8&bSKg=yTi;nE&Hx5SWhH-cVzJ|HytZa zU#iGH+zpflOF*b`bG;(BZv&@mY0AUO;WDfvz)nCeK;swX7+(DGncZDbSk&%8k4X_O zzKtOgJZTDI?5I6SlY0E)!uPmpP~qOTkd{06>Z+)LR|-Zsg`(;;xbcU?ZVLVZ zw{)XS&C#bc3JM)u|y9?6U6BQCo<5N*fq~=uF9B93nn^G(m zsW?K*ilME@m!+dD3y&PouKsKIW8b>Y8aH^@*l~bzjJc`fxSXLTgEr>7&5&Es$Z9tC zokQt)f`$V3JEpeYh#5*9J;wt4&A(r&ylbh#TH*4TTb@^Y&?oB9nyjF2e{5_{@cH^tL%5IjR$&6gg(!XAMJg{j|96_HbyH1 zyBT27m5nseY47GWud++($!oef9YlSKxA9~J1MCHLEY{(S`tMr-7?L_@d0Zt=YI$ z)$mI4GES_EZFN+#o1gavXKk^hVM{KxTrOAZJciTT?Vh~gmS`kQ%VOE^Px6#dTRNUX z0qx}s4SH~+1Oy8&a>Zrnp=Puz7uZA=F{$PGGf9Be25mZ`e4bC&&mpREfp8feXpq3$ zzjlauyEV;y-0N;zWu4`;XXG58|Li5k9ciS}D;g34Sy^~jx4eBfYNw%%e|<6W(|%(pO19M?RnZA&6ZThh4^V7LYo>nrG8TA~=KW4@?QZq0l01hG zCc-(+fy@~*64&={XDhcOBeaU!PInP~r$9g**K-7iuFd1ik-$b$aYAfeRhS4hW7Y~u z{R6x}B6^cRFQbwr^$;wQox=)8`v?)r)OSR+t}+Nu`)8gOuP8^>Y|fNbHfnAFXn&$0 z-!@AS!ivzyRaL;x`m01H4Q+fn z=HiI`b{Ur{N6qTYXJ+R9!{ru{hrv7M^mf)1>6vTW*jKZ?_|dP_;bKOs`^{?&50k_; zF4<1^-$KH$f(zp+gOOr{7?oGyy8N?XERg73&!wM|LJBLnJuzerUcOY>(~y|=iCAe%&hzNT%~8$P@pKVOLM^SOM+H|x1d zxZ3;N$IZWEEeKQlSxl3jUsy3Z&Ww+x-d2o%sL1n^YUi5Ea#MpEng5&-zXHKnN6v5v zujyXWe6-|JL||lQ4j(~bat&R0M&4yaTf55z}`U4sk3w5%(51q@zAXfJoEbf zaTMKgpuPSAvZs%;gPpW3i&}eU>vI-b!#afx`*S9V!d;n6$ZFNY*M?|Hr{p|tp_m17 z<2-*%Y=Er4KM1+pko=WN&}z9Mcq4l84X56Hm93Xz@w6neibo&66}AoGu|zBuZi`2J zqUDDcWno6>;Fi7Ag&5(~az|AxsS7`gX?b3F@xt42#}!o)R+oh4QFAjNJk537FLae0 zgkYY>d3mU|R*zepl?xu-c7(a=8m=aeZ`J5_1kooc%vC}6r?Vz^G3X82do4l46d2FN zh=<+_^=$^k@^WpHfcRvsz^g@ucG-^}D{Sc71O1&TQ|M z{ls6szG}wW3`P{ap2PK?nV@+Xn}-}sq+UG(UN>paP?AXO3T!L)u>rWpH)DzWV!N2Q z!HmU!eVrFaZAs;=CPPZH>lrF*>#}a#bwyfG#p*iM7@gAK#t5tfB@-G^P7`@Ypc}@{ z$=MCxT}rIILz>gVDkE&#OrKJd*Q^32-@GaNs$%fh5mzRZ;zHQJoVu3!Oz2^)>D#g= z0P%#&UlVMx`X@HC0BbYVcAv2Th^7i~q}&vHcY0-W-ZW4v3y7Ts9IkdGUW|Lku+xsQ zMlWTEMC6{;z(yF;{kTHc>mP!)J1!YMtKN~k(o=|p+(lJEj_>e#8KggH0bx?gF)5X4 zI{d)wq|xZZTo<3$aP)AEY>+tW5KtsCk-;{2?97S3abVK3*KXt>$uS`JYdm92Nebac zu<7}xZtbK(1+f*tH6Z;efyvz*c^jE|Fqg_P+#$)3~= z^y}KM%$&CT^_7B1rA08h)z~2NFI}P)shdAV{;ktB3&G4gJD<+OQE&t43`4tkuBVl5jfxgF}m1 zjLVmhv$DLEvC(<0h;C?@R%$3z%}oD%eZVCtK} zZQ5aD3D&*u=prfa%bGinmC&$MN=A%@TUYI{RsAOy@$U#sWgRQtFT1-xNa8e@308F< zdU-3t7;~*NM)-)`;ucCHH6m-5YsI6JTp5sNJREwc@0m#a}v2)rWCImKs)TT%Yz|1tINV>^A>NayW!1ytzVcK6Rp3Ur=lk^#%w0W z51Lkx+BJLc!xm2R?>LaVQY0W91$G|qI;UN9_t@JgBe!~P{?@T~HfuBS0gyXMd9l6B zxZFQzvOh%R$lcT7iX7Vb?WP9~eN^b!nxbu5Bk{-dy?@)# zuK~mgHOGSW3kw4i{(hWGLPW-2L{K~8R;wJ#k=TkyuLAxy&+_dP!4!RGPaAKJ%7U}? zY`G*T->-xeQ!y6tMIcrgy(3ts?Bg(<8$r>}L*f--zHIxUjXcKzZ35r|aW!WPhIb$+ z`jKEE563j$UE-n*Keh3rm<~t#iuI%okgqW-TaA^k$y%e5`(`|6&NDzlW6*N`Ifi7L zv+r+l{mk=m$YzBAzy^ijd%hhmstM9b-jiW&Et2tWq zs?)`r0gfU1Pe1m5hHp!l(en(ZGu`as35W#h`qfibHsb_oZb#^{ID~B|f`i%GpC*o7 zuLRv5ph-sVx-Gllb70dIxefB<)tBvO#UDce8-NZF=)T!`>~cFfZ29x_(~P%-@4k3s z3^2FtZorWL!{A3MbDl|*E9>8w!upI&bKA9ikQGbA1CQb~NUOHc5YsV`)JbOkT_!@e zpmtLMN%t+UqJ0_Ijv!HTok`kBHOR<2UFW@ig9|x@tT4eP*O;AEg#X;3)|#wr#GQ#5 zj-ZMA`zuUBuWl*kRtoK=3fG&wJYciC=gpU^<4td$r|2o)wNW$2;(F3OeNGL#*~^lc zjuDm5ib8~qYI)^152uBmTNVw?)A@3*AJLRVSlbuO5UEP7lf_XqRNFf>bM z^Cl|$ajKXOLz)@*Ay1i(43*`WnSI*cd#>={futMKw01v^%A$qky662apJUQ6@OxN* zUCV(d-4q{=roPy2rMf*)BB`5TZyb&{KrS(3Z2Qal$WF7#k;ajOj0w&<(}o(RHhOS@ zCPew3R&BJX7>+Gmnw&<|wU|{AM(x;fU>g8=yfoh04>@YLHqtnbKW`S-w8k)JM&KIN zm1(GOlDcisUCIl2gNU7oD5C56^2~kloj-GJv$#OabwoLqc=lcVXUUReg zTCPhD7AeROn6Qmb8$($F>NZE@?u+0(ZJM?VeWyB}<>UDgW4o8}IfQp1y^WHS+EgCo z2QZoD0JmMLtyhbeu%r$2CwcaAOp}JhLQzrYm?m6;KOZz=sq)ZehDJ?mukaa1rr|V{; zt^fVJB0xLN3`nPZb=juRtphFB_)%)VlPU=Tb?lP2xYpvgeR(wNe{j+1ps;JvRTRCd zd1=5V(vq@668pO`Ro(XRNXyNaF|Qn%K<1slniXsxX@!7e$Ff&JN}gf|t&#VIX0Ea9 z)fDSAe{brSFGDV@`xQ=YQIvi2b2QjEnOHI>T(bl@Dh>%CAlsjE}*pi|}3;-ZQ z;Y3H~goOpt3^;BV8AxioW%aYFVHLoXk-XPgTQ#T9^Pi9q+&;=OVS@*fu_d9$-Ag=0B#M}yWz z%$IA_-*QIwW48p<`JZNRVQDhzH`5ns=9TvMr;R<{cHDMjVeJOWIt~O*IYpP%LiSV* zozym;-$TgdKLLvSow?EUZ9Hr09O&1p%~DRXgOpK52Gtem4}bHbsUN*ysbMe) zWvNKe>KJh)La=gXKKV1W$)UlUJ_e=~J-@V?*;OO+-chL%T9OU^F%w1hx3$cvPETh- z7pL}jVy2)*(-2N1uAI8UL4|XSI1YPHU5GAH65iXhhqtnSQJ0)5ns&E@s`Q@teqvD$Q;sK{h-+?}t}41Ix-W8sXgqX(usXGsJ6N)!!( zLBjm!-pr+hUA^b}$v+kS{!BVj)O(MJc|`Sxgd9Se#$-72=QjaH6{_9%V^Ylw0uzjZ z78<+5lbW2`Ujy-V1T9qyD_(mmfvMV58hs6E(sp5_5mgF5FP2`(Kr8?)FbP5mIx@k| zPf`8oOSHV+iR&Nb{fP!tDIcYV>9j1gd*za_c7l+Ob$tnLDhQ|r2`N$>MjQ-c?I0tj zJhJ-RSK|WNPFh*E)(iEjm>kz|8prGw=e?df8J&hmSY7?<1a?6=ClAjldK>=3k(ea* zY9Z}BJ}(6!>b(7x#J?=(-e+~dgG2xlUB2XtQ&L5R?9nK3%GC}@k?3lzmA|DuBhvCe zcak1^CRcu?^`Aoro7+^tNLAst14$ro=>0u3Qd~ObaLmperGcIE_dsSW-*$F1E#+gQ z&*3ZVvB^CEXr|u&m*P!_1%*oF4%ymA`TO1%(VzJA{*^lQe^)g97UhN17*qFfon^HM z7SHY_+&dOCdRypR16bn@@v``2=!9SP0sJat^zp1QnwBLU>O!(nM*O>cf1E>cfQ?SG z+t}J~6@Mn|T%kO=kU2|xc`{Ns;Vbby0341HB>8)#S1&{W^>Gi8=L=pV7s^$R3M+bp zHJ!`xj{7-n$r)YDCDq!lC4@2HrzYLqg>=XDJo0F6L0d>7m7RB!XE-T_Z1+imeq<@z z)bsUaB{XZ0t#1FhUC_Yq`9UTTBti#F#@6@?zr#hNq7JtV!@Y*AY%;D8WyK)Rgz0|i z4#iphT-mR4R&*(gpRc|KGt=gOO!GMVa?8jHMVgvFVcCuGqA}zcwOzaPvlr%Pan>rN zzgT;+-dt9Ix$Z!3_oQY|?{IrgdL^+aWiw~dapO+0uk^dnrHFaJSmcgjSj9n>$jYTC=x8Y``Hi4~ zL^=ATZ?;rcA+*4Tjh8pr-deuM-X7!vtdl{o;@tdi+N*0BuoRngXy=17$jO$kPd2{` zJYR7)JiR3L;d+2kn!3Nd$>{+45kQ~DY&O_G+NPO}MTu~#d?(M2m2j`2k)OMCw-p0@ zS^^v&bP2CUR)qU&KU4qfTFP7=D3Jq36A@&H2k_Sh&^e^WdgH~(sow*+)&TFvj)DWt zHx3yfP&X|g3rNYLL*Bxx_SR64%lFb6s{-*;A_5FZ5wHQsLkihcwB)FhPixV-dBP}H z01@PX2+)~#v#%#3@%rx#&9W~@tF^l1KDjP|KpP1Eoobdp9HhDC_iqR;QHVu;%Gf{z z9V(JngFvJ^gJ(#C6i$29GO~~SZ5W{GC}6n<5-|OUNk;eeu^JaN1&;IYXdqC- zf6spxiEsM&!&dkcuXxIH;Ol)E&GzmvQzW8i7$7|WfD8gneH`fwn=$U;6OWX1fr_72 zISccXiFw0=0zUtHW)>B3;#R#7lk(SL1}wtcMS@@LF@l1jhM<_$QM~Mylcjgb z;7)F#UF@K}J6fIqe=HbK0P_C?4aRSr%4q8ksB0dH_5xbS^0 zHZT^k|Bc1gBqa~yH){it$Wftt+&?=V{L^UrQ0NB?-nwVOLX?$xi6Fqknql4mlG3Yv zb*I+&Qjr?ONwW4b&}deTFOzrVJ?+x^Pm=%atQ4-wyzr!7d$t|%(KZpWKt>Eu2paG% z1bIZ1jH%D@%d|>UkXtRk_Y%!n`2gzv_@8Uf*Z`=aKa_d2xYk&HAc8=|0IekGGEKdX zUz(_(r8{7-JMg z?JI>e7mijTHp!hk3}_YkzxncmIjvPQGwf3t;IsczU#{Frg`$$v@ujq8gcK-1_&;Y9 zvuJG1`bzujJQyaT5EzQhe?y7?A$5mD!mB5Rh72+UC|yAT=F)kUI20BOz@XmzyFb=x zqXi;S{3+b;nNk?gFMvlDhzLBEGw%xrWPdu?Exz2z1@GN&apHpk_ZY>nQm0oa(J)5WITJj2~2p~ z|4#nuMxtb=-s39jc~V9KLRIlUd)0rVQUCFbi>kQJEbQ3omN&fxc*ZF}6AH2*z>5@! zkq;rCqIUUsy!-N91`$;KPf0nZ>x|dLF=0XTl7(omm({d~`gAcp@}i&sy?@VP%9kOe zIQYisb3=k&-#3!>I?C_XPkGJCi@=Tq18NL=4+7OoBd0RZxbzP{E&2V8jdfDRJ=BWc z-JQPmmran8Cn1%QtO!ZFF^UK?a#bI>a1Dm4rpbJ#1%WL7IYy4D2db#Zd9~S<46l_Q zgh~~vm!DA~L$UisK8w@|+-QdWIvqxe;VpMDQ8!o^61ZGANlN|izp}xgfaFU{)LtX{ z0S^I6G!}tB(Hn}S!!%Mf(`aDF0h(@%s?GHG8*Mq9pl<&EhO%W0pNpkxmAKk<+2DTK zZ1yVlp#D8S! z*?I)RWdPwn54AFK)r)m%u~=!c-&ExeHSk@_XRK7kW-Q6>*xA}O5O6y9Q)?}8X$`Bx zyeKB@<$qoA`dz<)nQPS7F1d;vOyCI=@jQI?Xvp4rBn&IbR5ZNS*WuPAf-wn|?u`y=Vn zTepm|jP$($$b}Tpq6`ci|_icUaQ%8L5>dFd=E#s-|OX>*Ue2=>vPTK zJSTz0uTEUqi{B{YLXNSPx@Fpk_1_H~Tq6zIx=)Gu z!vOr{rPJ0ma+APA%3Gj%v{0=%_F5#N9$}595g(BmwE7l!XwPTUqE)8i+x064w)iju zTV*4jys`8|eCZOwD?J!S&YgG6=*;67nW+XxhBe(0gNHxG$wF|^`pRPbR4q6xvFnRC zW{ZS{uHGuCbboSyc@I!&gJ1)&QX)cPq%Q+|bySy*tVG!8O-}Np&J@(*vm^TnZ|vfY za8z%;XE(4Z&Sm>N-MTI`J@;0`JQqF)pPil1&GMJGWj{a*7s%Y?eVLOj)U)N%bo#L= zCk{f5glH0DAA`bm$x2;?!u$ZDFYkNj7ySS^X^5#j!pVp5pcr~Jy#f}7{zb~s;?0vVj zgry@dVRBl8%IWD!+g!5~_l&sR6!;CD0~tVEJue z=bQNGd{)}7n54zTEvN3wkZ};ffPvep>=UqTNe`0?7XT1`fGjZRqBRJ@fNb)O#E z5#!Bl0lzi-g*M*<)R>}&$8ov>1-fdi-#YrA)2`9|UoT0#(>BmWkwFK4F0Y6{6+OMO zxq^SD#iG&Ge?Fw`D5<7|f!%_5$O_ge(JbjQ1OUDp;ZFMa^VeOhrdQegHuMdt1?;;>OLj&H9_a165=j*B1GYS6o7DY?QRLw7?1yokt7Q zY-nRMe#3nGZ14XkCCPAEiR4|%nU=Cf@>Qa;40^c}Grsf6b_vp*@AcK-b}6P??ZX3M z8&GRE|L7_&BsEuBZpmu`_1i7SYcnKaZZ4dfO0TkNG;}3s)&?!VMZ*Q5Spu;B?skGN zMWySmysr3+g-)q?wqE7sNI5re}Yk6YO8eXd%xw60&p!Fae?>W6L6XM4@2(U?ypKGrM=Wz>#9AzdqLuZ@*IAUDe|3+G9Nt znBe83w|IQuZymmRql^HUdATov1c|#JnlX1Cb*I8d*l=LXbe3VNa;bh^ZhF;vEb+1H39t6q|go|Ve}TIwX&eb;d|)3)&xbj>@1`^EK&a;Eh=zq=(lY39=*x1Cv> z4X1$b1yjssL7ZpR2j*{?rJeqsqM$bIb?-8bcW`?-1OroT8Fvh?B#RflFPj5vN@icO zs~nmhI4@l>U=GcIse%|Q-Ieq#!$6Usj;5l+D_l}5M=jS|!kF`8qBjzc<^x)VIi7V_ zVYRIBwh#p+y5IFjdptVkUDLJJr8>2u7R1(U-EqD0r)M=Kt&=Bhv}td9zf*m^gf1Bk zQMu#+>mEJtFot+8Gku+TEJL4{*Cuy_Hd|~*;vw_Ja3qIf8qyrx7RsA|G~%Gqx9S2g zl$e-%-Bk6K2A~-+hG2$yArPfKh&!HKoVrqaKa7$Z&jAyWzwe2Te{%6=we3W&3d>(u zHK|eYq+x00`AGQn+1_H--C)Cf+6^Z_wniLrS4}26Jbb*`ct^2y!vSv9;Z#JRTy}3? zF{_~L)0U8bWyIB}vut&(tnibs;bJzioj@9Pr47`FXmZ1v3&PzfepvMcmj0QK=Wiy= z9Cg$7HT|R}>YN%t?alga;(%c@$`C)%YfkUeNG(0a6+E@E#}qaSr$?}o1NtV>{l=+u z+vIwor!Y7%t5jKwnc-OA2qQk>tk|VmmIcm?_p#}(h6USoE`8j671_QA4h0MiG>Ru& zy}=EgYcnS5Cxq%zw^X}`ZqK_;9yLzV?oEa4F9uO^A{gXh8AV!+U`EZ2Wyr!&3s7EW zuZ*aPfc7$~g_$^bla$o-8@}vQpj2Enn@tY43YD+0(uQ@yyNwm?npmn_)(F@0Pecql zm|9X~;5pcfyUo-p+*@^xaO9kc!ECvU)&+PO7{-_PVzG408uGUe>2W?qydqrntG?w8jn zn{`K=62&r8d#y5l$Vzk>yX*Q%+t$ULh3^2n&%Ozo_Lgr}F!&8FD+~kK19J@?XQNRmSYFl%UGiRIWNB${kSDYz#@eXjiV%=|K5j*H2c@REaIH@)BO>2me zmJr;FBtd)+tCGi7ba74&kr#6OU$~~0etsieHnAv15132l)%(C$>%uqr!)kGF4!dpI zh_o4jLK#JDJ7DFAHYj;~(Me=WGu=7f3lTCD^!KXVDEE|0x+;a^OIhfK_ubbvzS+&) z=NGM`Gqz`0?b<=Uac81JnZTr{WCu9xPu*`y=d`9DTt2@h^FPZdADa0kAagDrUzDLh zEVFG+{c*K#?&~iSXhwFhyo;i3KTuhZ*nP|5C@&)nHY%`NxjyfYwOXj#P=D3PM1*wP zAZmTO`BN^aW7=$5WcSF~hGW^bmwaj`+t@R!Em?3 z`x*83yhQljprBpS20!WYnP;#lS>w8pi%dN@>d0>7E@U%?YgH~ZZ83rroI?o9n4|B7 z@mPOMOCeHF7}TV5d$18nV2G?xIqWT0cvjT-95d%(uTpC3nyUk+9uojJu0)l@WSB8e z3>L*vev9_!6Z_NDPc}%?G)k#@w~wO(0`A)dCiQ3roM~dT{chvD-Vo7ZWthm2AZ`a& zXog^k3sXnjBM7rN0Ipwzu=xQ|e+gUUU2`iB{@bOc%Y*dGhGt38L~?1EB@hDC(6i&u zZ>28H8&zKwOV|&FNDiOiSSOZu`q|)Xzjb53&j6udRDP>_^f)jUrhS~T zT|GyR?1Lu5Aw>cp$`sgvjlUPqGhF7!2RMWNSMQ2F2lD_eg18Js3}%|UkrdHen8(N)!cJXgZJ_5$5$C#Fr7;mT~bi zCYDSOhOZ4&PoN198QJ8ZhY?5}GiGK!-=dk;(M8cB_9v@PRbyW9a1lZ$>XWvMV_O%^>Ssp=q05_r9t?|MF9z!PpV z3ofCPfrIMw`Y|bsI}d9zZpWPk&?^OQnwD z`W~nfx#S?pQ4To>KFJSsHVJF0;4xm03~EXT!!*I~^N=)oH0cr7QuR648Z8OZL=4@3 ze?O`jkNZ$!1X$5W5epwa+`~WmQHWo;vXw~^8Oc#74bDyTp03wk8-xn+;PE?{WhK6d zEo7&&FC?{zhF=NB&9S0(Ng}D?NphiXrAb1qa{rOLVo!hz&>~2afaK`KMsc(pa$qBW zRFdUKup#YqT)t(3bHBg4QZ*}j{0>x)65Fw@KI`lwYp6?E0F^?ul0~J6rW>H^ru`e! zB;jDelSkIYn(oq;poOLYDY2JszP~s*NM$;N65}AQ`zj=dt(H|v4ju(nPxPR+_f+rI&!2BszF+M=K_(A^GzNG%5Z=Xi1O;gVZaO z9^pFNc#24G#yCkIREea7!8-{y<$KSRt?~sUYK4;*nxqCP@%V zBMC@BC}4QSXb(}WLk<8BZ+}_$D}zf)UtBG3mj&p-@vPBngnU7 zSPh2EST8gRoUg~mwSR2m#@(e3P5Klv1tL%eh$L}i1QO>u z6vW5e&pe(XxlZog5H2AXMmjZeB2g@+fD}iAYCy2zFb;oS9RIGYIl45Px`#Byf zjYb6W(oy9)fqwW{Cg7GOhA#mBZ^}F=zr>5~NP(P}P0d#4?G3lv)y! zYH+*Jp27e9*y6Wy%X(BS0OX~L75oUkU&@ok6=9^uoNcRsYsrGzkvyGqRTSy|rD+4G zS`wsA=o%c1k3RU|9(1$rg&Kf`f}ni#VJ<&(?;hXEB?s8D^|7qC5AeP|hz|^eK~>31 z7RkKh_a7)HqgO^#-sCXoe3pWOLAh<#aVa#^YXP!745KtbB)e0ocsxt3&>~2kpbxzq z<(xgD{^4JMb@CmU3#7Z=1HRwc2GZgM)SvD(IPBFgynX;%*)yJ1>j&r84xgqG|sW$E2>iZqMD43n@K z3GxG|Gg2u-46`i-pH~4zkvSf@<;U-h4L}pnB1ny}GrBSwYH#2F*+2N>NY}zeGv4D@ zM}QiK|@Pb&VutKP<>!)AZxpgO02~Wu45`$-;4iKXSDOfSu75y%K9bij8xtv+u&WGw}Tv{%+Q>EEoXaliR@a$zPcLUe7A< z{PM?;7@vp0)1L#WXC;(_kt>(rd*Ap`YhM|S;53@Sj{7U`q( z6qqB37!(Mk!VHxF?G9moxS_g9iy&3t$>>U|o!jSZmrINcBpDcz18Nv0K7H~HB+6IB zItxP<*SAz+mr(uP1IPNid=mVWk{79gQ$v>>m8T2{7cMTe<`o7&pKscGaACD_(J^!_a$uSk;QdbAwdK@z1x zB_xa8Y^X736Tmd>$T+VuV<5ZikHp~l$xAQ7`+wnML!bE6Z`{Lr)|YKteB`ZLA)YXHSrUAawkt8Pt3h_* zI1J+Nd39Z^4_ts2LCORlIvD=DFMs9eg2js?_r3pv6%m6}DIqx;M2>8XUcHQ7u5ZGY zM;<#EUc0HHN+-GYNOqC8TEea5AhZZlCQ@&|)XyZTs&Y8O-jLmpw7~Xymf!tkC7;M8 z2}uzmiB+S-OLFIW(I6MZgWw&NLqN&l}pAye%&bE zx~I`&)$~%Mxo8oj1d>AsBNA5*G7b@L8B|H2@E~dek%THHV&fE&qYef+r{C9-zzuX2 z6FCa?=0sK`D4hpOp9iI;$SJELdxRj0$_>UMmJEGPVL6emj-DzViIOh#Rum*9WF!W; zafujd9ApMO(QI#3A+!im0;#tT^@C+RE{IVnyx1^(ZOED04YcLj6mZmepi&iwT+4JW zcuv@s_xM(<>w_wgR=J{Sl`EP#FF_VA(&TwIS<<8sVg zLyJp+K@24^jY}DDJ24!z2vPw0$?xvAsG@p}!2E53DAj;$3_djiP$R=w*eL$aJ-(ao z?}Hj3GZnM~y(mP`6%L&!NV-tl97SO=1||$*_Yj+JQ$Q111j&P1lOqFP5PR>Aiat_v za%3QlV!ZpF!0jK2K??=ZN>8yEE2jQ=hIbS|-{_|fN^R+!E0Xb~h0Aw6n1aZFJd8pbe+kL@ORZiCRJdV?(~ zQUEQ2q`^3AY$MSNm+Tag@wvKlD*(ndKiiTb`OzXs8mz+7oO1;)raozPSFLgpR{j3Q z71f?cxNZn?bZaDhbZc)_y&$Pq(C7-{yQsv`&(%_*DZ1N4t~saMC2zW&?y?|tP{ zYa?)-Vcr#v+juk*H5FJVajKdQkuMI(y=x>Td=rbu{`>ORpenHD5G1b)ml6@1P{Wr= z(#=pI*ycV+JojrcWnp{R*LLg9*pGkq$dO;UbI*pazFBg@p80}#Ly-Glk8EQMc3{)# z6=E-)1Mu@66Mha?@YR(F{u|nGJkrl}*i%V%sG(~Suk43LgR*jSQyDCy;p&zBySh=8 z^fg%spM^T$4fwW3?pxDy`pAj?!@qLpI$zTB^!fvX^Dea{7p_;aXkLg7Z$u8tjO`Ce zq293E4V`irLQ-4aO5>Kvw{ZoA9(W^CcEHavtq3#$hL&HIGWEu*Sf)|kZ?;Ju&MbI| zUL#3h#qEn}tj8|Rr~lx3P`O-95F!Wnz(FKJlt@8yR?uWFRGQx>`Nae;xg?<>5Q(Hl zDc61Fk|Z^iXn0R&qNHGXs=YH=2E7Rc(G5KY)u1Cq>GLsX)87$k+JhKN= z(by3~Z@ik7N~q;dNjnqm%fXbVtFJTJ3&F4lIu`o`Nm4#-UgvwcmLN28&6%^Cq(vdn zlwd69G89F!tNEqGXuH1q-iSn@2sp4oJyqR&-qpfDLMs0JV?;O--!ki$gOv*+E4R$* zDyT=r|BM8dWSjKiWqwe+VhHlq!@qp{yp7bmk{}zgL9+_dK62}?IV0DIB)V>aT%t;# z3dW$GRO5|ml+++)-*h!aF@#pXU@t}-Ji#_l6A5S()Tt@-eMkdP1*m?WPx2B$1WBay zICx2BLe&B>iKz6{d{wnvNf6X&w`FhBRKtZ}a&y*fNGyvnhDo!x@@O$B(zAJc+~Ry7 zF)<1C29XdOBzVmMVCOyy?5z)jd}=*NZ-2yI-r59#YrlyqPqHD#dJ2hXnMQ2c=3g6t zY9WjJKP^Qh+d1lQSHRy!6-%H?^=tD|inx*>xza-|GOLkl74K;&q(EgbWtc87UEsK9 zNX^oc^-c3gB00dg1c9l&z$Om?!`B&*M&bkTcw^vYCt+%wQsc{?Z@f|vS(B4foH1z+ z%mJ2dGsQAHvc}+(swKeLXXm37aUDT6=IQBmu8B$ONm@9dx=aac3Q~Nw?T{O1v+Svc z*Fh1adr%=o>eX|TzQJr_NIttL3LzvvFFaj|$@)k&BFDsNoYcG6l1;x_ z)4(2M)6FVNiiA_X)Hd38e)qlb`fvAcg?Rwi5d_t%OfN%obqA%8aOKjJU}NSeOqgS0 z88b%;N){`p*EOliMj6p^&W-KZWydGS#%oRzA_w-?An~i<=PyscAXe5V~+F z_R*5&g@3!IuS(=h_Pu^1dIueKCb^TKmuz8n(}groSjraFIa*!U}!ns!+G6VUq`}8aPCqOq0Xc(Z!doy{j&>N#%k( zT8^4UQo~|CE_+!V_eF6#3ND7L2*QBxUSs&gYmHAg1hPG{?T=!ha+tYwW5u)(~J7A794^KKqR?%@NWks zNqQa)*)S1>7EvLPYRW3g3}Y0d@o2XgqNmS>ho6LY>n}5sgVZUh!fK>Mk_Fz+!=(8M zbXI&gLlp5Io`)pMV(oz9DkMcI7@0j+2c@1?5E!(_jLBT(7Dk*ha5xogWqWERJ!sHW%F;-B z6qg`@X%$&E12jS_oR%ugls&HXXt{2$c*8-JkNkH#W#K7 zl9@y)!#c?}p>!0qF+Y8Q?f64wSJlO&TvpK3(TcFmkU{iKiYvma-EIHG*NiZs# zbT@c}ZVJUoCa-A`|EWv3UA~>zD7Zp`7z&Hh+7ZJNW9w3eNLGx|O-!n~NMTQ=7x7xv z#EeJ9$U(CfVFY*2TubW*Zu`Ih{?IIs50S!I*!Z_ZguD<0IqF#GRnm{5>T=AM5{0VC zbEuhN?qJG}3vP0@%_0RSh$QI57*nn35sVq)aOO%i%M}EXEiP`b$o>S8YSKHnJ{G_C z4bP*CClv_zg=!$YQiJ7I#C-rWsefIylwf)14yCk8pS9d;9vpEod4+vh#8< zoGV^CdMY;m@Rk2^fA3>o55+$7Wj}oALJ0gw5)Z0NQjwSj5rgK}_WQhXnX&D)oX(3> zEsGhOAuA~_^PYONwDf2Iq)C)w*2Jv+G--~)_!CfLOkBLcWIi)f+ALDe$igV>{r`N$ zU@FO?oX<4sQDg3+HIXC654a|0t7!xY+zh{wwHe8M-{hXHn-2`eyT@2;#~WR+6PJ6& zgAfRKg>)by5MgMc*Cb^YDnVFg1)m9;&~y0iSU=SIoO?FMEN;$9&5%Zm1cX`R2m;nP zlH`Tly_}oY6SY>Y$a`gKS{VDJP1*a4saTxB;P|MIaoNhKQ;ya^YBjB6@dJ>!20Pp$ zMVexyAAjtQZYE2g!Ixhsbc~ahfJ)UNL$e}V&If^(D*+RZccf?x2a*c zHQ5HYB-${BqQu*Oy}xclX#KZr+NZtqas*X^9pXGEzg=8XkoU=xa5jPhMFG>n6g` zW-8PmchtL(nfI0t(Ab6nahem~DS9kx@XXIl``NUbWx>8$+Z_b5J+S5W;8U3~EWs!; zYS&1i5+%ccnKGhymXW;Q+xHlRe5_aYut?IMxEEZ2rVzwrW>oPq2zc~pvExuR*s7}D z16rbRN(Je>)=a-U<&M^M3Il?N>5qc`ZcNx8g+O<=(Nh#5Ihb~eULEzUTvxSwyBM-; zk4WZc@fjFJ=04GqCiqqFOCa%W`QAtMD}I$SaU7{ zgO)MVJ0(l(@wFTLVQ%q(V&A7tUd`RLb7KFtDAW;Tw8MqZ6;1XlGrzLN;2=$WV@OHW zA>KjXzJD9Alorjcgs&w=ihd5YfPp0s_`~R9`E>SvQoRU_Lww9@l6QU!xqfkP#f9wZ zf#wiIX2Qkij2uMyaE8{-&2m8AEDU<>R;P@jc~qqP=6X-C%*t zU36?N6Lc1Wqgvs;o#BijG-90RhipkI|R=M&_AwIOexBdghx*rFJ^eW}_*O z5N|-((1f%I5B1#_MPIm(Ah`rdV_Vzez+ko=k`Jkg%eli-BdBT}tS3p(9xeXejaILw z(FrvMd9C8HSQp;YZ$OS}rK8)a7|{LzZ->&AD?JFLdWo-R<_o5-KaBTm745)IGy*O_ z!wE9fXU9JrX9s$#9-D~E2S^7kWNQS1(q2n9i{@w1gGx=z@+S4-1KkS^MEqI+Uj6<} zaOP)SP*228cEOQ|EgE5i#Eo<8k zF-iV4+D9deOLd5iLep}wOx?Z#sLTGVNH6@St8cME>`kIVyvnn>-iYE?Vx_*5RIL=+ zBfhpp*}Jz*?%&pnX8faF+xts?Ms6)_bhF5L^AtP zm8FizNX>1m{NyzahR-B8Fmv^?HSK#G73|u(7%iDF`Nprk+4NMXW)WnFeBDcK%`~34 z$@TS@PwD%EVNZ1N>JZEolHvn@$FfWzvn=!@QTEh=DEuIV(Yrqcynro&clU>XzZ#Bw z_a-3)@_`yT5v6lc5>ithAt4GKOVVN!5+kqFn8px$AFPHsAgxk4?(!M+tVoqr$1kGC zaqg8UubiHOL|os$WUc29QF@$q_FsNG35LOsKKRu)?|~+xDFk`-U*CBU^~~tfH35-7 zmBzsNlM~xzMLD|i&W>;%HLGF}IXuB`@c29Oz1@$?Gi}@Zs~X8h#y?7rsIT+*Zl&|b zy#)`%wmu&B!%N>-4aZ(y4%L99&I2el)_w3|$z#=v5A9LMZ{3F-K*e6Hw8V%a;kRPT zc%0>^MS5}+w5gGT(eg?_w#S826DW*~Tb8YDe-3|3xcqh8fAzEqvH}P1|MHu4aaC7> zrV!+nPus~y_tezH2@LC*R}*?Zy?{>F`%e8X9Jw^ zGk7+!K$dhNBH)>XQJINQS_S&+dzqbolp%%EaTGk^!liAU0uAx2ejy=9qL3X?3?x}d zQjj`TLSkf)y7UkjW4Ah+18Dpn!zVn1uaD(k7ugnSEEYj~I84F0^mUQjI+FXnlwYNx zr^>A1wA7?pO%7{MuDCN0Min~~*qt0PVEi(=IJvcJh=C0Ka# zG!gKDPUxn&dF-72`6aisZOtBqRtu2YMfQo}ZOc3Lz+B+DT>&ZiO^~cBdEd{iVnSrO zjJ5?C-(+(*AZfAm=1HM;m21#*y-kqAOe}?3f$R(;H726tW{u}-r?iuIkB>jIXif0% zJu-YR`#n;x(1F8!?fjnJ6^jR1-vBfd4JQcADY*VXERJf{QB<>f7u@6nUuZ_iIX*S6 zKdMc_-X*t$dZA8GydjW%G<-IY&rT^DBF&{^5%}NtIB3JKgEH|Pc(fnnKRBJ)TdV9| z&O(qFUJL3FUW;d8O|Hen8&9Ml8>1GgR6bmNd-7=8a?j^bi$>2F%cyZFbn{<3lcLI{ zLyK-(gm#n~>FGNhgC?Tk1Ub01H@s{$`^4yll!Y;n{kc*kjkvBEf5;8xGi?jJ5vVh$ zQBm1`k}#6u7enNjoTn9IuWAb8)Wo$0mX;91O9OZR3kc#OO8#8KSd8{Ac-5~KC5k9M zIEPdelidZX|8u~{5-|1ZSEjFpu0c|SI>{t&!E2!jM2QeofrQ8)mIlnOJ29*sRlM*w zvWM@^CI?{{$$_yj^a{iFj%7Zkp0*A&dm6WC6Z%J`6^35@h2z_!7?)RJ({Ef+!U{1(F&`jJcW0gWy}V z9IUYmF!t>~f%$;cq!B|Bz9f63SrPR_+<^E+syoJqmaOqUJaO6jgS-F7>op(bRVkX{ zXC5EX4+WIAzw@_yM7Am27%IY$3t5JbG0B`&DRC|kl@|?^1iC5K^xdU~@RkD0G5)>b zh2UuqVd9YH$Zw(&E`4q=>PKi)a^65}N#RnDqRWO^yXiMJXb=ZQ-n1#MQv5 zNSS?a=6YYUVHy|^l+AEHa?rD%7#11X7!$D`M$O^b#E4$qgg!M!b8@jXqkn4Dh%UUz zy9q4VMN##MD}{P zatY&f7J5n-pQme?ac@#aO-MrDXNrP;EUzXoaa9+FInv|F6}PuNo*Xweaf#14&{+#K zB_aE-j}OPUy=Or*7*@80m-)UncGWnht5%d^AKpNI&QkA2xzJ3iUMr*qQ1F3MV@Wr9 z>e0xa;9_kr^!rq1$kOeHEqYtaCRFII4}p|5W0V7G#7ZCprkW7RXCzS!?*~MkUfCR) zeGW85dO97AGJ%OqDdllcJv;FAVqr`87Gm&InQ4em9e>fTMde%rovY!TBd2jSv#-UN zmY_wY7tK8-SKp6LlOsP!a!g(`h#gO(%U3rw_Q&zdss4>$Ia#~fU2{OwLiwh__Do$f z=mGYxSQ|QvvUShcWepNz1-emgH*mV)Rin(#kY_bAXA!Dc9(BySYz@fm3k!Z1HR{0P zm7s*|U?oRYD}^f86iO7syCLs6(u7*Nc^9fv`%ta2#|_bhpN?9U^9vAM^S->lP3KDI zocCHRUY2y=R`n936glWwqx7&P#~s0Qcys>iIBvHu2)KeAgr*VX!LJ=3z}{oP)Tv04 z_17!!2y$PWXLI~QDprsr0OE!hyXlQa`#m2o>o{*mx20M!DX>dDCw#^npY@Qx&GRq?3-MzAC#l-WF{A(X zeLp?~E36r-=_kC=JokGNNq)#D87}N1b zdLjAqA3@E*Dr1OUyVxiyc_yyuqvKbMKkr^CeLK+Z`BVHzl=cswQSqhuG`I*&u|XVs z>9tFjwyjyrWSK?Nwns$qux)J%J*Svq?Nbwc3_H!ON_b1O2)40L-_2sP#XXj z!Zq`Q&<#R|*5-*}BL;IoHc`k}oE3#VW`|RY==#)% zetP_>>S}TjTsI9g-LUxOI@YA%)qgNp{d=9kNz6v}!2FBP` z@Gh7+td^ul>hx>iMH@p2&WvY}bV$B?3VfjlW~Gl1CafuV{@UNbY2_+hW44!TDFzb% zxo-=s_q-QO8vc6xJCMBlG4WoYa{;t3UJlRxbT!=4Jqf>f>qW743((CwI(F6Av+gej zn?6#oT)2`T4)8|q8|vG5KmxOm<&?T?G~O9)hi{$if}ah0;2WP?1QS=@1>+i$-ys23ngY5*|~! zDke20d?)n-ScXLT&l3+ompTso^{;1066{z2{;nx_`RyxkI2MHWERx{;t0rN~txYYZ zLjkLPE(M-k_ZI_Auh?D*Tul%{dPLbaBuZbSi87Vq@cf$=eDj0^<0{pj9f38gm%;d@ zvtSIp3i_!RXB@91VFD|r)vwglxR4$~x=hYgrG)et`U&ufE0B!6K7%07CcX;&$^Qc# zawh~Odrm~Z6o7Ga49s-OZ%n-azq{ny@JDAC!Q$jJNk|b|c~cks^o=*gaaYlI@K5gm zJojS;Ti+|e`)*>exScgB07f(F_M?XO=RLcRR8<_K*>F8U9LyjJ<2xBxc?%586-0`E ze2c>?XDoRAqN8_D_r41|y`Y`=9++o-JnOTm%co~-C($-B&;3-qHpgcUno5q1fbq^h ziPw7URnYEu2)q~vxnN#~XOmw;VuV1-s(wvP+Q)p5NE3vr!NepLKL5Z~*!xdQAe5FQ zDw1SD+w8}Bd6L7IUNLb2xO*9ce|DP$@5S|!8k2?Y*l5xVSEu|3R(0|x{@}%R@jHE; zxcfDjkC-`*rH#LJfHMxaE|}PHYu5zaih6dnx;7Ew^-H*1u-ETgD{hP~G0q}6 zF64cWPhJsH!-w_;8SmQ927sp$;yrVGdaiU0Bj?GV|C5j`1Z(81uw^`}*1~_D{BtM= zG!-2g&gVQjytpy}ACI+BsYBpD{W2`}7B7oM#DD#w?NGR70fW1jGI(E)1U+3q^K*#( z<&uW(R#KPY!bAY=vvznJZ8Wme5L>D0BwA`O464azekJ;wu{E%q_YL&He8RjS$YYQ7 zp{{U+an*_fGoQjH6{QFG&b2nNd^dgEEej?gAe*qFBLM-$1i!}w(=uREomP7<}KWG%;A`j8rH&(bNnjVP|j#VUq> z{gKarHmt7a3VabyH(KuJG&2Pw6PF;KxK?>Fg7jTsAylE4SRnV9Vl6GU;In!Fwy55M zAC;G`1?7%kK)3I6842Ma_@SNXBMw1o@S8KpBcS-;t%pAhzaRQ*p-wr9Pf!ktTB4ej z0-aCCQfTm&nzFZpeh+-}yVDMUH@Z{s`3<(j;#1f}FG*r;otD9(^*ge?J!G%#1EC^# zWFLe>3!xJiFTO4poH4XX*wda>ONYMx^*(SrTul%`j<~iH8%U=9tr%6vAk&4~F^=h{ zOGfO~u?sLVd8xb~VKxz@)h5WeNImwNdSKe0i{E{v1Ma_AeuKz{a_d9D(HoV|ejyC3 z@xfo*c>%(TJ%o4E7@;{D^B$X`AYMBEi6$}q`|nL>6<-P%@c71e?MOJYZA@d+k;Tqa_O7eFTdpNYU$hV2OkKznP8Q=n3XDg$drF2b&GY%mL5X)r z2G2$vbhxMea&qA^>lWH!?V zy_LBR$ZU%Z{F!Vel#Z8H;DRn;@5dw|arkLP5JvmHSEy#WWTAT>@^wJaSG=TZ7P`11 zq1p_tOL5PJYY8%_UWzDe+Knsnf^^d^cAZuiL}TTUDV~tjW=+BkS0Nr7i;DzCa! z3}(9E0j;xpW2=q?3F!>(M3TI@NYC3_(>10jQ84R#JhB8^F62~7;kF8v4U!gg@5CZr zOG5Q>h;O9RNt|ty7W^3Ey1Ze~-2WVX%{89Vm@Iql4!fN|hIVkot;WkkaR=Y+Sr<>8_8eyDnML zfeH{NW4jV`w=ISC+k+6=KVB6%lBy1xsKHg3guKpoY;i({Juio$-IP(4GK8nfG03yY zLF9>8e)#>t*;CC=%H`L^GE7r^eO+xU0 zj=|z(%b_Ds{&aBUOo?4S>FSD^1lJM-`=t2j)TKD-w&g;WWLPzE7lePXx?;Dbrk6Lq zVN$7|isc|OhCc0s-LT5^i-szt$7Zm!n&iiQpSs))`+l?p7AI?0R)EN2XaWoe7OUD_w@y^;Yt9!R(_|&j}|82weHHNEFkiE6lKOhDe5%z+|GlF$>Dtnet#J( z{OTRhd11*6Rk#@FS)RT6b4ck4j;G%@Ja)+yB}NOu)oxzwDEDa=d>rkH^>1H1CftbS z2Bws20qE|(3#_0H$=<6lwedWp){GX6{7_FBz(qZi*vG3{sQHd6GFrB*%%fgL_~e!1V-iuy$4NHayv<7zLTqAeUk| zxCqs+_KL|ua0sIzQBt>!h_z71a_)-b>J=U|Y(W3-A7<;@Y69ac*ifAYJ|0)0BV1e+ zqhmtt-VBK{pUFcGaUMv9#FPf@o%Z(%moM%MhNe?rsA>QE2QI+rHZAkL6hCsZ4J?s) zkamp&WL)J0=^8fvciO@8ZU{W*+rWRm1H8!qN(m3DP@b|$K{m$7#AQK_Y+~Tg#PHwt zQ|}HQf_Z{@LlDB+NN)tapW8TtPcu8!J#+qZC5rXeGenNAMIpQLN&#Fr8wU-K6>5=( z!Ln5|9YLgC{n7`{+Cfc#8Pb5jhOx1$9#Ad>K_2l5Rn&JLNih-vuj)gujf{WFj8yw_ zpz2dFk&Ne(!ujPml5)?<^YdpUp@Vrv5C=pQ^yf!qChg_in&m3=dxPLpg2L@cgpq4B z=NXa5=vLt-ox>`{fbKvFx^Z7XHXz_hXAdWnuwtQAvKnFbjh~v(AlQz*w_nLyaV6Jp zmYlL(*nzar#)&__MUBo9MqclISwj z@ge0mpdG^aJs}9->q?@%bAccY2JL7a$O+zc2d67M7Mt=qf!-`4K=$^O#za3qWiUu+ z)WoGsLl;x7)%dZJ%A{%uT$1R0nkq;LaV_X-_bGmKu%L93JX|+Zdr*2j9asr`U|;~| z8|D>3KCFgm7h_Ar^q5y^d@$f9A-Mr1Lq;$?P-G#=RtL2suZ4fXg$pc@%P1Pfy! zBpFCTklLi`N%6WE6ugffnv-6vXAT8O;pb7!8^UMu@NL0WLtj7fb(l|Z1wo?GXlC8l z*O&j8-mPGzk~^`}-CM?23TZ-w(Jf5`z)BIu0TG8(55I>9L_Hxsbg}qqrm8g))YyeY zz=ms56dg(6Y?mT}10sZiF)4=-g$nVB+%Y2^kKr%`lJ&{1K}Re%|OEmvf_W~s+a5Hf=cv(> z)^P3gB;%G5wd{&Dn^?L%;A4ql3mrrc^>beCJ7jcD@DnFaKqJvGf{@hs)>pp8QmVNF zFMKzV!tRM!p$Y3_xIDQqw0K=T$WaQ}%rx$eU2+x5)H|Il+@^HDfIb9A&+`B15>GqQHjGR zQEJR`xX^hAeW46-g{M+i>0XK`yjOxfjUq`y2+|wrMR5zyjC+RT@lr@^}aY(d=gWc(#u`m{f zmqK^v5+ONqiA38(nzmr4AX_pu1uZlNj(S=QwjrK>=m0&p+~-Mcfj)!ZO>b;US?1X9 zjQ!T(0T_UKqV5FotKkT?&*zkvpyp0bfR*NK! zgKfJN&nTu?RpCK9OnA*^e@1guR-(^_*W^=QimR7Ys3Yn=V2XL5FMFHBu9oA4(F{$9 zWN|{+kOL)#ZjxHn5h{Q58lj`DOT;)@s4wi{!A2R!6($gQ=~DXaHj-nbb_LsEC)62r zk9;B3*X4E;WN;bjNh`@n%^r-?=I zXp;Iqs3Ynh8s@XzcZ7VsOukfwe6XzY1_aIi-28CO&R3KzJ<1#pEsXqPsv67RwrUAi zjY$u9%gcqD%qi(vE>x}M&8jCfvpjR4mUGqD8;u}Htek_$_9#bs5J-Z=C$2#ypyLg* zF|m;w5l&FG926>uR|V=`HmLpt;qXE^hgE7<#3zPDqc5dy(fcD~SH$rx)CXj6SJL^^ zP}Qyb$i%waAeI9AWD7oxol8--ldp=zK5F!ni7`R0wqS>d%u`H+qUiL%66&N-$Evki zS||-sBg?ETH_YNSc^+K1pzh<^8xl#U@#H9~o-Ooy6g8!&c`;Dqr@)}!XGY0a1{ZWJJ%ktKWNOYJiWhAUuTs3g!P14RM8Gfe z8H~0PX{OW(XrVcvz+I)%fTVe`9IX;?#<&08$#)0;6dHhrjQ~3J?%)8fR^Ps=cPn1z zCZPBT2&Tk+vTrj$@u{BksY%5W{aUCmoZ$hLqReM@0GZI4F3dqo9EH>%ZXZf0@J#I7 zV8d$qx?)7(2X6oHL0m!YMliTtu+IU4y;0YvtFb*;nL{KRfu^figR#Ll@X|NLQM)KPuH_P*JErfa zS{HHkreg5e^shh1R9asxYCIw;0}Ut zUhzz)xkPCh^Tpv1gDT2cb@nJxL5?}Ob(wnz;tGYH1FQOm@T`J!cG*p(sU46d0P+7$%xn(~0D%sqA8_IjD=V$ISGNfxKFh+SyAv9SjtM^aDD ziHtPS=c(9W3|s=p^>Sf15>u!X_VjG2>sk#XGKly^+O{CCU-QT@x8Fq% z)&RH&t||M&8GjDy0EaA&ySRxlV_#FMDWq^f_ff3@Ilvw<=&A`n z-4s+9z@_f7=a~j(R}&Po ziMU?E)sh?px2abImxZOR7f|bqLX+V%S}J>)&voFCBzwB$a;9E(N^WM>^VlXLBC9nd z2hiP?;c0LgTvdA1Fg*R>qCA{JaAuBj)HPufkQ6GhILBtsJT)IdMWvH-FWr-iem8lq z9JtB{dMO@Lmv`S3z}`3tEw~O&8hjnbc98V=#BltQ>pDkQNf3fzDEq{m+AX*WVjf97 zk)HUb=5VF-Ah?bogRz0Q#NcqGC$!)+rxqD2tqjW_RD{V8u~$Kp{bx) z3rP){-KkCxB}CmSJqWHO2thIACorHl3N17oBq=BjzQ$gv*}nrY)QI}JbAf9UmEMiV z;$0mJQW7 zgn6aV=aVGaAgMwU#U3ctQo-y*Oe3A%-`wO!{OO-26?ixn8+3gtQ8wnC#aoIb4yMT> z-%z6p-9(D4Q#v{y$w8QxE}?Qs;(&?aw=&2`6iE=~`jIZqco9R`6ILUQ?Q%f$d@d=& zuK7p~!o2mF_C|WcnhE>y-kfR&dvz7$KJb;5ZP$hM4R=*ybdZL zNkB8853k}WnB%ob>A_KAkd%~u-Ney_4iTKRdY+XkKMz0|5WCP@RhMDZjl{ft8!HWXGpFX5S1Qj=u87QJ#cEK%9gFd%^oMtXAGNl2w=Y^67agFchnie z-rx#+(#`o*mEgJvO98q>7xZbkPOfX7fu|?m+y&PWuB(Q0#~o3y zCgR)hqMoXUG-)9(h!}$?4|kn*`-gKwT2+yXZkZm5htOZU+#1}#(!euLh(8!P42pQH!vn#oz_5h%8KU3#fX z;f5lJkqQC3K_B#-;i6fe8i^ZNs#Lv#uUxGR1<e|>9rLWXW6 z-WJYa7X{FOT*(}c!ff(XLnK~g8A|`oe*E2i=%3rp@Vw}JPMjNDz4(^!C(=WepM$xP zHwHH-Zn&V?99+Gk-~h$~o~$Gm;6(JnfCz0%93phnkxY>p2Qs)R>zB^X_+7M{@H55EL!VO1|yH{*rhLk!Dkkdd5gVd=Q{@Xs^lkuue z<|OHKy=Cc^iyN=9L1nI9p-!PHwfcI599_Mo z>=0@=`%#x)ed68uJ!CW&0|Nu1jM9=@!rM??yd`bK7bOb6L0!Cr8!~b4j+GBG2Fbnn z;6Dp9@4w9rCr@c#k${;tVsXH4q=00003GVK$LvZ&X0fGg0cXzko?iSnzcP`KO{<=TTI&03F zwyNFLdslU&vZ6F95)l#v1O%!KP*N2F0y6%;2LbN$OF%d8#ODjq38?J~0f9&R-vcS5 zN^|x35zNpk%81IAKZK^y|2HV*mK7#0E|&P+y9Tnz+y{)U*T_s{DvTJ%!e z=2%L59Law zP2c6R1rFajr=FpJG+2?6R0;q8%Z&`>^K$_#;SM#sfCmKzJVGiF%#D4&e8eqOh;(xZ zHH9_5su)co<4!I{$R3y?)dGVc8m059j{rDEH6VdOjttL&3qT4sCP{NRBnjddgI({) zf|hjBUA?S!f|G86tnR3xW%dsjpoW#CV!#&RgxU#)ht4?_OwC(IYwCm!rS{Gt9)`4^ zn!cGLhmjEn?1@K6D+_Y>yuo|sAi?COup{h!DvS zKK^yR=w{NB#16YS5?Uxy2*x@`Sm?%RFYzhK^G+!ffKs1~KZg0l;Rb?h_jRElsn14b$ zr-7R4Pev7F_jjpR@e})us7iD&V}m`SdDW32bb7yxjx-Yi6ZF_REl;Z zQ8-)-WuPB;XWgeNfrI0oRI)cvMG*zjI0SXDDJfl{O|^6AE2igOvbrfd&}pjTp{Nol zF4sMX>lJPwCzmgLrsg7d2O+0)CAnR4dae4mclwQwpk`OpgE>g|q)0pt)`p57d!~Nq zBTKW=P`Q<+NY3IES+j0T3Xk}NDh81yag=|-$nb5@oihZLz#uQt*NN8w5$SC^1g{qCnd+;|4pHE4*sI720Ro@kBl5d>j~GW}T1qg2;kcY})&I0=dW z^~!?p*okWa>9Hs87TBGo7)3^+c8jFXvM)W{>sxTdORtvz5(>#*LbF)&{Qcc|;sm8ui&-WTZI}0L-YnKi=O+)9Q~~{eW|8@#zO?r> z;f)`ayfZ2>8C#8aFR(wH59e7PCzhh?VdEbj?LjCrX}7-wm!6KpK>v8hbosqRXT%yu z#Hy<@LzuOA;x483zPq&yCIb-nFj8_hE8^rDXofMkS9&%)Iy$Qv3z`o2snMGkuEPJN z*#T8ya4%e|Olc9guq!_8J+P-xdcy1X%qll56!eruH=J#F9QXr}qQIkCU3!ui;D@EJ z`)#!`Ij|pNX}fef!Ki$(jyrbs>lfNY-kte}?kODo52UFmE@d4D^zt!^;TrgMw)mfN z{DDriWZj;Ocx!)cC<$2l?4|iQxd?qBwB7^0irao~pDSqw1x= zq;z3U$W4Vq-@E%mF-pOLA)_h27(f^eThCQxm0F@IM1SG@(X-PZm*^xP1_(U%e;w{* z#w-8RsFKRgjZt<}<8^C*6SpzgRNj2IBL)~Os{>qj^H$SB)$A>521$KfI7keA+I#TP zdrM9goHUmg5*Fv@rmJr0eMJZN`Yy=O6?oa+-j@TS#ffR2ho-wQw!LzxU8G@rC!U7O zRhiJPkKcAKNdm1yj8A6I{JUdDs&LKdRbaDAw2j4>g-UQkJuD#=>`{~!0&+i>;i5-b zvo~1^;CaXI635(l6Vs3pgdZA)!vUPpapH#M?iy!tNr@th)D9yx=li4~a7lF*p`4A8 z!iUX;XhLx?WR@_vP>R^^%@4b>Yfls*CarNhidDFO;*=Rx6UW4&iaf0QSz+Yn6H}(i zpAB?-w#+vn&5PbA#Oj#SYpO?)!_rU*{kh1npf3w>GY|ai@3$Cium=_9?lEM1&_NdC z9+{c-Rg%=)(aI4&niVSY0n$=3CTXAZJ(ELIwfRgAaakiJZXF<+1eu1c^|(tukj+sT z3kC4|GbqpEf+Q^%uuoN{#V<|miQkEp@G-)2Rg|BC;V-J566;x@NRbMkUDJ++IRCh6HPzw%L%O;-ee;N*YD1g$m*v_IXLHRxjZU4nm4o zD&e)%@t>V}FiHN`>Z{Vn@sEhAqkxB|;=38pc<|#2p+)({V6fHnGbzuT&|qj#Jc!_+ zFW^VBF6HNzBAr@aCy^O)oIUq&)6aDx*%sMS_-mC#@ZIkEVas6B)=IqOn~4i{*`WQn z{2aGyWjyIdW&-W!x@O{EkWhk8xBzZ7-m5ZVB|J!n54le3b4h-h(tJUrT%IY!FThn9 zE1Cuul^w>tlg>vfohQ z-1(edE$4fn7;0+N3`USf;aD2#9#o1c{u_09l;%6(3(m&ks-##6sn7O`r6ZBgPH2(3 zV6m!a=s(OLB;abYX4vnCuZZi0v9Yc3xQXBO2s-{X8X>e{Fi<4^9BN=DG6=i7AL$Sn zV6l}eZImSHJ3Z`CWx__M>cut!KMw({SmJb;oplkv`qmMIMFFNmM;tm5f6{gyNXL5# z^$zha(f?8-etgL|tr{!jd{_wbtg*~BBn|k1c{meh>GO4Y9k17|*binyi#&)`Qs;Bb ze-jfZ0cBBRuAR6Wnwiog`m}hVHVoh%LS8h~%-;^Ws<*=IXsT?;fq1|2)QLAn99JIue37M*@Q_)+*X^1$PWFFh6e)w-*9jx5Swy)owwS?b4#)C}@^77~~J03X0mk?ghY(^Qslc(S*a`;OBX7EoXHOzUmEz z9NcTgho7QoK4%E6r9RE}e^&wf(8FMZLCWWn59*LsD&?b8Mx_(b z*DIhjeD1+u=*TZ{{$*_(?26)4DoC=uxNEJ;O<4t;Wj2Xu>+afG8?GKQ0%6hob6JB% zoKZu-tijAaeySLk{$+R(^3$DH$qbLJ$|Q-;)2~?q*Up!EWV&C?O>$w{<>>pfnDG;7 z2=9Hhvr8M@)VJ!EY91zCsdI0b8)dC_@Z`siEw)^!> z<9`IwUWya1zlGnm87?^QOu23R8RNK@oew_*DVIzOgY9g*xCK_5tf~v?{Z#WgccHfO zUKgTV{Xa_*Kk9qt`fn7;|IS%ka{C8aRpwqVMt`I~aXk{+RLCz=4p6{6XKkh`6aR#R zFTXz-ciH@85SkH-?`R{BSwOYVw-x#T^gST#6}<>OzP`0SBuC+$3hw8W&Y_1y<>zo% zCXaj0B_8InLiHF+#~}=U)U{oB)CPp)Dym`4P3Q1XtElxGr>lFQOgbmzb@2M^R9jGe zh8fVo$#tGq{CEM=0l_FY#-^%Un`*>pK`A|p|XG^*^d@d+?+i2I- zp{Pzj?J$T$vPBiMF(u3FCb>JC2hYdzjl_JO0&{?Q**c3L=!8((@tw5<>#u4r1XrSx z-`7SehB+kbLAA|vEpmu7j|=O*Y4cAa)qrc~hGQX-tHMP_9=eLsb{AgDK~hs9cNz#- zg!~wwqj0%cM;jyQ7q{jr+yfA9v)@OY-<+2Yt{w~Q1^l|voEEJ;5~T6MdNoG^=82bM zr%13=paT*O)4eVMDyEF7A_PQjirx z3Kb}iKRiuv9SX?f`@C9TJ)yzbP>>J`$)JH>gDLOwuNnR3@jNfYZL*e2JZKzBlkdd$ zD+=F{+z2^Uq-Im(H$FMB{fl^JQUFkIaTT`{Kca`C?mvBCB`S8i_+`XzxjE z!>6s`$;sid6*n9d{@N@0oU;XH3qe;xoSs9TW0S*8S&AmyprG%7a5*PC>ay_?RC`y4 z7wr%wqB+}}$dg?0he3fel%v=fjRcSLn?WhSvbSgX@yKxFRG#t|WtVq1xj>F1&H`8} zYh=l_v#U8s==t`qnjT!+;^4di-17hP6SxwI8BK>h~H4P7T7^zrO4?NDjQfFJ}p4DR-={6f=A zx-nwM^h{wRIo^uE6!=-DA2j(I>s1a0Pd8@f&IJ_b zA}6pi%Z%6X;e;@-H#5Wtqa3>}#QB_P?ofNaMx8#eXZu0MIQmwzawPPLU!Ob`e}J2> z`iDO>*2(m06SrJmq#t}=4c|sZtfrTZA$@ja)a4&y3Pi}`;0e>tT{pw64)_7ds`l1&_k zXq&nOWW?Ktx1T;27STaD!JfbSIv(=!y&&Xg3CR@f&DWRi+kJ|vZKsMCd?@q#<{MWiW# z!}LDTM?;#`b_sT8oZ2whh2wn~eV~wpL^Jt4^4z_apJdmyzUE_V6ZzNSRLc5&x&ogt zSkRxpu6X8-`ag2)Abq)mLKemwu&%z}wCj$AZtctbAF14l2>}qK35yJ*zB_$A2VSh+ zwL9IwJA}K`{_KPu?FLok@BpZK!&u?(gqL>zrB@(bKYxafY?; zZDH*V4!-{w;U3hp@KK6!`)VXG~*|I@uxqwQEe3^=iO=RazLBNP74zkIg{PxZ;6)wUY7)xamJzo1vFgkAyZQ$nX4cuLS`3|^DHUkrRsQXuI*}i*Sx@i< zca;Aj2|;@o3@o)jr6o!7A9WKAm`!Ke$8-oC*qR&X+o*HjI(#6tiilVbt&Ok2+{m-K za=G7|Ckt8s)>d@jQB;X+X0D}Cmf=7h(r+xjEp*3o;qyM^q=|=a@d+7K&wIaD#!m+5 zd6V={CB6+2z8A-cth>blUaOe&%(q#C;D2 zxKNfh$QBgsYgjMA)bU!qxwKU^mowtWNn=B$1@=-;*&}IoI%(2WWwhBJuL3?%I*&@XCTlFvDvUQM z#Ou%sEAluKx1_+2Q1s-4Go8CZ3F(Eoq01(GlP@*JQ>Q`me@Qg-6~>MjqS|e~!qsRK z2U;xLl&<}L#qLFiM6LbAUv+X$7JXs;x_!p+2%q_;lc7uhS4N8=Y&r_MwUYyMA7BGL zLos`eomI~4^ojDCp-^3JI;M?RA`=a9Rd?XWWcSOQ?{hlw2`g17US^)NXcjvsV0tos z`N`);)3P%O%R|m-Svg(|<9`xUp8ye-!^+|3HX;4%KQ#rv@fT4TaOa%sOrne1Wum{ioh@Krc9A+{I$`L4AzR@GxZH$`Kxyjx z_qU{rVG^#YK8QI|Vp1lCF`RI(hGqi9199U1O9;)Q%nUf}Ud3Z^W%nUSVi3vTM@#!H zV?VDFUxvUb%S+O8MN1Z_L+w3L*anA4%oTu=qJ`FI8uupT z%W>jNxS7cSW_9%tWFt$U+T;q%I)Rcd33YrjzQ=_x-~{1tM-*}h8JSN%mxb+;f!R?Q z^q9`tWbwmi=FwVc@t~DN6B;q)NE2w_Xi#?BMkr-V+p@Bn@X-}t2Dl;YuszWSQJk`u zzt%#BLbcm4vS|1E?geww-&h4}2rWk5#Mn9eCE4i6 zIs9^*QalEV9}cC~J4O{pSG=;~AN_nG(&DNdpNt!~pN$O8banNw!k&0dVl3uQlGJJ? zl+?2ayl09MQmjn;n&{>B{<*(K512n|a6h~ztT4vOt`C*@6 zR0~1KB#%R9koQHpgvm{tHd<+KD6GK5+@mP(cW|NHfRd}Mg}ejsSFu#}IwUm;o^-0Q zo+!fH{Zk=1LzCSpVfmbmdH=AAkj35_j=C=i0b6UGQN9(fZOCwOhN(M_iGfjuL+E~@ zL5WQ&Lk%=r!?rJiO+USXK|-F2;U~Vvf(H6y=%ml6R(KQ!*Px>u5xJpVw82&d9JN1P zatQ+c5#d(7b^4GPBvUeMxi(4rPVZt;py-VXA({!5zM z>KF)-xUtc{2Zk+%M~Hd3VfAq4CW|x0a#a==R$$1yP>p-iR#_2)DPmxjXNDBSLO~Py zHeO%~kWUJD;8s(Nsuc2bP5=GFNsKR1LHrDkf;r9tetbND7##mJce#a%C6f%qPbr{@ zH2tW7PJM=Hpu9t?Xx8gl7yc!0z9zi%n#Y{;OD*Ozkg1qBzEbiR}a&-c3AGZBv+Zb)CkA#J} z%$PJ%gc+upuT#c(h+^>bcXjKp2&eh6svi1%Ai+W_Ii3HS4{Bl96q0E+7U-PjLRX@P z=fs2p$E5yiNQ(P163QHp#8nq^H|w<+4*gv`nNT~i?(_K87CYnNKt=_?Q?Dzd`slZd z5qiFkV3S&V$)0>VZWN$qPUps-xky=`7vi}g7iEPW~O>K_GI2WCaN zJCCZDu|Nj-CmbLR>!-{b6oT+A>rnE(mC#nDTS@ezfsX zLk)xaZAbP2h0GiY>Jkf59Lj`hhC=aUNvY@Y;{i-M<#*9W0bE5xrD5rx+32pBOO4&| zeTpRp2>W&l=JYPFlWA!Eo?sYrmj?gzH2iBCX>N`#2CcOw2;*vN8TJhSoXtPG#Fw5K zP1u?R8|Rv$L0<;sc*FL_o}SjjyqK-Sa6G2Ua6M4%?ep}{SBT0(!Tf`kv z9T)}*p6$h@pohF}EQ?u%DK2P)6VUyoW4#64jju z$u1(aWpAlAmp1jKFr!Gbg_hB`F;cZPTx@;SoRX?$O?ULJBEbRmGvaMyEB2I1l~kt$ z+`N*uh|r3TI(%*=o0h)sCh<(4q6^DfL{+RzECN1wW6~E3wmAiMN8M*S|2Ab^aY?lm zEwUg|10XAjgVxS5@{TZ%K%z+fEw8uh@=Jm|O(=a!XlWUNRy!q{NsjVrrh<6z@eLuj zl0e$!*Dxx;ZmrK-kZW`T?Pmq6^%G_BmDTyg401yBRVqJ0{Es-@PL8<2F&GMRZ)!3P zSc#(zA7s#HjdhZXcI|ZX7o5~9Pb`8!dhM@JL5oPHvYG?pF_Kt&E3Y)%By5K$2BQx# zc|Qgls||w-f4^|W{h~D~KXWG3awJm~W8ChnhVyhG{#Hj`E-6IvL$5>Q`=LK$eQS20rsLdvhzSN&; zUah)WaU@`x-Di!1acuW4pGU(>234D)Vn8W(JA8I9P;wwLa$D|U z_92LIXWcIyZdB1@VIW_{x$?)Wd8gvT1JZcmuLlJ?2SvT%Ub~Kf+iF<3zuA#etQB@C z@ZQR5cmo8@!Y{3{|0}VN4QR|mR7W-%kwFq;F=p7WtmW=(84u9EajYl5c<>T zT5ES_CiT4HESA3s1@7)Z7NX$ei3iOczl34I5?s~h+COl2XvNtRLmFl=GXoYnkT1Rq z(bQPv!bT2XXqpKXfPs(<(CPp3x7<~J@fE_gC$w706){FPQ)0?smog>yI3z&^ zAtR9hr3%MCK1E#9l=}=B+J5AoR~GHhTC6B3gs!aaivT+dW?cX5nTQ1Ym>{g!-?@{f z7#As)s|15U^k)~lf9{KgB+M+2o2mOrS7hA$}nIGt)v)H z_~GecgtZG*^1janQJb890H4`_vjy@;q+J;x9;CId5T@kE6j~ST7OTklr6L~R5g`r` zx(#tnucPg4U37j5-s@Q*bVa$ojDFW_Lu*6#A6>DWS^4;GRQr3d(L@o)SJ<+1TSXN0 ziw}x`{Z>51Y942H_>$er-_QDOleohmh#>A-s)`;9BdZ>T!`xg&Ojso2t0w_jH+N)W zEIx5agP2|)E`9p3+4UIm-^8Z&iDE!wx%U4$VLvk427w#IYU2%3^_|7v#=ZyQm>$fOwP<@l_Uy&3-YqFX^Ybott2hQl#qOC0~EY<%A9YdVZZzyh0 zaIYL#cj8p1rnz-ck^DFtc23s`W8Wq0V-G8zmdb!e_m&WnC)6I*@@}ugyC9yGy79B3 zdP|q$_1J_E`F@QYVH#@Y7)3<`TObaEbPfb2{2SD?rskW^RDZ8X8py}vz!`5EoFG8# zcmURv+2QzP_)eZ5&AY93&SXhiT5@e|4Sx_GLgKG?vdi(;ZCrMqVBcH{bFD4DeBs6a z`~D6;%TaT{VL4;1CMJf2uI^P4KV6^Q&I*&*Mh!av+k{jFXBJFn+=PNj38o)@rf;lD zuxdd_x?oyts7mEo^E1Wy%!x#PCY;weZX%%iZwCDtPV;G)yPfz!Nqn3d!1l`wuO;=H z$~e^;D(j1<3XGv-DYD@FZv3G9kKvjIMVkm53_d3(;e4fQ7|97asuBZ)9}Yw5jBD=Z zzX?j1553?ra%FKGHh(|qWfnHAiOB?;+IeiM|2q_=xAs+LQ2I;=T14J&T@A=|dJ0|; z%UVuu@=YTx!skBx^81Yo?R3Dy!u#vRcoaDN4&i}` za6lKfuk^1ZkLUi(uTY=4Q_u{gUeeySqaWGp2|DM4^;Sc4#B^7hMDxCoPltI0dK_#M z6fQ2uJ%`r8h*U|74wdBzVa*a6aLG~N?mDO*335=aCq zxj`cGrx2P+XZHHTflvoxbu-(qX&RwUx4~Rm=sXmV2S5*7M;bO))ZkK} z3obro6$APgj>eE`36>@N-9-6AeZH$#g=0qJe@#;X=+ES%is!iG;-O*u`F}DT9MaiP zW4MhDS-;9T$I;%uzp|ADexAAuXUx?6w5ta@6g9YPol_kJVN8iZ}X{dGu zO(r6`O!K8u?okn?H+}Q-%kSz?jXxTjJ1e)`f{;^J`3 zQa}H=Va>Qc-rB)@u(I}#O^{K_G?1wP$&70d%4l0li`-4jfKdM^CB3mYS4q2WL|?tU z?AmU`-Mn2MU43q$jowE(2Q5BAPw2HWL2}|}PO}jkeAD*6{9UH(-Je+@0g#X1G+0N4 z$@6rk2l$ujd!@v#6pIkKv}fX5WtcWuYkb7f8I63#2Uc9rpzX%ogX3Zs_?9)Wi|15K zWxl4#!c|U(T$W0vTWOO3p?L$b8XLZrrIw9e+`IQ>g(FxoKH|XGL?4sO`g_yjZ%TcB zCI)l{3NPS`f`nTJ+6XZ#3rfr{SU@8Qj(l-w&Pb({`q4tc(E)Y4dOI;EvLfLX_k5(e zu0QExuEYx+=uu{9zWB-x&4GY{RMWbQrlA7wi27oz+W&C1Bn(>Y0<`QF39)b zZU&uG%Egzmd=Nh<`L|K2AJ&&xQAu5QsZD#LPRAb_6|f)ME^VW&=9fWup-(v5&g~~C z04%ulk%CPexVr2;wKEB4jI1)F>`q|bpog;l$fs&RH3XJ#BtRwNyAQNV;Q`}vd%oZ# z)> ztR_<~QYY6TCF;<3BIdB*z5;5lz-nErK-Vw+VYl>cJ8HUH=PO%+e=A=MJdra;-Bo)D zXmS{*Z=h!`-Py@NIq?3edqHPOgF*-iiO1ZcZ>S^Yl<%fLf&d)*6gJlZ{a5Fc_5uWv z3i#u?P>n<+V0t=xzWQaHV7gpLgxV8bj$=}S4$&G9QqZgLG_WL}Rhty@B`!KD+{uL7 zI$e^r^53(sRp~nc5h4#6O*wVVdwL8AB6%9pam7zFGfu2eG4W0X8@T|ZOvy(p-a+ut z;{>^eEx5q0AYeaUaRYVMUI61y$F)+{nPY^PZX{^hsLGn58J^2nlpCSR1^ZEL3sP$C z+lxj;-^xXL8!{pyJT5$I;{%SPQeu&!`PV8+TQjj2IfD83mJ0x&Z^y6+364+ivZdl+ z$4OMTo))EYERelb0_i@pp5;M9hXZnSWAbbFO`}Lc(zmu6ml|B}@IA)j$8d@4UMl_~ z(KJVeTOILAS*zF^m+yhXKc2lg`IQ|X7N~+;*OB^JlTYc~+|rJie2nttzKC$aj#@QT zV0UBC5E+1E8cgYaC!a30p4l%TNa7oI+=7QGE&LI77vYhIfMbD@5_k7vQ+3HX5Br9v zq@KMk9xDf!R^}xMCMFgw(@8077y4Q&hxV*8aO?|4_(S@{+u7AMNE8ej5i_C8UT=Qu00q|PxyMY)8h&)h|lcz+ka%@@7) zg>9p60u$x$A$FR2`jlbWU-)6)nQN(FF4>?TzZ_W21f4EK+Bw>Ze0RKKdPd*!1J4#D z>h@^odmoPUi7(e~H%uv}{qyUrSrOqI z={c178Ck?`z2=_I{?>?)1odwtioPi)mU~)GT_9jVwTWqPqG;1=kc~^K^Kgi%3L|Iu z5F{Nn=csD!0W@$WOaRGeeyN`J+CH!ZLqqHCZhO`YqmS z3rGVDL-7u{fcg)~J`4`z<~yRMk&Wg7+q_yD9Wsl--5szM1Gw*U4&}6;azQOoX%%mM z&%(P-Ii#KG5D*ugd^q7L9w`Ks4EXo8LLtuXr23zX-}jdMIyNLkpx3VWH?5Xr=tH#E zX#|=*4-BLMu`x{aa4*cX%P*+EIHq}cQakk>ItDCs5NN7Cqey7tTqoDVcAXeG*&5c* zZ84eFw9FxeY$bdsvD#>Ys6IVzNDdr0ECeikX`>?!ER@x-rp7WoLBJA^0O5fBE7=40 z-)CTdSkq3Ia`w<4Foqf|ym?(4nWubs)3>xYZ=4w}W!n8VBJ1Ox*8V5g9Ken`w|)C7 zzs@(Y$5$xz-&j`1Ocw0k?U^9NdP3yD0UlMc*__K?Re(uf0SH$GW4Hb&!rA{4*HM2? zl;!Fju`p@N8{7X}=$q@5B5xE8+bqyU5A-8u?s=|yK89V;TcCYj)++}d0oNDBn~g$gQHUQw-}O-5-5W4g7Eyw)NlLY>^A&Fko5 z2XG{?_as(`_Z6{byq+olZ=0mk*T5dQI=lvtG%06okZh8tstni(Qd7ykdD693)(!4G z{oTQ|qOD?Y8H_RP)x|9k{&fdlQbs*@@a0Ef8psNi#n9Fa+qe#N4O-Vkl+c3B1*~a( z`}g)wIgJyHvLQFFSZ8#>+v<$bsu#l(1GUWPx2ove=D!yYxWr$M7q$EX9*XjiM-oXnL^4Z-r0#) zXUXip%C=NT$eK`~tv7`tM|0L#Fsl@_&`&0wTKDj;Tg12IF~RN+vTb%8ap>0Kk!ZC- zx@o3zXf z?4Joq9#lE)M<092xZKSWdZMPN6HK5a+{5xc-;p2dJTe$edN-e0{V5yUV)YEJnM2hbOY zW<{2bo6qYbsNsB}x?Kd!_?YO&q0Zw?(dc%w&-4-FM$cxtgTg)fSL;nNQBX$=r@`x9 zuh!0cf}Vkd_2J0w2l_r$Z0nQgGDW9j7IB8{&@{+LWwLHAh6-T0HRsh|)wA5GzQs8K z6n_3DbOw<{q5N}rmr_uPZ$wyFZJ9T^d8n^D>Ky!W&BMQOE{^LNcY>KreQUe~AjsQW zh@P3jH+FtU)5QVy#DN|ml{l4(Xf)?5IddmwGrYCGa~K7l=)ZxDM)!JrFIgI3E!Vrk zEA6ve;5qQoxRU#U96QzAFJtoj9N4-DBZZOLZZbC*$!(f|zBueQe&pSOpKWei@QEn; zv=n{5jcWSR&E3KEiBmoY?aG8>r2OS8Qv;`!Dh+G{6?BH{A$qz$Q~5J*G5}f#MJE`y zRpAETU16wy|4DF4EsNY3#L~gYB+QQx>Ymz`5rC9H&X(GVRWsJBy{{DTlpc#!7ZV%l zY*lKvlatVSTtcc7xk^Plsc<@nHy&W*Dj{(Uz!qzsASf@=Zy#=gDE93yE4rfY?qq2A zSN-#6kmR&FEA!;jPq(cycRrG@ttgDJ8(N3`#tDs5fo>g0Q&T@=>#nZJ93>$lHpLMuZt!LjPy5A;fO~aQ?N4%$CzH@5Q#Je8;L8Q%bc+p8 z-qxMl_Tbq7{;ejaEP;wX70fge7!uFQG=!}5nRs-YIdm3jG{rL_Zs1rEzw^QrKh2L? z4hL;LCv7y~^~K)JtxFHD7HY8*zyH~Sme>&lr?L_$0f!jT590&a1sf}Fo^F!J`#k}n zTD8{GsZ?L0`Jc=PMBnf!MyGk8I0Zb|15&Jt7K0g9+4k+QCcA#24dBAW6?*?M5*QSh zwKqiJT=0tA)QYKycl1SECB#%iuOi?h$d|p7sVOqMTF3Pf7pN}bw!Hsyj>GMl8ao`l z=!=0P#Ku#~_>I%Xd9ot-6+?&IgT&NvP~SXSB>P7GgLy$Mbqpt=Gn9{>QxxSBH`Ej& z*=gxg{DBT|eCEY_d7|4iNszd>&#$8!w`AZJKMZu85*)@PPLp4Syu?{@6K7vOoCW)r zzZ{+O{M2e{3?F>wQ@FW`u$%GP6GGFUZ08H>k)Ik8~-bS z0L^07*?Fwai1%XOlT>8(pK5a`a;A&|#x_7v#I{XDOAR37F)%F-C4{i~jAnc7>n|wVTZP%anyQAx*t^=W- z{1?O5YQA8+dOoqA+k=*gpJ)6hI@mMV%0x8nMhcqvk6Zr5+lMZrWW`LWb@?!9Q;r@D zs%F5t1q?rV`juCb@|6}1{Dv}8Qum?qhBrMv?(?K;KNgsF}d%^ z`0FujX(~9%GMzFZcGo*{fsJ9Kgb~6Uyh{f9IW1=3!mc!-ku~|pD=zhEfAs;rXj+oA z*OYntfM?}UpzF(Z*X6rU%*g=O%#rH)IpyJ3OGMjS?sgmRc~rMSYoJD${XgL+DBY?x zW+<~YRfVN*f9UGgekBDlR?wjhhwnPSjN0r{?7IF9VZy8>@ON@x?I=_TK1o{8U65H; z*epju(u1^z`Pjr~xZtq+UGhY6l-gW*!VKavzS*z13o#!IU$-#$_k$>t6*qTjYHz>h z@cYUX__p=09@2NdX2@;$qH&VcJ0RVy^B7^EDY z>j_-j!fyU?IK8`vEICpu2C+JYRe`ThN%6bBeCcbmD=f^LR(DErEKmBIn)YBI3Si0M z?y}+U$%dAs$w9>kkU<mk48D@CJYb~I71-2<*M(H{>C4W%WoL{~2J8MAZC zrgvSpm!{#LKP{?r^&H&4nvNMnvo)A7hALJ(-nJKh_g+(x>@ay{HXR$?nYuvkZGPYT z`+1|WDlnT=8_}7>XH8aZHV8b2uhECz<&NsJ7v~uE(Qp{-baC!?b=Tsup?sQHXOo-` z*;+Y<8TU9}TBff#DSi63TAo?o`LBas&^2*2TiG^`iwaZD@K!{~mY;x}FvWrSsLmoP z1k;ci3Dj`*<1ldT-EJex@|gYy!Us0IQmb_-6}GL0f~%7dRKN`j zq~Ql6U&gm9jIGfAdF-<+=;^YneER)E<7k`y@qZl-Cwb^yFWJ1sdOBVR%yGrA=Bj$| z)p8#(cOqk6V+2upSG`jPI+1`Gct>(w#tSy6?(s##AH;q;b9C!EWH;G;M$qklJFj>X zkMa%8CO9v63H{@f3G`)zOw7F0Y8Sm&au9b1rnsPft{U67T(2(d@MpBcKimc3PSSt1 z*tJY+q1k#~KGkm}0kM9f*~}qJScDC!yy`lzjP3R9>!GMh$`LsQ)Be@rri3pw;P!EL z{H?~U5I;Tk;275N!=@ocmc02f|H8DbY07`)Ux)e<=8htfx)5NAQ-T zQzJ{{s0~)~DHZ5t_BBWUZ$fqx>txm${_kJI@H++3T5#H=+0VNi;6IFy6VzwWPS_0u zNwOlu{=|d*Me^l|rEQf|WCMlYIZ{P_Kas`d(4Pt16*qGVI%EfsATwe%ZtspxH2rr1 zDDdvzbT>r`YU2d*kbUOfRR#-I|)KwJ^am1B`*|KPZ>T zezxfAJ7++kUnS71^~yOy3XKgJ=;w1v)5T0{{w72=DRPsYtB!Gf7ECFKM3)07`r_M% z<@GOnNds5evmz<50ol&T3uQ9&cMcGi!e#SvtZf9@y=M5~9Ro>PN@G}PFFqh+nYTn_ zsS!?D^C*IYE5dTRv+#%RSLNidxJXS=Amym{w7s;#AoA9`Hr)0;3_{hkEWSs7uo@H= zS1Bm6tT*Ao@ANLE9xg+C31P%Fd*czt(hh!Ou@k9cd3(H@()7dP&&Ey9^6`k1$q+vP z9d_|?pfLIBo)x~+a{Bzhc-t;}SB2c3mQozk_(;bu#JPo-Q4(BO5$yOn^OxN{SID*? z>(N``@d)1!DMR#@RSj`a#KYt)zjP5^o8*cQ-*_lBm&25fg{?=gjl6Wu&Ey`c0SjO8 zoAJF#qQIHUI4@sCoAGvmjgFyZ&%1lq`BWF-coM{NCb`dtzv#Vnyjxtr>wZ1)!}l%5 z!}k;0w|Ij;PLNjPlgmbSWJH9-{_jhC!d4kReA?t@p$$YhdJnhE?)I@_Deq(E zUR>+ClP6KNn_r9WI$ET_S$>fWG9?JNl1#@K3rtfLfyLxo(`uBIJ0SA5^38|ZW+r#d zf1GG^T@8>z;{m=FFhr?FlE8S)qLfC5<}<+V(f{0VQ9z z30X9f9@7UxDR7Loe4vQbp;69@xn+$=_mbz-P9;o6B*SiVAGIm`Pn_=2F(3#ysV~o> z(!*qERcR3aPaF^7y^*d-#N%wN`Qr!=?u#xC|CC)f`+Kjj-@iFN;cFe;N(n=@HlWzS zcP~VxIH>U@d=I%5yboW~r>GC79lFbifFDe-b2pSBFqN33m5H2)d*(PwH6di3KxYp|dv={Ixk^}Dzr=B&^_d3L;2!LlqT=VoFGuv&ci zRv}le4pV#>$IzxZsA>iW@k~@Oh@(uR226DYC#r5Es^DL`{$SFU`xIAYxt8q6o9jeyusSF}ACQ6i0Uq^S^cPApWJ;ya@_V8c^ z9YPLhbLu&(e7bh|gulT$QdF&C`LF=ka)z|+I^FR#0<#l5b(MuK*5gK^jwW zq#MHBdIe7jN6_sDD}676cj>E8DfvW%h@AI{KzL2W1phz^xLLrm4V9D@eCZTBV+TGaG_vgsx9pgh8kP z5)N9=rWM^)*`%!x;ksHm?BC~!E5E`S{9U2#Degh>4+q@#$Zg-20d$A15|E#K_B|K} znNJ%n;l?7~vAA(N3e+w*P(KI(i>S z1YIQ{&wg&czJn;`#!A6on~TqFkBsv^2Fg=`HU6Pi%g8DQ35h~hi7$ZH%`b>72Jc$@&-TD-V1-h4v&qiBLb$h|-?Zhw9c#N)A?rm~2*^Kt z>ErOrfBwJ3?Pov#p2_Tf{>!fLg15K$;@Z?6$L7ZN$T?VVOq)-wy|#Z)^R{0hDv62e z=>^@pq$R~fS-TPR8$Jdc{pa!XXFyH-6L{i}fnuM9iol;$A#0?ik8%dF^8rY_dn4Xj z37WSTS`iWr%ZLimuOudnZUC?OuP84D&)%~#ATDvZDH zZ)5>sHeFGUzjWf%%@_CHnz|#JCC)Q*p=8T+8h?froUQl<5~uo?d-jkI71|KdIy)9Y zv;1v{UJ65e=B!wY!A0BnI)A50h(%5T?@eWrF;xTavejUDKLXJue+luPd%;##LfK$o z#>VrXx9E6hvsEyQvD?YluZ6_4DH>_O0oszwKp%Jo?77sM7&J{+g> z{JXe!T%{%Fr0#;ZPv19ud0-^WBSSOi_)9nbmseb+$aOm1)5_%6-*ag7)jcyYpXXEW zK06mcE93-PA(`qsH?fdx7-RdAQ6Ba!(H>ScrK^$=>VdxMT3GVY{CyR3MTAi7aq!K3 z4HThgg`-d^yNblaw{+pU zF52K_AgLX6E}EtVx?lS%D6=q<#t3WS+UEz}ckPNtmAEy;xw4m@x49+bA8ESE_43l) zH;yk^r3F2`>W`Iv?e^KXW9w%xm@iu<7p^QS5L_|jU9{Mg8*r8anpYFot%hycVBrOi zd~k#=^F7h~rqW=>=i7t&O`x6JRY~PjkkCH6 z@a^-6hu9v2*5|&pTkQX4{ss@JOKT1-62nu$IiAkgB8#Llw-yD-Z$Nj|gRaFxJm>L?K|A+1pncN_ z=s3v!e7dG%!cHGExyOyOtz}ryN>pP7;z3$6P2|VZ#5C26Wp0Wx*=Oo zoPk8lMr(u^d~jf-??u8UJ|mGDtiUdBpQ-5}bgqbq&q)hOyzdVyi;vi;_=ru1fy=K& zR!3C(1DNxC6>l$erK!H2g5r_crhi%LeX>P8krtFhYOuC*CIQvr2!Z$wl4jZOZ=sv0 zRYauPb8qJS0@oEs_t&1_)qydXHTKe2L4kEjR$H=4m+q@9+@~FN0FNG@i2u&;s*sVe zgS4bAWBg+rlFw{fam{0=E?gj|PKdTM;x-OY40K;*`pVIgA@jbO?kuvV=mf6@XSOLW zIKVTW9^fFy4VLqo)F8-(c!@!VUXKF}-Ojj0a?bPK8$JqZPkC#u(15ICOoY-`4+!RKQmB6B(K&zTC6$51>du%C<8(+A$bijv2|+|hqRS5|?3 zQarUU#qVIIe-E*LQ?4dAzlpfc{!MBmNc4V+*4$&gYVkm?#O%fSAQ+ze_piHU>7T@> zqC4>|X{~qRnXpZMV9Q^~%saM`TSkzKb;h`~gDQ``KC`9z!3VQtS z!IOBb>_&|wBHUUWAFEYplZ#Ti&iTh z@flNCADOoUet+PWD@JA}F1%0IQtJni^?}w2wST`KBn#*&3xxRVqvyiEy=i3#4+vp} zAU=!OrA=L`2;O(t7+Q zsx)JsLKCEF#Dn4;7f&XHYgWq;2B8e*m$*uZq{^Lo|V0u~r25%SG|@R&9lK3v@1t1d%E%4_f0K&wY;G zg_kYUym@fF=NWD%_uylXph4B2`W!CYR|r}k$HO35MAx~n9DZxls*`vG?j&!AuWx=g zP+%RSzDi)7|KRn3z(c1l#25w&Z;#JdOvFsI3f)<0p=y+=&u!jPDaH9=5V(COX#KUX z#8z-H*Zh6yK3s*f>TGqWM4+AF^LId^_uq(Z3w~ZYD@;)C^UCOC#?X^SeVCO zVRlwJlco`I5uVQ6X=Nz((SP%&pkB~ErW9JHXXQ)Ay z=_k;2^$@Kgux9hpEAi0XHFY*Io|UyxHqMDq@3;t4TK}i*x#l)#1Z0Vjbs#K~B9Ln; z>HD0BkHmYv4AK4vG3HS?PU6HnYME)(j6u_w#k*#hJ;i z3RCakrn#bTIeTLHWxd~+I&Vgzlg4^)uOciGr~pSm>Sg*f3iw*B8+TFBZ56nE7c>eI zRI*0sVkKfltr1|oMcq{dxvad)R)MN}pr+pwtq?ml1;)7(&=%m)uj%!v2FMhiR#DGH z0q{%jBqFgH`%hP0v-}G^gUO#M2K&G9{P;FrK9uh@)8`CG%-Ote(6js6|9JR0kQ79= zAxDnvy5aFe)c*8}4Zf0f9~{^>QD&ZEs`A>olXExp2K2ocLkU8K)U$_Htt-iEN#OQ- zz<A6Clk~djS#s+o}kZ6BsNH&rVv8s@(im z-zr}SCwpIjbg^(DC`NMeWP&Rid+2@NI(i>Siqdt3g!zbEQg``%)-cXghDbz|BFlR) z;J<-G@^9eu9+qC_IfibGFqGNxGaHfW8#hEDma5m*AXM-@TT?(7#y_rwW zn6X(`uMut72bPPPle&JlW$VQLX@^*dqSw}fu7%Z+CZhS2cLvumG;{U6ZeBoHSCKQq zbv3@?suk^_;7z8hV;~OO4vs}E1@5GU^k&Yvk8hxOY=jas8n@61Lqbx^MutKNThPYz ztsfRHtY$-Lw;l|B`X^d@}CZ9wJ`|!}nsLZ-@ffSH5ANbp2W46in%uSk=tP4^TM1Vcr8Mjs` zxXo%YQ4Iez?}t``M1cwrNlcWS8V(h$6mOn&Na~IMn%i1Fm|m;+-GZ*sO-endny}cE z$$dU`x2*YaPge)gbNQ>+&maD+O{*CCPD9?l%4t16g?Cwi@8E7j2K*oPZZ zeYN_Uo(kP_ZS#^0N>Pnv>l6gm&|OtA6!*AvDv_@DI40vBWg-P654Sz``aP=34v7}d z%`V2{^YM{NO?*{Vg(cGpQ2ayU4sF@xE$PN$=(?&zK(f~#p<}w)of6WENO9BPk4o{V z3@IQ57~H(NxbRD=|e0u0?Z8rkw!uiO-!vJOn1X{`Z`*7~T|s)6;y zjr+=oM`7mNDX0`~x5vI9+z4emWMk!$z3i>C+F`4;)rp)*a?4~=JgP(rND1fwGv@65 z)wD0E7uhFjGL{sUiRrATZKc-Kc2=>ojOJvPW#bEOF8X|Ob{b~SofaZso8|9s6UB$y zjrXZ@vC3lk!WEmkC@#hDH>ll9Iao<6bBtwHtxN~Qg{4v961k0n#A9yC*!R9~y(Yz@ zN~D0e;FfP4y>I%0xewi0E!~}vrv<}F1$Itky5Ia0nW0a=usbG>1L@qQv*I?NIaiSo z#HKD)GGYDvasAwDw+_C zSRl)*QpnY2%v=IH5iQ#avEKSI@RQGq+r>oWB-;po^z?h+h0{x= zkW>IQRGd7OI24~tZr}1(V^4#mX2@PxWs|x5_#)?gZbwF&OBevY(8auM8SIJ2v~uY0IN5+dL4ZSvRb$i2fku$MRgxZ z{9NVxmUxdwji{nvog{fY)|%Ct(ksW=$N zpF->7#Rac5FTMk?a=ok1A?w4w^fuU2?}8b1Z%sH>3pW!GU%qzHz+DXV^urP3HTY5N zNAOQqABH&=PrqsY?YHQg;N#xy;zB|qk_4<&yoR4VEUpWQ$cmNy(9`RM=v)Hcyx51A ztKh0-vr}C=-}*`F{v~%Qz%+m-=cX~{ zay0e5VjplVAZM(z@b&0l!#^jV6VnE27eoK-B5RBsF^-DM!_miJSI_6*7x`B7Th0HC zB}HV72VQygGwfzN`QJ%hKwoGg3fm z!1}K|w|{(O>p@ku_u?pWH*}#jLe@siP~n-AD`E7+AWSDrFw7(*&9gAHVHx;)d?MZu zja*1=AB#Zpg~#xED)0MQGv|fKlyWOk<`$2f%7_q8MqRy*tPlDQ&g;y%DKOBTrF;EF zU-z={D*WNhpTI1i1HaM(KIYH#Dzmu-369o`jV>`*EG87lJ!7ARKc4+Mykj1RUo{tI zj1>|QdiSNPRX8)cc#$bx^TNw-dtgPc4!^o70k;Je==F4^IgE!Ok8lnTai#B}tN*?1 zrrQXlfYgYgk;7rUx(9`1p90oi98CH85}4VS`_QJ1~X?* ziFku}&CFRy9(kgmco6p7B$!5`=zyL;3ql03j~|-Py< zfYUejz`d^yF8rJv5g{?`8C(I^UXwqA%|H>N%SqItKYIqC?>QT8yMn9S5K8|QnO7M5aG>R2O{2JgIMxTf*1<#pF|PR#4%jR5 zS})I_yUGy{vOIFdBO4(kiXWo(+=9o+P|-965~8OWz*Co{QjUv>2&D&;;9Ya&<=}={ z{9S(dbGq2Dd94B;xr%kFRU(C>1&{(#CmbPp_iI~&@wgRI74{W8;DgYn=dmLiZ%qRH z%}W-XxRe^K+^~AZ0OZTGDux|-7mVpk;OigE`@Ca)WLpse6ecT*mQ8{6JMvi{nb%zi zL%ct*C>BC7k3XOL>&$(!FiPP=0g2hMMOKKeXh_3qE>{0`FhXU@M9V{g~}6CY8sdT4WKB2sqY9J~x;(gX*>-f7N?F>m&2JcaA_}d2oS%kn8H<*tcQAJ}2(0 z_>U|MH|PxiZoaS?Cs`pX{yi4Drbt9+)yT)Lnue`sy|6Ntb2^?qCgexG{^QW&RiUrf z2eWf=sDvN>%*G44xV-4%LLnhBxnWIvSSC()0b-Tp7;USOUtjZurZ!N#d*0Ffk@lUXMLnGE}~FvSloAuTw-~x59j%bHOqQn;(TpAHmONMDt6WDVQ}MG2AhSLfDn{kZ(~G72u92UZ=z7V zJJSQNog08lQBSe$gN*Z?Tw^ z;Q(fR1w|uN=u|vC?H3nnRY5H6Ny23)C~HwnF6)niU$gLb9DLeBKX~>#6&><%!?V*I z&S6aV>FaNSMBfrf_9%<24-%Dx9S5)CEB-#*0E@eeTbQOPGP8bkc@$$Iefc-S zc*shq@3I0kad8;(jS4jX?@XjUkJ}fJ-bEkMB$}6NQ6f9p#;DH1nd% zYi9=*JvWHf2?-3HH9fioKD-kVU|*`XEeC zr0YCvtElxMn7fdw=|~HR)2xv!nqtBupkVr$qY(G^!x8m#-c4e56f~ye^dSF$XQNdy zYt4XLC?ktn?;l;7L;=aa4eiAx>p7^p34D$LKc|T6`8R>O@D@%s=<;lM@pG&2x9#(y z<&sWFTeXB-b2(oGXAm@biKAe6^pz0j%SAC{y&$VZV|=F+lExqfq(+R4jKEtzm=G2R zWA?)eW5Ify(=>ad3(amX&76gcvuAPe$)4#pvE5#JJY&819r|#v8?slCvo>p=%qj?YC5M z-#(vuE<=qE4Vsvo&DP1h@iONzTHocgxD50xhr!+z(BtigdXXz6U%2&497 zDo1MsQd4jnqaO5JDeOF}^U-5-9vkK~JAWJmS(K%PDEK?Ts^W1OM`Y;QM$3f+hOQS_ zF%6t|Ohqq<3kk@|C70J-NOZR6RXzcMv{f>v7Zwl;w-Kqo z>DDP!*`B(|L^^OG9FfWAaN}u<#XgY|6^m|gL+wsg(H# zW8A)dEIzSkBs4NEMWi-J0jUBKk7Ojd8>cxB7K(E?CwX>85IyFs+9s}PSIwTZ1E7_XZbHp1FQuR zFwd_2pxa(_UB&HK`EP4l6|dMwnPpUjSO{^fL6)%Kf2xu#Hj9NuSdllH;WW|!p#HEhx(3!m%MdZU$L~4T+kP5*A5MGbGyBl2^59U5cC#t4v zqF{`sjywU? z&}$U_?O270t)^LEhor5Fd~Pa-Rk7lyt2l;IH|9St&vr^$OvFW*zfa=gG=|J4EZL%B zy{gSyDm6N6&QG7lSday)16M%3z^^)lBJv{?k?nXl43esl0#YG(01jzvv3Tex93&p) zB2H$Np&5^UX?%Smo`i%Mhm+@zSMRdQ7K|HGgMzZEF(W%`(}f#p7!6LPe#cbWt{)v) zPS@R3DsQ=v^;U7 z^d9LG_~g0D#e?;6;gZs~8lc{0G)yqENm*6xyYz1`k~%#oU_Nb5ivCsvxvt77C?rI| zU=jC|Dg>nX=|}^4k3S_cIc7F)Mx>Wf}~=kfK&ilA3=@5j(pD< zNkdo=npR;^6rQ{$21+Bd7t3~Ak!YxBWoRfE+WU>VxTK0fwG1?{Sr$*-#=k{Nc%WU` zctJ-umLdY%^e?x&u3P9gjmM3=>AM6Iu?hv=cdqzaB(`P4Tr@H7g37WIG`v>yoStDB zkx2(+Qc64sszRsO$JVp%(w#FdD0^{? zLvdVA%DkmO1N)-)$PyP5e?ML#ks}|e*QQ=iI93X^tQW`rD*QfZnUHltVq!e$1p}=U zK2h3APhjkiQr1;gzaa{pftx{66;eRzgqX2eTnw)DfUFJuBT3LdoCM{{^3q7Ff&LyE zFlaVxyO_ncuY9EV1`G}+d2W>S#8E=N={R!VYSP{^_(K~YgmykCroi}6Db7-*GPN42Kbz2Zm9R`69K z1*8HDpE0H<>er5eSmF{ncxrqPxygICmYVhIHJteoDtgNXG08CMpb-y|HKFT@)r95e_P%N*(!?s}saURaZa@qv^(ipX{o*-l)+P6xAH zimWbDy%~JHLZ79h z+fKU?kMkR6g+-G1wr_!JYgykas5cW+Zx4W^D%yO0*c=oN!PA#cxbC)EDVGgy0A2Nn z462^5%?k6s5#r(a?GqTwsa8BL_!{S4s~0pk|NX;D&{9yr=S#IMp&2=4RndALbnOUj zIpX2PLG-uZ7{K_4yM&9VT0bEtA)vn@o-iO9ONzfMpZkiXV;o+O27bQ>ul2GMMnoDk zzCV2qeI{8WeGgBA_Y0}iXeuTQ^saz<5}CUI)6t7TkW_^fkP4v;sfo$*R@f^SUGqY4 z#r4qte_4wvh3g6V?Q3Oq%(ih5J)0FM9{YYA$cRX#S#~r4liSJ>k53e8-=2p??Mt2| zCZ$|fj+oG;lF!K&63?&2Vf6=A)w>#9batSkMGS(-7)X^!0jU6VVvNx><*SPWv5t_4 ztor6n(EF3M&S8fHD6R%%G{btovbUw~ZggXKm60Uwv+QS>i!7 zT8vWzyt`w81htyfbz>61|EE{O;K}+`p%Ww?R9_`h+;yTKzWnMSTt26l^||Cs`k!lO z;GLe*-F|Bg37;Fv&Ds*sx;CS$Vc@T>2JNgLbf&vrbG}@tEzmpXf9BLzaht)PT$q}8 z1tb+CgXk54$Ni&>)@Md$Vi7no@j9$ud0kx>%ONX-E_3fc15^LvO|Vu}w?1}0oRm+u z!O>Ds`fITkH|fViI1mcyK4d8H#9d>p4GcKh;y!ewfo5A5U^? zRfyoaS%!s#hnN170qFn7^`J-mq9uN>x&&P!^$`#1WPNt(?d*>aAAfu78z8BQdM|a{ z(Okc7_$l0h+p-^PKu6IGBqVcNPebC`$(sI>l!i+F?^-}#>*1$Ymuv*s&Zsy;S8<>v zp*+`PWdxI&F|Mr9-%WD<>$koGXMK&aK*)L`%PC(G;)3s$PFpTj?~>XW-#3cE_or8Z z@2QodO92UnU+Do4D_(_PDFr%Nll8Gv3P|-x3#1CT3cJ7p5|JV2F^Y*$hDR!sq^_+P zG8T!sEC$n`d<)`NU#f{!LW2hNTuKE|tFuJt)hGImjujAvisaI>bP|oB>H1k(^%f5$ z-IhdCRoAsHuF{st+W2`t_ztZE-&+B6$!fylpf>sS5)R6cJU?|NUo92KSb4gexwGtDjfY7qsr>N%gyT=0Xskh4u7`Fo? z9+h-nu7o%H67ah>*EV4zyO)*I&nh2IF=49DnY#kXjA*>J6nxJu7otHe@I8z~!wVX# zPmi<`D|XTm{OB9+jNJp0njkHZDmfM&8@nzzd=tyDL>dLJ1;ylA6qTzd!B{s_)vsSpPpsjKUijk| z+!uz;%_N|=zwrJ^CM_@$7H(7dESBCQyTUpj(~&qV2`p}K=+^R>nTkXIfUoLpi2rff z6#SQ~E`l4J6$!J&Lad6J$HK@K3lQCQT~^Yk1w(rk#o|mq=&uZbKACby(GtKqS{Y<% zs7$Y$Xb^LWX)!@7(R_50+bABV#~uPnO_3HzjW`}23**)Hjh7FP;Q8_u$TK_}=>jIY z^!o$Q?_1h1_m&b(r2^B1AVD!MpUGG#NfZ>`W4aa`3+Luw)tbU7#&a{tMFQdk%-ulNMKOU$BurNVLVNSAzT|?(95HYf zd&*t>DI2HruJao?ODMa}v`cTMox))ETm5+5E36FlV(K>{!9W`WG(|)<>XwG<;8+`x z=mm7I7G3gy{_Ih%!LH-)i1SlYW26OA2h!HaUfj8NLy3J%RtfdI8th$B*WOxgNTQ%v z%VR=JDiIZj1^trJ1J-~4;TqQ|tTeFGV3%)jkHrjl_nm3jaLqEPmJ>g_2x~820=}Nb zH5q5$odFNJ?gp2ogS@y8bdTSP5n`cS^ek{mQKLh; z=qMcZ77T(!gVxBIiC=QF)B*j$5ovYQA1NSpPsnKio3mZoLZjsG1;o5&PV}i0N1S>-ibT+KV6t{z{1 z!(%3Ha4Z%|BX-2aMvH|6N8tRWcv^qbway zq0MlnM+gLo1BpepML{w_Rt1RziG>EKYH-$s;elcrBo@xKOQdi#2`L~Amum+6%6SF+ngvUHlHgM<@agk| zcA=d?13bB{$U1PWgjz#lMe&Yg(iCp1fk7N(y}D>`UWwI__cPG4xo~z?+@_d^o4`3i zBje-Q0rV_`!x0DNln=B7y5TP9pv65Yp-77bSrI9TNLf%Si3FrCO%jQ0D26c|i$KDd zgXwsrPzF^Yq;NDDDIg6d6dHkv@RLJ6&|fyW6|n8f+Eb8=%cu9WjiBViuiN0$Ojznq zLJx|GFD))Tnw5GSZ_^M#+xhW+Abmd{H93%Jd0^^mRYT#(rkJzod^9DD7v@xm(mL!0 zgIJQmEM7n5Ny3EJ6r!MC>Jg%$Mm<6pgasiihtvv#N?I(4M!K8aLV_`uoPlV3T3nY1 zf)_+nJskh~J%PZQ{i9KFn857sl;8-ZV z-X)-G9u$}AvXojGM|k`wI{tKjC`W+iZ_m$Um!UNz2JftRfp~3ZfhLL^D{0{<{@HW* zGer%Sw{hki4*b#N{2P$Lp(?4F|7?Oo%uEgJ7ow?||17>&+;j%}`S(-O!r%x*>iPET zdrC2kcruEY819!T+;_9(S{MtUl@h(04}Z5_N8mYU*1i}|+~2=S<)fpcAZaX8KpMcv z$Ot_9oo88$+xK$D_5x>t+-)crnl$4$pv1wnl29!aL-FZ;At+?2cu`*Rb(tpM4f2jYA4ZogtSM zghvN$zxOLR&)x0jHIA52BRIpt*)y-rIuMSikf3yfr6Q>hBo@*53?8FN5xa<+(VB>b z1G=YBEOa3l`9vcdI!|mmKRATBqW;UiUihccu~CpT1}PwQ!pPtVX$$MAuL#Ohnk56f?-sdxZ##;3!@sr$i+$@_XR%n zh+!swB@pzDOA)CbQa~UTb|-JuBeYvF}2;q{U-I1k0NQom9@rCA#O@jb8?p z(9?lWM`Xm{fsZ-CeBtBPWMIEsa)rUd+jcsLErQv?&f?>U0O1UT z7Ej+#TL#W`Dw!g=;IUSKej`muRj}7vEb>9=?=ITRS0o~#UB>pYau?g&+-+5(tz(^b4%>w z)b>_Wtb%GGp&(&MSruy9!qDqdZ0VLl@sGT?6cL(O9z1Xm-<}oh8PEI8`1)ZS z0|Hs^7s2~syne+781-rJv`W3%W`Mu+?n}^3bcKL~LMR;JIi{FK2v6lZ6b5(Wyd_Y< zTZQqQ*{A9~k1k#3$rLWNqj(fU42;~)5*RbpVYf}iMN%4aJvkyF7Mo(Kh+BwuC#>~` ziQ@5(Jd_ZTjT_P8csDZW?}vMFTk4`6gz`9mW6G1d?S0Z5$Un*KL^@tTZoTSOn3_!t z;kocIPgxta;2@5rdsbf;7>7upqr{^W&Wu{jrn!|`j0mr#z_d1wK&XmyO|B-^(jrj| zSMIAE@K_z6i_U$R&f9Dex$&x7nUP5BP(X|kl}s$Np-JY5hqG@CTshG3)$tuKAe*ij zz88Mmv6A4K9ud^YVoEyjUcKh*()B;l*H{QnBZ0rGiOIJm{ zgjl#MYoF!|PgFSulc&^n!KRyNfC@Uy;)@!C}7w;GNRi2hgUuDPkl(+fzY?>nN9 z{aCkAw)-j#9YxW^EZsN~orUc^eaaLt`w>Vj{8keBU8r^?H-6?MsU(ai$ch!MemtcYG9zK5uETjg0|m>!tJ5rzj!r0~=PZ|NiMqr=e5m7y+R)JPqQ1!SZBU ziS`=0yA|LF3icKf5I+vseoyrsY{^ZvY+w~E#R~~SrO<0hNa)~>xp2KnB<%{#?kkCX zWK*etq>3cnt%gb4kt;Qi(A}D_t*MolEj@hx{CVgEYQH{c6Cl?Wn~CgX1%hF2e|QH9 z*yev9RV><6Efm*SyCMjEJp)iHNJQ4ISTEjNBI!h^dcSF(U1sK>ll+haV;mkZraTpQ z=594Q!U93pRY3Q^x1m4|w<-eC?g!SGSleLnEG5vpOytv71AULx%h%OqpeOeixy0t; zGZhCJC6ZR9TI(bA9+g=j1a+czi&>yc0m3u}*S%-yb&rN4VQ6}q$~UO>`H9xSyTxupycVTa5&6GnaRkL)J$v^7Z@t^%sxKXZ0)r ziKG*#t@Tm)`#34Oi6XUFGzq0*WEbC}Bdn0NU-bu_N;}*f67=JXMRd>yD%v|xkW2J$ zvc>GC&;d#_d9PkN|Jw~7y>acwd%XP+nYjoONju|IdDrs&s)f81v~Zg$x)UoD8c+3v z6FuTw2l^SlG=$fq(8jdAfN%wFFK1HW)}7_h=dImL-cv>@akVIFM})T|T~4vdT{97# zAuL)e9x8@$v7AI()Bd9j_3Ez^Ud@+T#Hbe3qm4$v&$47;p`^V@b$G5_>Tav`QA1fA z9)S^PXWCjosP9!hp(^iMk~CZ{fKvlxixWw^W7Z&TH=7ph)(|)lI9P4__@>g<0x}Vf z1ffn)s}fput(L?^eMw`8#%DkxX;-qB_^lPKSQ+IDfE18saXehVUi;*}sx{MdlMQiW znWh1=v1yP<+L2lZ&gb8^_1wDg2t=Tb>4ZpY7-|gFebg%RDjO1y$jk+(H)m#F{m-#I;Pu_6;jXiT6%A4^DdFJBjsjEmP5-~AiVZtSEFfr z0Z|w{4K>E6*EV>b3t1uc5Rpq$=Ne++NF?>3Ual*LR}ztL)LJLftIe$`EHxfy^lC`z$moA{#)L6vy4+Q&ag7{t2f1v0Q^V^iWn z!bPRM-U_K*y|!eqC@l zsM_!{TB(CjAyjo9=vfA}fI9C|TXhlwXK@)C@Toq7;vcfmPa;V-GBsmRZ>SGmi&*I# zN8NqL-X7Zr9YDtj2(d9ZJj`r(s!|d0X+6;EtA52nTJwX}I4{P9$#-R~hNP<@@u+9q zBb#V)wiRL^9VH$_M|Ipg79Jb36u1cwlX0j3U8_F!LF;{#5)Wee;F^YZ=aooWiAIVC zS^iQy>O)5?X`2lOl_M9XCmvd{WHrMd?Dq7-t}Lxy?~An|BqFq`T>qKTSxW*El_>2_wpFur97$B!EshX7s&vOX+=_s38)#&Dc@hFt2< z;dG6Fl;VTe{o)9^uc{Uhf&_$wq!^TmC9B3I-2}Ok8a-j6&r6s!Sw?|JXJBc&_pYin z9Z?5T3o!Jt8EOQz6iFr%VqJ2dcfKtO1@mZ45E73@wsx0DnoXlE4~JS759+-TL>r^y zt%`Dx0+I&J&LFFyTh=KKq#6*XHHvgsNxG3{i3ho_YWcYy5UZa`0m(uxoQ;f(jF2xc z2z7w04iXM29+GZ@qR57oXj%cEW!3a^8BH=lvH&R{$mqe*0Gc3ey)u|Y(n>gW9!*T2 zt$k--23LS&0a8Gaxj7?P>-CoOe=wM?33bs*Co)&BQ zERnPoR0q{;@gS0Qm=L0ydjKR0kOBfJ0ZCmqf952Sv?~538s}>UvN|&#r^&tf$2Pq(e!YRDcr6rLp zB->@xYLly^%%*H8(uF19k>YK^QZ6kH7HEp6>Xz>kNxMQ>R;?%;M4hbNt>jQFYSvI+~G+BTsX)B!8>+K>OM56=eTv{NDkaZx);qYh}Y6i~~Ahx>i zSR!%Uuynk(lXws$cnwV3rS+*!f@A?wKpc2&XBXKgrW6uMt04m9==w>m+0lN-Cl&S@ z4R&4OE|cq_=OA5JX>cYJVXXFgnjL7D8C#NOL&qZthQ-acZPAm;x=KK!;S62@$pWMW zk_N@2t_O#-NF>c9+u~@K?5aW}8&mVK2uoTZi;x16hBJE%8bGd)$VQEldg2rT((%^r z!a*2jqFGs2k)NL)YseVUPDp=B2G-Dn!x0in`Bl($CewcnyY4z`?^D*f`<%1)bM_PA zywQJN1tJ9|MN6R6aPY)Rv9;DLh4UC0lY;%+M5L@&am!~6Wwyv?9d4*gT_QTT=I`pE zB2u3U1elkK{iDf6u$MI7iD`T#PSk}v$H^WTwY}=5{#!4RR>K%k8>5fS+Cfo7vc5tW}xC^8T$+OhXCjmd`BgU#p-f zp!p4LFAO?5apGJ-PuYy-NFoT+a^WXDGtYJt*#aYzw9MPa}t2?VgZ(I?#M z?H8rd^+F#n;1=DNjuqUVlDU+rdMO<5@DP1BtC&}&U#&6dl0sDYx8inZN?DtXb7}ga zxmuO97INm-wwwgw$!0$v(y!x$yIzRFhf7b?f#xRqm>LrZRSo!MML3lSKWe ze?|DC5M3k7Y)AoBaPz(9iw`|QwgW#Iq?XYy>v$TVA_i8T@zHc(o}G4dE2Obtd#4Y~ zWIfsAbtU($XOxp#O*g9pVmvyo1iuE?&^a42P%$+=>Z(||<|vcLd>B7I*sRxk{f2Tu zXU1@4Rj6_VAYv5L?ThzsJWjLejD>^5Gye!!+jsiD>%jkru`iPi<_SY(-jWj7Ju zIHhhg453vJXAw&gA^Tz@DQ*@HU~URqbmpKJ5#lj{S{m#BhwNfQ{q!C(jd}11l^yZh~v(z(CG!SK#@L4== z0wlHJ!{&(nFb*bH#Ql7Lf;oTrbydgE))V1?>>q~;fOO|*RBnR33GADzI)fvc-Ei() zGD0<4xU1eR62+|b%x=3h4g_VOrqcZO&>$H~{*5A%8c8aN3p|tD7w3)>1U2Le5M?qQ z$>|3-5{&sJ2oQZ$mmDv9g|2!cwmG2-}nwhMqN!!YPN8!OL`z_K5& zfgHE<16}{T^7Q9#mz8g40L6UFxlQbH$p9bFc!2l?Q{C;@{)&h*Z>tvK9@Dbyc=V3< zc!f9YUEMf9(*!HWA2SCgRoCpu^H#^cJ+_H>W$VrZ z2k$SD#kDC2hA>7u(FpN?_%q z8y1j}%3mphb#U5tz@=uhB>NS8SO1%vUp95yAS4_IL~%NOSnO6j&UsPvCwae+r(cHP z)b<{h8JR9c)b2Dej!sx7&#>dTqSSN{0>FWTCX*xLBv&-tN#%VnlzRnFxd|wDzzKgV z$16tf=4HD4?drGc+uaV?NzL<}2|ueFPjc`I8weIAO|AWc1vZ2<-2{QVA6#~0rNaL9 z%x!jnkiAk#K9fw5N?icv*{!#n^Sy%o4ub! z`$XBjGa}ea37MUV+>86mvh3aafY^~^?RmHt%lLdHLQxk|jK0Korg zZ=ik<_OB{A*}R3UD_bBXi848?AR(`sb!)V{a;Yd&2hnIyjX6+*5FxXt5E%l4LbcQb zu0EI~P6$#+E0e*16Q1pR(pN@UHsNtj5iy4bA9WHTb60kacf(Fjq)7Av!)${KY492cDoM2&HOjJyQ_io|;r#H(UI59dBJQi~ zW0_`iLM;;sV8alj>m@ZRb&TB~Co{$~QTWnYfvd*noqXkE)+fkxsF}o6SnP1Piv44C ztH`TZ^1lgv?|r`}Gm<@RxgXb*X$o}rt}T|!n?kiDgj?nGplKCwOq1m=?yNp+f>WdB z90ceHAygP($?}ENXdmS_(<8OCUr@ybTQ!je6rEai+9=?Ul_ILc6ct4vx(Q+rQ%mU_ zVcA(?Qmr2J39Y4|DsdTGW-+#2Fv}ISRq^3k>qQ_%@ATXhD8eiz48smwt+Yt)ANDS@ zeVCg#sQL>$zGws;v+mA96Soeq@F|x6?Nem zCL1GK(MbN(&QcjZWRN2Xqa7+7EA#|l1AAhDN>jb>&uDcjX8V4+UD~2y&4>X4YSxYZ z7kVWh7B;m#HC81}i!r{t;(T|=(7IUwq@PW0w^JTHr^$72myDCmYm5I^;eU}|M=)=- zj6JZ~gTnokBGa8t??huB53M_TUnaagX3L_56D#yLEHtI0t?O1r>6=F{1xft!ns+3D zezN1>uHHd@u}XVUcHHt@1d1URR==BgsN}ma8AY4FtpJY$J0x`i)b8AMhF0|qO z|2``X!AMuYwl;?hS)Q>q)cPleZxG>__(ORd2H!^vKN`SmgKeB ztNVY-@W}PZz6KO0%i2H9k~)NDeL?e5ZSxEXz&gk%xnC)Fp9eqtB7>t8gL{aGI z!2dkA*57c9(WlvD_0AWj9jv|!&bgLcHgKQyN=?s!*!jt2r!-Kl2r>uPoA%iVP*WhbGRk$zc|ldh~7^jT7=$t$P>25~1GjHf1K@I1A#J_IslhVe+XjQqv`z;)tk;P%`z}r?_ZcgngaGq$E&H~f zbMo}&d<2;Z)+0hW8i?jPUy>Z}dS;M!W<%>M{8VzL==a?$x+SF{0Yiu|)xN}yO^yBh zKecz?EWhO_ZIeGeXG-4&R$Xx(6g7#;-TSe6%kDC5dZ(h7&!gO X4&y$K)QA(IvjGpv))~iN&yk1 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 z ze3pA9layj5mhfq|Z=rAJEUKz(^%U%C3H`Jl81)QFKP5du8pFZC`MaBmiU_$|Su9unhHOo~*G z7u}DGMx|;bRODBB&i~?ZqTETPMvT_K8ZF^7XQWyKlXE++vG#zh?%|nmO-n^XjYN+K znILQ6=fLlx39PmL@#68R#+wj4W2<@>{;l_*Uf$`A-+hH!C~6zGFga(YMkF_FR0C7F zJko5F9(W4gh41_;C$y(I?!0lMHJvIN0{!)X7ZnP>eKXavq zGh2cBtrDEW-;#p~t?dtnR0TsA7tS<>8vpDo-d+fwdm#T@xN?vxd4AG}MC@nZyjjDr z8=rhaXjlPeP}DxX`h+)}8o`OF2xoh?_l6tQQ?m??g8@qn`dIi8o$F(5YWq^NYZ13; z+)Oq7UI&d6vFYCKgoUqO`mfAq^B(c>jhv}*Yeg)=%S)3_7i4TF#P`sv#s#=(peVbJ z+Ic*DsaPuOxnRnJ01#f9p?{Xj9B>j>Pno%nGV+k@~kp`Mz z0-6wP8^XOA9c~pSkb(hj11A?o39>CfJz*+^g zp4ib7?C_Oa2!n~3v=c$f|m$b@W#~1+JbJ; zR|J47K3HCjE(+kGk^r7ajVuWOXQZjr1@IIB3*Jb}5(xlz5U}7e0v5bsCp#M>tl+WKYp?(pFropzBVfTRjA{TJLBN9N2w3n6qZ$A=FropzBVfTh zjA{TJz=#HTj(`R4FscD4K1MXacLXeWhfxhc!Ev=O0zklme|Yl-ij5Hs2mk>K-r1o= z2oxJ9K?nc=3*IS@vB(`LG)6Qa00b;}hfxhcu_cCp1^*GS;H6Z&eFKl%5BSg9*ZIj8 zv6gX@MG$9ekBo*XJHF1xxJfl|Y4Fm}Hct2&h`fbsD^j0nkKog8 zgVcW7KX>`;soIjhX4mym6_+uh0fC@`1uuQ~wOVbgBzMGJi`pi-)(%YrW5d@s^eJuX zLEFgdw(_Mx?Dcj4tBUIf^Zv`LP<8vUtwd>c>5+^{l<2-E3XXo_yzb>xQw&!w} zCk=qh2w3ovZL5@;T0L+~YS-e3Tsy2CI865cr8HVWtCVIzteOQdBQK}z0OoiYtJ{Cr zR;=Yl0-4o#8o07xrnFV|vPop3^Ubzu_MEiKpl0^CQdD2>M`rhe|6TKzI->#F zHyQTfUU=tD)h_DO4Tsu>X_CrMigW@23lZ2rQ^T6C3gh2yYmnwq6-bjK|zHbyic z7z8YM%M|x^9JU>JO@q}1S|#Wg+wxpljV|xBW~9}nfDHEuML-Bx@K*r?mTd=al;w;M zYpqaB|Ex!m2CXxxk!wW@TKeaCBtRetSn$?PfzFm`2V&S(?neu0SuPZ+ZRqD67Jxkw zu;8s1#|m-w9w$aF(+@Y*A7}|5|PXX&zwg3*W zLCbt=d{}M6R0G|60tAGB1@D=%%nWKRR(5ruRs!sxN7{jK&GPb+OujLmwGB-wH)T+a zyywHMiGW^ks~iMjs#>e1O?kgx_iVFg{2H!ixiS#Gn4X@N^?H29H0AfYpInrFF*3h= zKbjLDFa#_F!`_5g4<0v;dGLtEUL9DG1u9nX(bUwmB%jBZbw9a&oD&i~3Hek{LVn3f z2tq}`LU7KWs@a3bC4Efy@MEzaEN-P5tY~#01V;{9tt)pw;3Nd0BVZv|wxT6XnJ$U^ zTn`FW-5bW`>4BuKpNsV@{IB}?rOmP|aj-y$rmNaIY{YgynNE%T*rd9jm~20>`%Bz@ zMEbR*G?9;~SOEY40000000000000000000000000008L0{{ahhKYA#x`#%5x002ov JPDHLkV1n-od>sG) literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/Contents.json b/Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/Contents.json new file mode 100644 index 0000000..0c65754 --- /dev/null +++ b/Example/RHViewStateKit/Images.xcassets/ic-maintenance.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "004-cauldron 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "004-cauldron 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "004-cauldron 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1.png b/Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1.png new file mode 100644 index 0000000000000000000000000000000000000000..74a37e618a3e155f00977780d25bc63309764ff0 GIT binary patch literal 15992 zcmV-;K8L}HP)SVFwzzbmU66UoGv_oX(wG1;I zk}ylBop$0te=V;}2dABdE)a#K0Rq@zO#{SoAp2r@({`8hzVAq~CHYFaS}e=<{r`T~ zvhF>1k#zp&ThDg@ELgB$!GeWSz+e_*Q^!`16QErNzETHhlYlj)j_JUMB!GSm*#3Ka zHV43h1p~}Fg52J*)rW*w%Ypgu!}-jf#{qiqW#>ITn|r{5g(PMLK}b^60pEzE=)@1? zh4K(&!2RFsxosy{nDdy?1VL%xm9R52VC$j6K#8&qrO9TnFsCsi2|^O19$*W0;!QBM z=nDg^+t#x=1QzBbB$#0!8>0@5>nf0g(C!9!1T4&1$S{L&XUBb8&=b{-|GJ<`Ae-j> zmwagGsRO@!1}w}u%or7m$bpaRhv`8`16YOb;2>C-QqaHHMm( zAmph+J+L39A0af@+bn~9ZlUHS2$Ewr)CN5DOj-*T<`in0Aa{2BeJ7M3_#;$g)YrJS z4lK+m)HFdjNF@gV(G48LkGBbp>$Y$8Y;MMl;s5Ir`%6Q5E|-P5fts~J%CS9=1Un-b zCo!@YlGp9Ue?3qn@VWtvu3J)M4xwfxhzz<9N&ra+?8Ke9jOm1{mY0-g#eoljg*k;9 zR5~R9)>yeGSUUl|M!1yVRm~zV{8ZR?f}M8DkQ`2aSOEp3nih3C5XNUibLN$Jsb0Sr|#^yZzGhZ zx^>rDqGCU(QI9^l4y8mdlE9xv3IY0I$9?!Nmqm~gQL_ZOr{^#H+?-ky!ggIWu_<38 zQmwGd6rFHLlC0LG2a!VxhyAEVJq}626B(S0K?810k_3&o(W{HGVB0g#1i?Z{s97VO zKtZ`XI<{`YAD<%X?OeWvF%<8f~DI{{bq#aNsl0nBd zs1c+j2iX<$o<_GiloEN=0GfGuU2~cQA-g3M2zaDOWIdN8ALtm6%~H>>Q|!=PuG=i4 z)VKtx9Hf#wIeG!Lt?C#X+rSwUp9NJXvE>2Bqg@^(M~V~>4*P~4eRLyv@i?8!kv<03 z;1q0)#VBiF&KIqi^#m!^FekgFmJDvfqR2TFxra5}q?7+Z)KoKz@Q zoHmVQEHxcxR$*2XLV*#iop!6U^+-0V-BPsARbe2Sn1UMS+w>0nF8w3lrM-VCs=SCxv0bj;} zHz)Q==-P$8Vr&Acp9Lk@9ukwbK@EYT;3z$AAaYb8Xf=rBx(&%;)hAA(W(YzZ8au$2 zi99I=>7IQm;B{xm)^5$D@hpMfUP>JFo3)mZXt#IZr|>vRmk4Ij&o%AF=6(At+anFr z9!V#O@%4_aTPa7%L=s^q%`!}s0m=^~mlujh&H4RP(ql@&`6Jxry22vIWK1hT$jej* z&|7>NQRXj15?z@CWkQr-~qGjH4m{G0(Hl-e?5{jWKNmL3OD;IXB!3C4u>q zc1FcOX)I7f=)dZ!b{iVqQ$Y_T#y0MDFSqQC{FoLSBpIKewDYpEOr=E1MZowdO{+D( zECNXnz1C9Nb=_;1req8YhzV)2*zV9Z*Q9=fApJq&>_^Gc)BMac0kBYg36iWTQZ_jV zWV4VBV{}YM&li{kxppb7q~>bx$}&k1m;(5a1Rc21ynk;v5>f<{Hxj z%xp!~B?vN-k_Np{A=H81fiK7FqzR12vm4EoMmtFb${8e zRE;3`E$1z@Ltdmv8aW6Kbmhhqvk5Eu10@^<{00uJBcXz^joaO@?%VPA>VgRUm)jeIVaidJ*M7 z={e9Y*`28Q%eLi-+1!PfD{w2 zA*PNKq+CcVE&}JD-W-&dwgOi*fb&+3A7g<4y#$k+6;029nkoCkxrk>JjeJIW3Z+(x z&liX^2akty7C^7mc4S2lzE;JiVGHMj>+Zh*H*V6BgxdM@9uq_Y_g24#A$>(jqchb5>n0r&--E7iQ$gCM9($=<2Ca)NSrr5e zIZ-7Q%T!)eNh39O{B|1U^Tjw=Sy{SbUBYgt5O{yTE2agnmzeFZ&`=&!nGgQG~2 z=J^Z3eqJvqKm8>X15&3PpZo~O_-g7oP^xGk`JzXAx4V|EnzNDeLa2(0WhO7mWEDjt zkTJa}UjqjQ3ZX=pkx*t4f9<&^&sl0)S^s8W3p$^f%r0MX`vQbDA6@_%;0q1Rs)8=-kY zD}3@#HpB8u-;?{k0R1x4ubb;$t{O@A$&Wiawo=a2BiZ|r1lv(E2?ITCB9=F;Np~2f zK)Q!32T4MxrtL&^s;3e)v4|Y1#vkG!nX|NWfZ5T>CEKACkc9a4fBa~i6e(PG`*K*9SHNn-jHtZmhtjik>Af)ETkcHg&pHjB`34sxUrM3SsZCkeHe63Z!2k+onY z3&oKeSJ4hX0FwL(C>6Anfdk_htauGL7cqzszw`0W!ux-($mJP1^xDr^c?HZ-%ou_Y z?&!F$o6A9_wY>xE#<8{CbR&SSzDBe&Gq6dHVhe(dwL9&TX z&gxo#HM9bAHHwY)=S3Nk!-*2&=;1??_J8E_UxHh|aZhe?NRm+H#51~^6R(bX$egIf zH(@}rDg#WdVMa+1BYYhVc%H+6PY0@FQ~FskGVRkxPCUfiO^cY#mAhSh40vQ1wBaKF zYAoXzbJmwcjud|V(;vaFP`x6MA%631-+-mdmQQNO(5?~WMItaqL(c1QEsoDS3OqVY z+n|l1Ju=6P_8DKi+Dw7CGNSZ_?@x(<03^lQrFn%_m_(!7J zT^2bASA5_)K@hSt$lgdd#5qTYIg&wYT%4B_8P6&^P^z>5;D%&r=8?gF!`;`x9Kvj< z?k?u9=W8$(%NZasypRZd`k+KGR}uo-x)?To>;B17L%|^9yd@wv zp9iIa$N~+E*5T(SJ?=WjSPlSWY*j*=P~R#Kn)lU(lB5e}F=hop2#Ht-%>dMe!JaD;zW38B zd`=hJ5|8RWNoFvA*tw9TM`9=d6!Ac(3}Tdr#$K}d3xG%dIkkavqVR*&vjlet)2*MN_n z1_|vATk9oIMf4&;W@WT}#vAE{@XTjdY(#R1k>BQ!VCkjv1UV$ho=y&u9{ya{NV;;X zMh=3!03{m+@OZ>@RU;uez~)4Qyx=tbN~3+Y8tt=+ApL${Moi?{Pp{a5M!3+A9d22W zgGfTK*Jr37!Cb0U64Nq~NOW|P3enMmZFxK*>=(J|oT;`uj6j;mT`&tVYY0M;A{q*f z6J-Cb?Hjo$cbXu_;)^gyCMPt?BBh594D5~*M-Id7>pu!#{@7aB``CZORDe1=rKeEz zy%5MSCrC|8VVdAcepj;!GoB!1eDAwy#qLEHG&EnjtuILX_I~;jZ+KYs)Bhwf(#b(6 zQhFGwR`=ccWqA3yr{U0nSKz)oz6@g{=2aonKu?x5ua#JuH$Ebcp`>AT%{iq9k$9?z zoCJNrH^VH$j3x+?Bkru<-F%MQ=c=2CO)!vmGtNCmcF}(nHs@UCm#7Fqr2y-dqQ+z5WlxM$%)d$UzuanW(3u8inF;awAPm zyyj4^-gEW)ggQuAeo5|WwiN=^_zl7=!Hgsbd8ag$`&!O*fz2)j7k~As0PRmn50V;0 zkZj1 zrWnmIi!kE|LL?yX6p?`98IYdJ&e=vX6_XdFRM3$OjciX4~|CMKphd zBSA9AkOWWL$8t=_T7;_L=e~S9R0Eo(!EC~evO&l@m99b&Y>bPNL9cwNy&VV3c1j_s zYcei$Ag8M!IuEq@^OyBk)xzL1jr>zqU^#$w?e;AmWe&F@o&KRJ*ujZY`2>=Vz1);h{=S&1D8F zPNmxQB_+I zv}qJb?1^ceM$&_TeL>g|y(A*x-*7=T_1CrpLo{zmTlVzU888iXbUl z!&yJ^SjP{jnsV`GP5*qbmBj|-nxRu%KSyk9sE~zo;LLi;^J3$m0+3A{7AxRSC z7)#ucN&eX=JqR^J5Gt&IFJ5Qe#3TLW6EMySqs&}tPt$BAIseBnh%gtuqOPN9{x($U zgb_+4(b1(^DLtQ_Pm2s;r%OC1d*|MS1WCa(Ig-#qAO&w0HVIvmu3a&kgeGsH&5KvZPcRIaL zBCVLc ziUFxwlET*Ee}Tk>xsWDWWLR`Qo|>1D_hGo`Xw+Vdgi@U?as6y^&^|JsN-WOA#-0M{ zpiih<;?}5grHEqcSyRu8&!`hICWuUuW4ohq!3LP+s2zgHOc>*meWEw$Or|B1g9XmK z!S0muM#U-NP|s4cbl~ft1Q1DV4K3?PwV1epp3wJE?b5=7;+0eop^Bw8dXJq&qYhrpU1^*^?GS+T$Nk7%1d5la3K4vRi)lWlJC^MTEik2Yh zzz*V%4-WQ7b}{M7JAOb&2pXMDj?lwT0Xy{PnKp-bKw7}l_>|!5&G7T@z8gZPU1D2% z)I?=P3I?7ypopmW z(o5^o4+Y=qRaUuO${-bAC??jC4ZGU|&W42<`%tDdH*e@Jdx6UM@aaxTSGJ&`nMFLcK~gamoou!#r&8c2^{{O}@p?$Prz_FcUC6nyBWgWy?c&buav()?+RyuQD1 zTbigvS;BGQ4dXVZFP}?`=+s=Q2^xOsQp9^nyUR0hKnbWZ-3Mh9JXcYb$R>zghfaJc zyYMpV;@y!qo(#$k$8L~az?^Orh3O$~AQ1+lr1t2WARYcpf+RUW#KWM_~{rA5AS6dpfRZ8p6O4WU`lO_x9gj?oSYKa1FN^Ei<3!SKbG)=av@$#d=vC&i6yL_YH|6IkEiFUWG z3+h~(tcsYF9?^(R7~&6pbG1;LN(HH7bPcji3PK+SY1D9vK5_%LJC?4Rm3dZXFzp0U zV?0D^R4iieruWeiLsiP#y4PcRzQb7d!o=Lleg#(lKq1|Cq^f_mDq+{9%qN&=Drsy7TyNv>c0Zrkk z1{p{S4x3^z^_5B_-o?XbvsEpR-R0Q<6@=r0572rUdxE#xyR5D|Ev6lc&Q+} z=E>h1|iamqVl+5o6s3I{P5eW;a3ltGsFoFj36#|x59ho zod=iHFM)GiEzoSM%X`kVzc?TMVbl9_+a*X27C(@B$8}x5ajx1O>6rFFAyrEBEOPFs zZ?S>K`MMJaB3mSx`4(Sf{6o_0K)bUt;TwvqyPD3)jIaav>o;^)Os$9=+;gdX#{U}@ z-aRRU_+W1<{Ji@z)5IWLj-()B|Y16r%S3(j+TXkNMzY)BAEs*Lb6 zA_-z!!-npPNfvZl1WtW}>XT2&qGHny*$RG_ZfO7`l z1JOfXv$uw~BWK~A*jYFk8-h`7qTySoTQP_d zLyWLomo^`JeH0uG($)pbjJ-IOlp=&2B+0uZv{~@o;L&v$AFc;}+YCS7@opG8c-O{%S3#gXX8UkaRf|ISKC|Y2sXkl^-|?ANu@3 zLChrj*?XawAj+&qO%P=7r!VbZaK3weN@8HpeAV#-;Z4m;9P8^m#ze5$QHt0qXF@S1 zAt@JTF0KRRt6WGBFA}6bB{j$hUv}{zT>jppY zJ_$ zfsz^>b@Q_;p#*6qs*%{>o+W?U6NDl_5@hg{d+@~J253S;EIMy;K&~8uq(G8n=&3bA zvJ@j##!&4#s2zee>-WOB?eFv+{?+?dJJDqr0S9;R5m?HW1M@!&a}_l~klh{ao~9PP zf59?m`Y#)b$F$93XS9vYOC5%*Jjpg0Ll`nt8l-AD>KCA`lbIcf4(1SkVLkY|bKZvT zfZ6M1+aQy`5+!^ph1k)>5PfSIjJ#PNSp$#UPDgRMCP_3u6ij>}$!!9z>>aPSGD z8*4uXX!qlj1s$OG#VMQ{b%O4+aWC^BY5Xu3P!j|p{N_`aZCkj^wK3Z;*HqqvKbF_# zkPS&xnq(TC!~u0U`_DHJ~TfC)tl$d|$5AdF3(KhHW=O9x!KS@^2+U z1c@D41Tj?e$2w#rTdr)W{{? z!rVxf0L)g@3_+-9L*oM5?ld*a6ojhfD(;*VI5{*`o$|rN7eSseBfBOaQ8KQVkT5}* zcuhQ`J>+#R>G9<~SxU}5pC)J#2ONE>s5xW-lBOzGekMVEuz{s>=Mb#p5s4-Q%rh^Da*ULo|yR&i9QVOP?vEfy4wCu~@k|kKr>v?Ne0A>SfiXapdXQ zEgO-}zzIN-M0V5*vZNQq&Icl*&9es_O~KraN~~Z~F3!Hv24lw-K!p&HfOUh;9>8H_ z#!Ho&A_(ERn^tUXy}-4pSSdoE#O|~kE;3^TC8|u49+NJ~mR$6SagEUTBhulX!MlNVUzd2o*150ZW& z_XT9C@B&lx3o!_fTnVS2jiVE*O#gCW1o8LiR`vJ;M3lA}Mv|H%2w~qBSNIkzc0MlK zrJ|qDY<$EtLDH_9%Qi8K#^2clwuSG4=$Yf9^o}k5I5?sY=6sIlVJ30(F4R|1hy?KUU@^n)vCd{??2 ztuX2pRj6iaTovB0Vmp^yp9ny@T3WH=+dy?(2jRx=LEQBjj6)h!q~KJ;irln`*Rq}; zuOGF25yl)_L6cU1Yteb&Y-|)Bz+!B-GT_DU%dboNA@s}NaKyiw@fi?HsYwZv!hnDE zR#a0qK?x|NZWSv*^4*7|RpNyu-zSfy2|(8c*FwX4ZytY7AxU?8-c3HXmPcA5`{sxrYpC3!82IP zwn=E^z3-?g2e*hNY$@y?fR9YWg*MsAoj5B3f28YuzB`G`xXp@=!Et?eH((m^{Eu!WL zLP(HAFS)=Q#XN{8x;8PDw^H*-3W21D`=a;eZ9|=wh?4I0QtfMmeG)~o=u(c#CPb82 zx_v_G)O%nQ?Tnc1Q>ao+EIgV`juf01tN{saqYSV_@Kt0eO#MK@a3I@4Bq6&5Y78~6 zVx?oif2AMQrMsYv=N9S~*#@X{S3|`ja(LF>VyZ3G$rW}!<(5P`%2BIN2p*lc&oX8}bYk^oGUVU&xRc;t0)gL64d2 zD3B^lm0tGz0JPXBL__bO!9Lk#Rw(nJVyH2a%s7G&`u*2z}&qrHMgxNXJcHt0rn&R>i!Tyrxo zm6v}3`q9_K|FN;tpoAySS+6EZG`)U9Eg0@Ik{~JcZ@H=yUHGJO)uc4>tlfYr*89fa zE735FojwN6x(0B!7#rY%K=ByZu?>-fNRsa5N(ZT4*-}G5lEFpfuo*`f$IhGp7uqDU zVTR}iLyLN6q>y^?PMYE71=fuW_FnISrpq}i{*iQyFNd%6aHFkOc4Q2zi3kl>}uoNUz z-6H)jKxE)0aqr1Mqr3lE&|mx^gpVCULM91^NiYVuA*|!`WF1O$qL@PgWs4iI&_v6s-Jn!;AY z`qtAzQjMKBJn1?_8hzwAilSlQFFg#gQ*R3b<9;r!{DWOcsS9{wkP(oOIN2nj4$q26 zlS@x!5hSsjCRnq?>_0uTWerRhW(`5oL8{mJcRhcj#_L-&uHQ(3M(kj{FhQ7dNt1RR zK8V-ejrZ6__o90?{n1}vpnI=*Y3$_N5bx~)<-lWN?Y|Us)a{j6W|jHq&}oSOc8_Rh zL?BX!qR;;X4Rq|_r{5HWAa%;sdaj6XP|%S&f8^lPf{3)m-gr7gjUuQ-uGF*8`h+h& z2+Etry|JcOcXPKA)Rac z@mI%d+xtjzWuJ0#*=0-x^>PhujdWt9pofm5oiRA>$XGwiltm za3m=k^+Ap`3U_bZ8=n(Qz{5W3N9xL9$nV zF^NRu_j+eP!0Z1B+Ut)d)*#FSmou92-1VJaj*8HYDZ`!S<2xG{j~`D=P|G5T$?4C+ zyJcR7L2ofzU+p<0mWowj&<_}do@SZZ&q6ss!&quugaN$6d7IfU{2*v&f_d8&QP2V< zM*ND_ukFiNXOaKJ4`XA&Rrv3?_{mVUlAt*yG*QjSFwcb|1CLzeN=y2puTu?6f>ay< z++5~sf93)j_l3woAXO`GI|jv7dtuH=&(1#S2MkH}qJyFUkc-p>u9_eS#VLx- zo6tEoK$Tz-WD1}qCSnC)8bO_o2vRJT+%Y-unF2`>2?>NB zZ)a*>b_M)Wz=~A^b@st(d9y5nOaU}zBkgATq(}*>Rr0ig&)g_$ROx$sQFTf~p`^xg zAQijDiv;a`eLdxiE>pL%P;uBGN;7)*!*qZZSAsPiC>i<+HX=0(GTYgl^-vaAadrrq zJyBP*9jX9}AX5Mr7qN81&ZcR)*s}MTfl<47d?JQGRUeJWp{beY#bU-)=yc8tlA6>k zhc1z%8UK8;qkJ{17*CcYQ%10C5oD%f7~Fte(y+71Xd8@;Ocbr7PCpznw|FPDODDvM zW6894QmGuWNFz5IiBBBOjGmu8X*ffX%Z&Ac321IxhJ+-SZ@J#AA|)P^Y-|}+0kb-r zce+4JlwmZzPZZTP$i;Kj*+u78u(P||c4(e&PKR&wxbVDDh=vncuq_Mfz+LYs7@YIW zuY-fHoIs;pg2-qbF1U1|VLQg+FM$d0u!ixAOnZf@+pDoLC>6P$pVl5>21%b1XH8HA zSOl2@kgK=fe^m&T`T)N3WgmCoXuoL5JSY|$XPYyZjl2l>w82w+6+~IrD9DHX#GAk zdUru3z!DvZJX2K6jqHq4VjMZik+??y%7EGGDaBuytyQA@{_Ndc)vF>wEP_lCTG;QS z9ir}pQjpA_5`_+s5HzQvR8p7(=Zuy1tSPW^OO+abF1wq-=|f>J2a?7U(8{cKZx$9o zrU;2iNA^(m51adh1SyCJM2J)d?i3Ls6R2J-`RY@9pg2?|6I`}Y$$aUfI@iYutSOv4 zZbMK7SOl3$@Oqjs*Hx%l$~{Y@D5e-fg~0KS{$frTm0f5A!R1gv{v{$n%=ZC zU;dR5l2`R*?9*aU4pfDE@;Nm$$$?TN5qyoKn;F9{raW%t!Xn5NBe`Dq&TLyGm%)7o zgLvs3o1)&4vBIlih0cUC-k&@+T<{!Wd))q1K@~9LlpUSKZQrE*dU@5~brqU&Wgj4z z&B4%6XTt74uNFv(G5}S86$hyX$QFUoE>x#|^fq6n?Yt%zymjCdG&DMqC>$c;xQJmC zf&*Q+Zyy>YqgI?pK|wkHf}=&-9s>4xz+xlq=|d}(I?bMbTP#!znmTQKAlvpQgFJDZ z2*`t?nte3jcLY9i9#7wAj z1rQrm4UKM6ry!NE!?`Cmreny)BFL-*#YMbBFle(&AIBfMAEpn3=rOvkSi@Z4)Ja-D z)R(=R7TzfYC93!2Iz~n}s#w7s=ZRN`T@Iq<;faoDp*25#wP?v#DlCFj5wzU#;tS5} zN5|F2p$f~t836CfH5fa(3@Z-=|O!Y@XjhSE5?K-3>Wi$>AY|T)Bo4gvcXa z6(xv4rDga&C()(?7D1{E_Q{7K&b2;G(}UF}iLU9PC13kZNhu}#Cx1pSosd;AQVE|a zc<%7Y_#T=jo9p=KnK(#x_L9Uivv$eeAS0cEg{`gid!obIG7iP7hULH_$TWb-Zi;^G zQQ~S<780d(nBwh6os9ikDLkLjraEEI8GiaZkO3^VBDK|EOBj&1MQNU zH4hRdaP30}f>1?R1epdbolg}EYGQHB3QH5ZCXs{gA^c0Bk4hNNbs7R@e+c9h|&H5W@qppkS0AywNj(`UAx04V_b>o z-50)h@qiLjZqA-rNz#R+2ZB4D&@F>Kqt?~PX_4DSi+TE4Vzt{KOam+lGEE>UBFnZt zG*O92LGwOn?KV|Wu>&f?X3#bBs#l5>sdMRCsW~K2Vo)%=^N&e0+X89oky+L1>^tG0 ztC8Iu4@bTDD8B4AC|!i~kR4L6>D&<< zDM7)pAKbz~k8i}QZb{!C9X^&n zGrJ%N5o6?(LUzfZ8dt7|X@(_1rV*q%=yq2yy;32K_(T+{QbL)&)bYh4IhxL+QRVK% zUwitN$e4Wt{Z9nqv?Z4u5L0p|&phldHtxZHBqYarlwVuZ_tU!Rx|%z!Bt;IC4Bc1% z@xli*J?h2BxH-K|IHZiLR`hK1&TV)QEu>pg$4?I=j&ViXFda5WHY|cnGnS4nD>0phs0x7^r=?FGR=k%u_E~dJs8AV{xCx_>T1bv^Jp<$vp)l zNe&Sar&z_QefWq>_GerJy;7$KQd!45==9j{9z4=(XH2?@_9Rs+E<0G)nxDL0nfd%> z!Xn5tgZUo@yWP>3t7rms_++89zSP1ol(te==Lw;d>7!#gCtGm{6eB%ItwPDP9#q5KuWpALf<=%T0C}{WZcZMpTsjO#lO&M7W3+xgm$@9sc~K6g;vSs)VR+}4 z(CCkEF|s*wkptC2^i)OQBYB2~J@bm^L}NTna-2mHt-Jg? zeY@UL#u(#vKayiv=xBU58dIyUedv{vBmGka%ZpVbz|O+4lWs?KX^YWuMb$H;#nNL} z!a!4Ck4wqn3O11vP7(4@cd!{d!49;T$K9;t6o`!;&siyvqy~|L+_WSSG)>=t-up~&0z%%57 zn8RV*QD|yxmMuYc$hv59yE7VIObs2k|tw%aLbjzxqV2H?Z{5XR4;j| z^u#Jc0kkW+YEgAE3roeSA;_)>*JBd8Hzi-%Zb}mg7`2Z%ot&xh?77)AVsA5QPvi)V z1>5ZjV))XJrHpYRM08YzctjJbR6^3tUmWowln51TL=wE#M z)5~+UKXb2-DJ*^{T=XAY5FFna^*1{r4je)I-fjjE(=)*cKg28pWo|hmV zRFXoYjy-xfp&r?qY_o0@pH5f=sWC|PbzrmcWxSq?2~=@CmcKxn&xa;)Z=b6%xs016 ztpp1dgB1snK{MwyI2ANjCKi-&fy*LD zg#qa^2)o z$1$-GPb$dAn9M7@JlfoaMUWc8m~9LlR}*XhamJSMXMR8LIpnd5F;QU6GqI0(!9qn~ zrJB?bB6~ZSuEx%$t^dbChufHgZ`WiA>c_&ItqUX$pg|wDzsMAI#N)Kp-N3n?J`-@z ztwvf>Z7q}zOM=u0gd~V@PuAj?v{=nnt}i9$U*Q# z!Q}-DWy2!KG((j2!ENZNeat4sI`TC2Ic@AQig843`xyRDg%x}`uPd<*B9evjU=d`B zks^T6=5o1MG#X_v_!0wMYLghdtH9;F4%XPF>pB&A_U36vlIJT!(hJM^@NXI2$LRhR z3d6ENDvVUed*Ov!VNrY#&Ry}h?U$$u=V>72C&OFX2{N823wX&@L01C%I zIM?i}6;&H{IQ2K7FoK#U-O}^gyPk-~Y@p~eS2P*jz%p$9@)yK|UirQ&q365T@pEJK z@bIZI_~a)a1`89g2vPy0kH)d#Q%oKWF!jv`y(-tehV4N^J45o=WDMwW_-HD%q!4r+ z_{fNKeLMz-TUzutW%H?~LELuXeS)gW4>OQMMo$%rY5Nzi_~M}L;Hx_Lw&bq2HHTn* z17#pZ3{sQsz4u<`lmY(q+I?*f2TB75YoP+rldB@oGUV|%^#9BAYu?p)$=+sHz4V5| z1%wll`WFKiU6{SvtENNHh#Z8NW`lq4T`{2OY$$y{lA`|yFRs2a5|!SC#M>D| zDMa_uv${CfAV|-add~Fcwlhal*6rrxU}{N_GJt9p>+0$n{|*;7jIbLoeeLh@TfH22 zhOk2piHab=hMZ2m9@Qr=DJm*T4J9r(63}Ja7g7Xhn?J~Ixa{DY4o5;oBgqnr$TxoH zg)4uS>lqpyDtvb3i$0f=Kjv^I_R)FUo?0VJc#<-oy{y;ka_V=Xx^*+ET}((5Ce*OO zSd86|PTwZ9G(1cKB83M()}HU|yZWzF_t>&!?%E<2LCOb1^&{{1xU_MIbzE}b-;o@t z3Wj|eu=~lLNN;y8w)^nK2Og6dh$WMeLH+-{Z_S1It}UZ#*Lm^YW@o*$k4<>P0{`^f zn*WvF&f|{3r!L#SUY7V@LDELT_C46{k8)i*NeuBQFh^k#q;e3!xO9n<4jSn{b9wJt zW|wlROsUb{?bbi4X)JU$qW$dQ*RCx%t5BSGX|LDeamd-*-M~GZjcvm&P9fEEI%AklI8! mzl+uJEm*K%!GeWp$NvXfXA3;071xyj0000Tur^L`m*QH2JEatNclRL0-Jw8mcQ1wFUfkWC;?P2IcY-@#-tXRDcdeY2 zb@s`b*|RgV$DSRfsw{(nN`eXl1A`$aE2$0x1Dp8Y1wew1fP45RpHmF&LP-1hf|rA`DDekDR2KrZ?vV7i_R>~vk)9+_ThUEIfH zY~0f%30;%P(Z8ecRfMMYJ5sa;#H98r6EQ4y*%VWXHCi4$ZWSFeYeHR`9y%8XRxQ4j z)y5^yZzn(A+YaD3&cs|=;ZpH!DfLyE{;^Om$OKX`BvWAqdYX;ULCO9Jh5nMN?-JZ;988Rp z?yQ>>o*fFomxn#I^4m`$NlLwUHZ{+6&X4&DN|S* zvF|{VA;6B^2XkuZ8`y-2gh7)R#)$@8N97=Ep^}-ev4#R2mz5!}C1sBnKj=#W47fA0P__oX8k=&`JgIJaL%) zE-(}%Kp8J;xV=OBlhhJY3%CJ)Mul<~WT9faoK0F2djWdENtkL@b|OQ?_0|>|sLawp5Bj+iPmTj@)XV`WADIC-b?zVSOyLN7hEt3MP%r6JXQjKNjlL?TD^3s`ndB^B zO>YL{-ki3>#>No0wL}W8LX}VK1VA#t!3HHlk2*U0acZDQ*4zo*RHbdq_h;@O&LAs1 zAf5RKY8!s_;}9tOk$yOJL?{J#IdHg+v6?R`Z9M6@d+i+(>KJh}fJZ?RDxBdT`0`-7 zOxhV!SwW8DKi{kf&^{$as(wdF z{w80_HlErpK)3sK0F+B1luN8GR@?wD7B#n9cMwh_7cBG-ZK?7?3Nq* zKHWWlt7n~@~_ZBF99Co(`MloQ=YZ?@rqqU!tZHHS??|lAi6mn z1s?@dXljcJ1_tlshFK;H3l(OPDMk1&$GJM@ZmORiMvWGNJ^|u_3bBwA8I{!rVy>?{;*P^YK;Pvx z2pg@voK2;1a8~n#C1aU7&iBQK+oH2@tg(T<8c!eZ$K&Y%ZBjs zEY0LYJFvCX6q)(H#_A-D*oR3!3=>*hRYtgkJCJ4@uC%>@t11;SgmSH z*~XO;AG|7Uwnt=yKSe)xAd?_;zd3F*IpT^2Vdm3v*JbW+RDGfTAgCu@<&^2Zf1>Et}HS z!a#`78j_;i=tX3xcnEjhAEQH$*z}e7fLMGr>;74noKsk0nL*b-qhU(gAJzS_5jKNhG)^xjE&dU6)wPN9iJHnoG6CNby!BjR% z+d_zz`4;e|t%$g09-wxulJK>1Lzj(aG>WHLmQlw3w>^78>U@2v6>VuFaWG;L z{OIIkUbh~Gja6TH<<(3tdAuYapvFtB+|j9|y<({pnAScnO)4+gjUi>;!Catri9hNP z^3N{@RvF}hko7eRsr|dQ{UDn?EF*1)pf3~uL}=3cVCsP;qp+cIS_?6`irIz zw<1Sax4=kXo6pNj<)9T(!bCpg>(#g)9Q*`c`7%1C$u>jE<&~>$PNj`$2HT)VibD~L zP;(wyGBIm1^`vAa_hG1naru_Eq#g?>S)TNM-A!>*^SGgqBJVDIAB2XM$2Eu`fDvQo z>)}bvq@my0?+>;SG$iTGll1maug^gsXo&Djjf8*a$I36~%DcH;;)5>@dv(TM6~C(1 zc7$7kD=?$HUks8FDumyp_lV$}*>y}g^>js7QjugRO)*TND$K8=Cdjqs^6Qa2;2!BQ zgvP%XJM=5fV18c&1qpokSnrzmDn26Nw0$-0j{T2}aCs{~nk1O$k=wtkqxa5`5nl8u zLaZy3qTTQ;MGCT@Mnr?FD_ZEl7B#hGVzu9zk`XT{ zAyx@=FQk{vUT~F^Ymvs%l`Fi$`cQxuJqcWVDXfj1Z{NSg#{EXWtYD2UkQo7;bX^Jq zatIoxy~c!}w8s7@dC@96evN_03uVIb%i3V$SH3Z^B{R8TCU= zYfgu8zGyUMWvsEsMLEY4*3lGVdfE>McT`qLw2A%Z-7Mjs2fJ@@lz!55ftH!RIT^#g z%`W?)WFq(OUKrDK*9GzEzmP23y$d{(r;G!~V_`~Y&K4yrk!R@x6-93zzn^DAB4c&w zIj>A&oIEIk@@vBn7eyU3fG^5Dk2lW8yo2XIqX)+XN3GEaKKPl*-d)DubA%+N@Ejf` zl3n}t$)cC0*D{DtD4wYocC1wyf{?_5mf5r1^emHf6wH;W}ar)#s?gig{7b9FI z=*5gG10XIzYF8Hh&PwqCE{pH<6WFbPhM4AKCUOwt_*e?V(c}|mQ=CsO-`K@wWQa>l zHS_FXBLVB{iXud}R}{7nNQZ!FBl&?{xUX8}`uhR>|KGQ(Pdd~Dn=yc_xxL9;!AWxn z#;93G8-gC!7(jKlrt{xVf#Q+~j&`iXVF%v+xb8xN4~K>SqQH#uI#N`cCCmnrf{}_} z?y&h8&~JHP8FU55L$<|eAtlX`!m2Enej?Es(nQ9;Qfm)^bZ*&+u3G|SOp?`Y!?<|g zPWe%1#Q0XTSd7dIG;TG>C)_K8_p?>yG01{NuG@>#FS%EU5L*c{>%D=;*ffVhY*by& z1iu=D<2U}6k2Wo@bNin)iJ7+NR%0h7Bz$vhge+>`9U?YFqlBNcGs-LBF&2j>jU47e zb-&vnNK@bnP?599Kg)(cCdlD-)?@%avK0^xOUr8OBGt#o3*AZm4nvQ?Mm2xb5R#b= z(ApVtXI?rEfp{m5dv&xi=VycV8_X=&w8;5_)ReD+`Sh(MAE-XZ(<39NU zV2y<{!_y4=7tyofz{eLWTRGLqg@fouSz0>I9X5*y4Th}goW$^aMk}Pnr+TNIFT#Uu zi>fmccz8(P&yTjYu)WUDgax!kxyma!t^I>l5s@NM$a>{b0I!J*Wo94a4_HXa^BOw%E|7+{K2CxNHiVz{`kb+=O(Zr!H>{wCt3S7mY ztH9_E6u3X*tb$VMN23!amh>i&7pNJhjtcHuh z*H<~hHAI_~cj1de)U;GSRBnevVp|toGAQ?yzeoddBU&B{XNyoE|iB4IJ z`?YJ6D^RdL`#ZdTNKkD7N#?10!|R@;IC#W-L`5GwR0zH?#3`9L=&2k!CrS^hQ&k`znYj?8`K?%&0!=X zgA!@hgjmknCOSJ(%Fz5-b}{oA@;M?OaV&C}4?k{;M6xh(3P|I%^{9P_o!)g~#L*G> z?p?F&*HNm-_On}$j-&C(bZwQog=oPOf@#_wkEyW7^hqoZ5Fw*pAeG@iReh~2)O(Cg z9rwm~PAP!E$%mwn!IrZW`p3@7?`gKNk1R2=X`8B>f$X1CF`l&UYPpigjF+I0*c=9( zD``#fdXBp$!uD^`BYPZr_*CagjE`9#9?VrmfI)6w8l6|n(50wxS3+hbO|X$)sNH$e zWP`woHtz?4V+RAT0rbvEN60;zmvmLvpEhs7_9;J6qJuS4{prZkkldM! z;-Mz;kWrMnf2)mWY>t3{vEKYk!mB~?uJCBo6#Y0>){i>KbFbio z45v&@IDZYMOjzB9zmWS#b?-#wp>Xh&^DrzqEtNG^2hXK}u)Kr;mnJt}7qR1XZwyd zmp9~_O-5P@L|NPv$U@z~{8OdMI<1KiK09}sb|p9=Q+1UhPHXHEKbr=SH4ALT z@RMT5vvXXILfh$77b`9amUSMM+>MxGVm1NnNpV+HvIA^!WhbR~OImxq7|f6deqpj& zynLqbtQbXPZ0o0{34vtF5Tq^G6r?t}vK(ow)Q2R6rz-Ioi(&a)$cSSbJ`F>m1ds)m zTZrf@UVu)p_#Xolt^(p2`&0}f@cj}NINGN2IPnO7xo+SKguOW?EYu|i^GbAqqgAq` zOJ<<#tKOun<6_bbg>5Rv0!i5emQFuXY7)~ zhcneLAnO;@SlHvuXJ|0yD5>fpHYa#=iS}0X_OC;0YvUuqEmP-EkLQ|i-n?aY&G@P? z^GA(oL5!e1=H6$Mb<4GNSsX@=F(Z0ry37@l#ZZ?@-GL3W!MdcNRQ)kD?cTYQj?|~EY@~=m#DHIsB|5S7ZemmY` z?d8Bc1j4#F!DtPW+mj&?PwCtc)Y01EOPxMM z9EvCc%A()$PWxbUmRdY{82ZndLc5z{?&exZ&Y#Ga+#^arUW}2I>9!b^^?Ko^|E%#UTDJ=~%+HlYTwTLYC1L+ zK6*aratGoS>y4c{M`J?wc$MFrb2+{c5q}nTdjw6_Daro|DJRKB6+!@S9Cve`swr3Lqye5v3MOMC=Mj>EkIWT47aCNlpClS^PytRV z?J_QC*a^P}vQldL>MqeZ{ErcGjT;;c#2J0>LL&7aMB26cqyeHaeUVU+~C0hkpp+@H~Mdf%_{vX zx1{;kplw8NShsPi z@xVPF&d`ExgASGbX9(5SOy>*>aPFZm@HB!b;3?IEX@vddO6k&M{oZc#;w*#&gacxM z7E#U6k)IKIskcnE`7kDd6jBr6BEqiAeEQ6o@-n+{!-Jxh~ zfrt=0qi+<16;Ne~aqDV1@bHk6H9EkDn>s7saKK2CZw4pmfYbN~JNHu1ELadIrugqK zTnem0Qtm;Lz((QYM^Uw!;IDIZ5bx9HjiJb$%JgXvGA_Ejj@nAaZ$-QQ&R~Ua9eB{< zwy8PA@V*E;F0aL$wqG7G)!KCvr#3IZ@%4EgTdO{y8@7*4F{{$(TExK2&VCP0j`6{D2f#YzKL%AdN zw=UWHCR+*&LM#Rf8MdCQ?4GsAGILH`OdC0ToZPx~E%#l?{;v{eN}Wf!`aWvXCEFF5 z-WF5m`hYuV@jPd+0V_Bc{T(TKkM^`WaOffA8R`0&N z1%6(u7QBFhi=(LFApQ4`!txYX3L*FQR)3L5v0P!q^Jqo@f(y>G)J*5kFr>R?eM!7I z?Sq<)O=~~gxU-*cmHPXht)c%YL_9~8A;|O8&Zw2Jc?|Vky1QbniS6TIk`p;$Oy48- z{5mbC>Qf!x4uWl}t&f5XuMOPTLrWt|h>>Ku5xG8N<&8iDQF&((Aho>G_rn75TuH&X`ZKOMEt=zf`fKjViD@b zhNzj)9niD(6RV9^QP@222;YjAsh#2)H=h0&!+SA&>gpClUXU{%c&!iDk06BRcYY zn9UoF+W&1IAt0@$eOwtx5A+^K9V;jc{hHY#sv#Lvvvc-7t#q05++FW%ptaZbAe>rk zCw8QVbSvro%n84gaP&*dhBM3G!4K-n?){b=Fk$~I@bi4w+VpS`sE#JuNg!CZ>{I;T^=6~zHD^^}lcvSYhWD{|14UJXa2n*cFRzn}?b*E#YQj!k#(FJqC@y<;){mV(l!DMplMl-a&(?u&_ zfXUtTAdVwLj!dWCk9YIyi=)v@;Z4+^t{nGkj znxePoo(&)8JZmw?`GZqR-_D>*S(5FNs}muA=FEelU78?_5@CYjLf>tkQSILfFqb*^ zlIcIxm+h$@Z8bsJ8z2G0P6M%)5z@-I!gn@`&#FpS{BLU)eHz%A@xc?`1~6Y<8<T0fUBC$?lraiOS}a-fKGP%1GpBk=C&(e4Rjew5r=^#ruUfY2+Fy$3hF96V z2O*a>3c$yU>WA7cotJsgOW>l@ViPZ!kAW6X+Qwv$#M+H!HFdiKcz?76(3eq6`Q`>0 zjEv-=a&3e5`tzsu%T?upx7&r@eYKsqTM#j3syO^npzY_9zbmqWuKDbUk2D=%8#`$C z1ij;^%67=y)}G(_sd%*3jCd6nbxt8CJbVr1*EK_G=Rh= zOf+Be+qy%EYV$!fl30J;mB)d^MtzV}0=Jo!bjDlXYy3RMS$Z>51m`s>an0Lc`#(jT zqy=d@0dpfqH^`{CNwUG`oW<^1a3e?Rk~sB;ake*n35fGb^=s*BL~z{)H$|2228t5< zYo$H}3jFE642+Jqc3xZJH&8K;=%DXgcJD@EPhlq+LR8a@thMw#0P~4_OFmiye9%st z1S63PumVia?2oOxhWyH`kP%s;iZH{E6(Ye^+)hU^Fe7$YLjmiypXs6ZfUGKcT(5Xa z!!m7t?*0@#f|ZNm)NtX+E-9=A}fNL_m$9e=y|cKu0th02M$*>*XL3QVQrOn;h4p6#cog< zD-=yZ^*iEn2ALhDqT&E-liAn*EXz^fpEUHTwxSU%%em5Xn`;~E_9WZ|L%!{o+RqPR zA-0MysWC+;xLGV!%U7J#OF>}e@Yw4*B%j$zq^wWU&^v>dp(5|i-yk6wHXP44+nx=~ zC0gosp;8fKlA_d#M$U;7kBC9e&-F@b>P-vF9SjPf`1f&jnJI>W;p)iLnv=(vuq6)K zJ$IvcT%2g8+gC?MjdP``9mbkizSlphG!)#6&nzYmInHA^il-DQsb8=>A*xm{0@Dh& zMnU@)qGx}kocveoTCi8!thAq@U58<^w_o`=-kT!E-d|9VP>@kZ3!eF(oDpriTd~7b z;fDvwS`nL6g2R7yPXx`L9jMzqw_$ock{vwr+JaN=|pJTLey?v4tjcv*8Cf7RQ?$`$9iV*hY++c-s-SgOWZ{uPC zQ@Pn!A2x!5gmRLC1dubf|BQL=3nb*S>(wM=+1Lk%t$lauGI!&JT-U$P*P3ClS01b} z{j(#eGclK56)kKwV$Nt*hVV+fjK&TPn-l(8w@q40 zgTQn^Z{5s4rCwtxHSq5+MBU z=QBb{LvG+cBXjX0+YFV;wRpWOt={b}6SIFBywoS=6M^m8(Mjc`x8Vd3Wc-bqwEG?u>2Uz7VY)WiAV<}=N z_f}l9hw>HeSSdGufvzoX+qRe+zbt?!fvf4b5Q~kg9xD!0%>83inGhiDNL^!4-a4~g zT~lTDS&`hkr+XVSc8dOB3;o>Y0dWvp;U2!xpdz24MVxZ77 z_S-A-Fv;ekvot8(5}+VV{OD|Pnl1>*OEwVL+IlIF6^+M`;Hpj#6FZJp*B;vU!7q%x z7h}wDDZ`NQInEZo>8QPW8Db;|+UB~-->{pYwcMI8k&!w^agNQU^aqFJ>hKJHo!1`n zCN50m3sWyV4QYg?1sLH7)E?UhXxn1LUfO_}7+nhsk(WtG-Z6pCY(!K1h}4~aREke^ zIz?>1Lg4++O8rR&Hw#%2N15BFR|UAsEQnJd)8s^o^-Ou7O)qZ3#@qZm#u=c=b9z8F zNW%j3G=5P<<{jW!Qt`Y314Yz?3ne0nZwCd}isgaWxZv5NWJ-K(J7-3fodS~yL&jHC zew#C?SGzCsY*UxTRebbID)*cA$`u`Wk$n;<`Spa9F5XcOT$J2CUO;BVCND+PRnybPpXg2cNi0>d8}Sa~5u!yuv&)dfP;8kYyn%8{#MhIUC z>)N|x5Mq&7B95?|_%!ptR7t*d+X^pYamQ6J$6ICm-g$II4!RZzjI+KlDkl$vb6+XU~ieOz$k+jKU{I*UYB>cIWfo5ski&^ z-v{85D-rmx{<0x=V^DpP2M)b=mhh~}ny68rXQDSniq=^Vx$9`I5auG!%|TNc99xlO z2xsu$Ra9D(Sgwy~l{K>N=sSj#RNrkJt(tw<_U3e=Q>mR{g^s@U8_I}RA_q?Zj2%`A z@;b9@San5@Wd(hG8*8I0W)MCpwppJ?^h{?j*VENPJydS7;cXg697y%tsi)C*lh12-g~oCnjMl!=GKoS~o%4`KgTX zLXhz~eSwRTECPP#ad7GnTSk4Uz0iVdDP2)O1LpQ*D>9la`Di00H3YD~Zd`?+6KRqA z4w`z!KKQz!jpq;4&wA6H`|*#1Fk1B2CJtBkZ@?uE%`KbWx9qZlEHg|;wxreOnLdO`^HEwn8$;U`Wgb=`f_1`|IJO zod8jsaCDW&=Io%-9)&rw6f1d1un!>$C-T%aMdNEW6(OIhJ6B4lE-Kpn>e=J_ z&2t9GRG$z^5HJzd*DbaIZ=J#}kEnJN6rtoZ>{EUSpHO{8p|V|g@_A7Q{&yi3Zi4z= z$I-J8G?PvbGK;SDDEc>~7D=BcMT59ighj|2WPn{KOFMf@APb~YML}MBWSS zHh0m6&x5WTd&BF-q~NwMZXLPfzQH#ZVFLgM#{ORga6@CAlD}xIp;WZE-x7RShlYn8 z&HV=Bs;rz975+X9rcn$fdg_Q1f0Bv$ja21X`FmxDSU~4XG>9i(q=d8a*~l+BZo!Cy zu=v!IlY`BVerc@HB`hS72`_!ciIF5R+K0?((aGu*Q(Y84ISC6A){E~nsM>(?M`cog zAznzHu|mL45BE%Ea}Us8n>+sri*7JrQEvq1gj2uIoa;HY{2c$l-d1&<*Lbcu42rUX zd88--#bZ?EiRpK0dcU83;6z1C)3FH7h^9mMKGU|m18D?9!`5}tG`MZXvuxRcvaTm4 zq7)<{PPve>tmAIEu&(m-RR^Zw(_D(_*ec^&@54Bi>~GMPT5 zbe1FzujuwC#|dfbHLe-ULM#Q@s@ur}(V|@VByZxuF`3IN&gU-^_y#E6lT1^zD&#yb z&9|p;NADLiTHA`VG6Mee1o^EqoI&LbEL41e2>{0F7cDY~zrPJEXDHyn5zmK}*YM%G zIyGEAs9tqPndbIzS_LBs*2Dop-4l*_rfNO)iMJSfWg#|JT279^6q-$B;Y%LzPBL(Hb{$<5l8W$SVyA~sU7If10+LR zM^>5;ykk_|XQ;r#!o_@v29`bdXERe|bsPjDn6Y&!I;@}_okp`n3)b&{4&cE%4Qv!< zp(3dLn&#JgY_mtnfA8`rX7u1n*|w)nq7d#zd9VOT=qy1#`nPJ}j}|*Vk+%dghApmh zB^)fM$XCuKG9#z9LcSV|A*L5R{KnAMpI=-@WZSN4ycS#Eu9*W+A#(7OMs@J{m+=^+i5*8rK&MiSj*HGlQ~>O>eN=*|I^VNvIbL;-G{R9S?PLJ%K8{^h zTr)?8*IMrk<@iBm>%wJd{%SVgKg-0X?jJQ4?sYB@6cr|H=unA5|dh%!_Dz#ncjPR!u|izfTwrE8tFB#Uk0_BQRUESb|h3Cz#ipW-4U zYQugdx`IKit&UaWui5gmD=t2L$|9}AwK8ZMH28aea-{cgXIJM;#Mq)Bp6R`Dyquj) zk~;LmMIK<9hed6Yy6P5d9Zk`o7fu~cUx@>USNe!c%OouZokz)jyd(Z&D=V#GZnk@w zZ<=V=5PX7Rh$_2px*VCQ*RBxdBXv1(BQKD|1~U4gmhs7Zuc4Vjxtu9%pI}KnGh8k5 zN?*C%UTkK?Q1Z}!@OpnH4=4GZ+)N(|zQUcc4NlC`I)`LX{(+c&nSQUe3oQ(+4FFNf z(W=G-IbNXTJ2C^3i3*tBUfYZTVm3dU32<-|ythOhHlC>p4KWW5-?zd%e5eXbW`A!5XRxn+u>v}F<_TKz4J-@Y` z@H#6fUr{e(@b~9R!!>}t>OgNPj?{(!rzloxqzFwDaX~}#~Qi?DzGv9AvuOpQMj<+pjOxOIXX#pSl zx&n?P7fm@$mA9-~Dldg`aZ>aH8YN6h)#15Iszc)z(&#BX03W4Z7**r_x!#BQ6s*(; zR=3MAt8Pk($#uH+`pmn$~$Nk1JKqmE<}%X+tLj=_HYk)$$A;9*OZfD=pYNEV--yY zFAxW5>i1y=mi2Lj9`A>+fXi8U=^ckTy=-UwdHzVz{>qrE7Yu7Siq4Z#!;K!9@X}T^ z(#w@ui#enNvYRt8>&+}pezzuenEK5BciPisj!6+U6)0xDU}2(3RJPF*pF7n%Y0O2A z&hkJoxoOJtCVLkjs$f8&e=vubu)cyhTEmq(rJd9Z-y?e zDu3m_9cJM&zpzH8GHsLO8d_y3n2~Q28D+&`&;8x@WIh!YrPac+>5Y`Qne~zgR~?w_ zwayD7%MW8NJgr+)3L)9NVzp(TQnD^wZc;40q|_p;-3`?76Vz#vb4Ne_Bs~0xB3C?3 zIJAR8U)-(X+*8>M&9uS&dV4&`Ma1nWq*Z7NuRbC$rNZGAktbsrszSC?B6Rb^#~$Gz z9!b$iL>xIro%Co)fPgI@q%3Q&=p25%U(IEZ#6qFek82y!Pnovy)44`-nR8Dv)VeXz zLS*&Oy=|IsQIf(Ga)_=giVFOpWh^i1?2bP7H=H~_a$l$=ZXTcT?R)rW2DbQb(Ky)# z*BWM}YsX-uWTL249Gw2|UAZ4FtI8z3tjZ0eC+YS#JZzS=CS(-wZdSeenq4;0(i&<>=0VheWnSfCD$~j12&XlV|Xs*SrxbKv*Of} zpsKf5j#62ogq4@B2B(;Ank(Yc3eXqcAt?*NZ6A&>m;9=_mr9ap+TQxg%RQwj@{~H}}*R zfU#-?j8vHE`MLUFo(lXysA7y8nw;2C zy4@3WJlILb7ECOAH-5LD{n0UASNrxavnd`tbVmNsOeg0aKpI%BLxr?_+=}Hl;D3HS zE)BU{V>dy6-}@AZ)b~j_#6b5}$@|yzBJjZwazR(MZ{faOF{twoeu7HdOD7_-~f(OTM*JsoPLt zM4mK$0v9@)DGAEUtM+%S0!*plf!m*|y0EtJ7e@8p49~dv_5pG^W9TLG@2K0QpSEm@ zwok7FLmL(d$Xi8T&OEdia6a#`w@=XmnF8M-cGRwOd%V*r?7>%alqF%ie;BwH^>6WT zucU$7wV|}2rk>KtWwyGnZp4}KMOnABtRoVXopeCaDbhjhp8N=3?KJPuZ?-w7J%+Ji zoB1YP_WH5_7QLeoOQKdmZ2rOJ7Ba!E5X%<1p#vxKmsh8F2{h``QmPLL35*mM%9@1u z)}Iobiqdj%=ilRHP)!=i9q_k{c%N^gC>}C;dhp}l+-H{Vg7#boUbZ%APsj^#a ztctQdYY7J04Kq+zP$E^GBMV4(r3&y~&6l<=Gdi4o%y4s8WS+gn0Za+9FH_2s?8W~X z%ucZK1#RhCWzCh$zNB_Lno~0@7CP8`C8;DfbB6ccY3SJft0Qr>01Z7U5kGvvs2>k2 z2jZqg>2X*kgm_<(Q{}ezsa4p{o)q%Ydk*V!jsK(w4Sd+;Z5|5A1MHFdv8g=Mcs!9r zJt7ko;0iEqVZlxcrN>i@Yh7A0|5N9D@tfS<*h3%vs{^xdq98*$Omm?mKhQ~#8DDZz zS!=!j*_RU3NsLl;H!$g9brQ~?xa04A_jw@nwQP9c7ZsIelvIdS8?AS~cR06A)l$U> z)^7z`bOWs;A2{_{uwt=JWrMKRluDbhde4oYhHK>%`fKAhHxDjRW_ zck`;uo*&VZ)s(xX^Ov^}d|&KjkgKfeY763p1~`W3fm3OMu*1jfdY@Ro`KA5H@AJuk zVGJc(UUCoyD9X&=;zZ_0gLSOagIR2}J7*uqqixo_%_p8|uq#wJV;i|_f+k#S#cqr)reu1< z`Rw!nB8&Krz1MO2HO^IDFO6%wGU)F1{%0!^W?&%e0uhS*F4`up_HlIF^?BY2q9iH+ z_`RO-B!t-at;&^FOAlSJ;wk&ady7DORGDVZ-deg{E#I=ez&FIrx%%2!L9Co5sbIY7 z*lI=X2IntwlX|s%M(kDK%Qf@Xm-ic_GGxtlzjq?`UzP0Qs`$ZQaTX%AJodI0w3cUX z;b@A`i5cCzL70&oSO@DhrA#qF*tKC4ltPtf`O&`~>{AR`ytZv1KkNIN2g_^Ia zO{w^y#D`Q9QJONTMq(;8TG*K*aDO%}KJLnv+GKZKq{d1ftuV2{BwRnQf_eHe+Y@%4 z*BKRUPEC3VIY~TgvS)gU4Gz`21q&-q@=^z1epr71IUg`s*6BRYAx-^B6pco^Ao8Kn zKNJ5insWXj?H$!Zbe@T<*iBN7+S^oDMu#wLEg79=I=gFuFipXaSJVZtX4s>$X*((* zwk+vhJN^&rq>v|&bi%@|`h=4H{rDMY5*DB@rQe~E^BjiQla8}m-69Sh2$v>b@R z3oY7dn-nM&u-BUwX}FtxZ%&@p#&6|skI#HF^Yp8nLZhzw z7~A(|Gc)BCa+YkaIHI@#-<162qR?2{r|HEc7F>oH-O&vwc`ZQhrPdy+_B#7|phh!) zR||&rR~vuBQSFC+idB-yia9yuvWOG83un1YIJdK-f3I}749cD$JDP3mQa&rl5 zy;}qj09*)4i2YTFSkG9SU;p)VkoYgG0&55>5yu&-T^5Pd_TPq*vXr|cNHVmZG!;7r z;NVhAD4F+xnFPH|TARJd{1Z7E0SijJoPqUoUtxLEIt>CI zm-7kgA zB5U(YuVMb$Rx~u^LjLh+e_Kjo6c%Ive>^<1P2(ZVADIr$1#aLg})D!N?Kdi!S* z+j7&_;tdYY50Ix+RZr3@vDnmo6-jwc|@5MP&+~bu)zm_hwNh$@GzF|2`eKg)FoY?ZAnnR!WVakmcN5@_r zQ&btg)}V*zJ;Nm{TlV>vw|3VMd@Z(un#s#)W!ek2J}D$<)Vo#cHIcNJ(vUL^7xk9P z;AU$H*FRD1ZPaVIFXK(ej(BfzQ{K*-Iqudz3u6~y`rZ_99#%}EUBP5E{K%1YwCsN- z3vku98T?UN7z{rl^hHgSq}|<~-g>CtqS4I8NtGA(KIe7(qS2xwka``#zugz0bSrqR zJsDQPH(jc7+biOKF8^@8Y%l?=LBbWelFIeBr`L>N(fb`^5=qn;+T@8gaOq2h@M~|j zMG_5RiLFY5gln>!G+xBdRu^n23#j>bh&*+m=*D=q4YASIos;+W%Lr<@=)5A$8utEK zu+HR29-%F%OdeeH`BV5$h%&SP?aBye;5)q4bMH<#WgyfIUz)I0R4xaVtNr=Y0jKSo z(a)t~vhFWuv-vy&65z$UmL~hX=|e{_v}$)hv+i<@<}8%^gXUF-)%|eFOv@1ETKZ1t zzk`0G5|pi{iTeZ+mBwCdr=N;CK?8rx^CLvO|H3C`mB-;AqF2?<&Ue6QX^7pH&Dj3Y z^G5BVGH=gcue)jKUJz(&CEI0Ah_YbuO#nZ#9?yDx_GOs@z900gA;|pv<flRK5@kf&B3?azVAz^M{-)zTQ6z?0=;HpU#{Vu_t7NoC=f1B^V2SCp4oo+g)Q#E zpKMNfyN2LP(~ay{ZS4(y;7`g7Y8#5-PYc!l@-n3&cy8*C13SD@6LO=^C}daiS%uI7 z6$C35a8sG#phI^md?8Lrk@hnNp98gx6L2AXdFb|T)l#ltcNPl;{m!&NkDnF#@TfK} zHU2n_jO2+!F;Z(m3huLU86a-Ny%NLDd~Cz&nWRl?E-u@Nc(2Eq*VfY1wG3c&r&D1t zF+qJ1dX%}PljS}vrMvtQx-<299x1~K6!&5DL^6(s)*o_a>`J66__}t8|MVH&jhM1M z#<@or@l9pXK$lL6%Bj9Ho`$iamRchl%J2RmMP+lON$eIds^sx^=t}(M_q<75e>{UY zbJMo-<8M)ui&XFT4be)fK$w0-IQplMy=F8KZos=hz=z2n)vBPdo@fd(d-l#$HS;-GqXpU3;+D> znhnFNlR2^%Jm|?PD7a=cC@CM@!@#?Dq6RmyOoYw`cSkI}5g(hc91sbpf`~iiH56d? zr`N^ra1fVs!oS?JJzln#lr{oG5UGiIl=w9qvo8W(x98N5-%!~)y-AkrGsAA3euQhC zSUI4D;o**G5B#Mxp2sy4zql6adF4USPM5Q>>66%I-C_oVoIppbk#_Pe9V~^Zbm8Taq~9{ z3muIf<8~V{)lb-8)0rhoa+d9c;z}};Yrz)4y%38$O~UBW(FNM+fF0q)?XDc{q_mg< z-`<{^Zzr8_pcj^5#h!!pAYMC5?oJ%0`X!H6F}2O0&Q-JtH*U3I(r{ItaAm?cj!^c7 zHyL=F|Hso?hQ-}G-@`ZVzDRL*m*URC;_mKNT#CCaR-EGQ?i6>2qJ4~IY%Dm5X3i@sDZ&hafY5Ew+{Sr1)1wT8s{R|!Md8KiK`M*a zPP^X+=JL>3!6W-l{w-#os;<(EU%GNt^z08JmnH7#;xfkmLYKBd7HaVK-Qy`^Rb#0E zs8}&a*a!wl^bkFLBy-?SqrO;{)x_ZZeD!(9d~_K_h4c!;hA7Q&3#P1D5|A`p%9gaB zoj{$`h=qg6wIIZsk6<>P=6fS!UtPYd=p+pP-T3QN;`g~RfEEKic0qZVQXCiptO1S2 z0lCjJqHt|zUN;7EF>qlO|3M@YgvXi!8r^WE@hZ!tSYd!t&t3ZQBm&(=3(a)U_T8aC zH6z@DXy&;cRS+HmLk;t8g_K|3@`7*u*FHAWVYzZ`jU=AABDa-{JjL3ulEYz>H=@$2 z75u13n*s^`Xt@JYvdYfm-0;Gr1%I}IE3(% zF3{ajqbxDafW$yCt0K2t3OlKh;z)l`b$xa?DPpuKAdSPM0|hSux}0!wwF;Gu@z5~V zvYPD0+s-yH&vSF@X#;HwQ_fsfpem=nFfo{?*%Mqex{dE3A;*!3eG`y!0Lrr#ld!{E z1G$Zp1m(EeCxJ6nk`uHicUiE{XmAh1{~;iTiPl!D~B zz`dGlpmOhzI^KM^ek2F8a(u~KwgyUU1lt+|3BD!8ttZpie)M@)!-#@`BpMN#ImNYgZ65HBtfCrnkI3$iNiSfv3OA=%}h{1l*yk?oQ35@7r;{aw= zG$jA-{{p%m-CeIqwce}P-^$91%W0ePQx|mN_NJ6S_q{gks}OO9*bxuFG$LUG;x$xE z-0k@*TXwYh_J2YB3&T#iYli1kvDKQYk|Nm9lSi*~4H_-5&y5MYNMofL zKU=#0*OLv-r_vMRr6C?BqEzd@y*rOt-WoB84jlg4%J6Q^E6$=qIEi5RHpy;g#P=|$ zsDd!?w><)NVJ&{f6|)aVmlC&K;VwTtEXY>$UnE-<6feqSXr@;1vSr-AYwxFthZLE} zIZxt%VvKzdssZ4ktI99QzaK)Y`6G+*w=X$ zsls%A622%$+#R2c-i^Ua{sAj`ab2B$2f}!!?K7L-sSiroD!?$p9x8CF%+y4zDpA$c z1-KONFv!GLNP`eLSA~0M=;`BR5wLUn$$~y#2`x(Dmp0OS07twtCaNOD%nCz(Cnt?x zK8iX0PC)X0uN@7x6^1}8S49|IwvT<@Cl6*diYMU^NTG01yIw5{0BY*URKBqT9c7oU z;uT^8aLQ=-e{x>IU&0uCNx<6Z6GZSZ!Kqx%d}b(?o+mYlP5opD3@VmDUICx z3t#f%icIWvk)x|NlwDbDW{pmq!#FfE*Lc$X%wgB~8|i(2)Zi&Oe|ND%hlDnH>?W9l zeYl&M`X6fuEqA-~Q}{*>S_Xbn=xVC&xK5lK^~9{4!%6okYh>_g;0$*B-{ajS{sI~@ zhzZOLliEX+C87X|Ql}aRXH?v?KQ6Y_(4?)FP&F$uQ^?ACJ7GTmrn3DHLZOlVdakI< z+}YRpi7?ilG9*}r(?}GGqLSs&gXn{XS8P+WP3QZx1~xV|<-Ea@jbU%#yKQ7sr$M7~YFO+_I)XTLmM8iiEg^R|Vy*LIjN zAqTp141J<8u2ux0o!!fZBbE~!mv6pN!|c~mEW2!Isc z66%G5#v9&o3Cz^BgACP-UMColBWbl)XJOJ*oH%GzXARpU#0h!@0DK<%;_)O2T#t!< z6awOQn3VTn!;t&m#Kl%W_ez=?%b&5XfTG5oqJ^K`EC<~?7;F78QTG*}9uvH>+X%xF z!^V3338$VGP#$$d;<1W;=`?X=3^XqZ@*E)<|MwBUr_^@=Ie=)`{B|aMx$8KQ74z|w zi*spxcyyp83MDKXxj%}c9s9!XjNUi%5tK{l52E(wYo!HCs<2P$%=WG?3Ljs-*R{-h zOP#dj4gR@2GwQ;S6Q}jimhaX_hVr#Rm&Jr$IE!0^P#dMrGT+B#31e&_{B~B)DR14W zAhqner(|MHco!w<-b0qZXw$YpeSP0&|GV*_>9QIAOLy3L(x%O-ahXS+n!LmyRCP2G z-|w3Qy?@#L-QoJ@$Jy=#ulMc3Rds3!BdsbQK^`+8)qlYiXv~y6kOUtXb#qCmiH4nF zv{~3ntVB<2%tJ&(15spQ{NCxMB~PiagLto9V>sm`Ji+R1x2lCNp6b;h=?{s(<4OY| z7^tf|HY00!T64^dztldw4N37lu?mMFKVK$5dWssn`y>W8`ohfQJe)k94l1}KFtgNH z1-NKD2-9c`!gCegj+ZO)TU{Ryq9np2*ojcB8d>H;?0i-{iSSl-l5R^C(a&u zM_9qx;OON`#WF>~(^@I#@1e_ra7Yc zpncv=^xWGe@fw10K5DA6iDya_5KdQ=)8aNvqUO<){%*{*PU z1Kqc8hCC56Ty2ucqPuHRzOZjwf;GrY&TloXOm*2N%lP9G5<4*gSln-_<#3Zk*LP(_ z=;tsGq@nNMt&bZkhXy5-#m@ThRrm&N(&>nWn{m3a{FovYGJMFQ#{e-PNSe&a*j$db z!)X5t>()%WW5Q*_O=w=QkE-K=4})D67);y#KzpYnV%DP9aF3X2D)PhCG|8l;IQLnZ zJzf~C;;$}fI&Z}0SC9BY0RxMD4+>Dt*7_Y++Iy&dk7R2mj);}&78xlGxO z+sJ(1I+#w2)nt0RbM=jBE;h-NId_IC+hX!h!-&j|qR>?IIloNzdzdLLA*t{J$u+YB zFikE;i{9OelKCIk@a4SRpvUU2KCM(O){aN%s$Hk~k1CaS9YwK;ugRM0`w%{?o%)sJ z@{2op)ilHZ%uImKjVDkaeT-LV)s0$_%`v~M%DC_p;qDvZEup&%OEdoL%4qfK=U~_#thVLiO@Y zHA=_WL;xo23}?IuPd?&c?kENB8!Qv2Vma9Al}7xO?C>Jw0&zFe?ih_P8_^;3IOfZ1Pbk=uR>^ zF&aqD@fG`Q-X#|tHrN(i7_^T=}gvhV&4~w10 z?|{}5t^!bFAY|~^yVMXGyG+Q$pJJ@arVp3N8~(G)ruTia05vT);rJLyXAW#=99D?Q zNack1mzy-NtS81o_O}GrlJXfbJOm=INa*hgIGfYIKKhINdO-$_hrOC2Z>&1OD6Dcq zuFe4>>A*-*4jlC)q{AotV$NmV7dwO7ormg~*(F1#IyCid*M4q}w*u})&@UJ_AzFrl zlpjqqST!^@uVrKAEJ~X>m?gaNq_DA5jhpN*4E}FCEWM|Ctafz!#KtK-&b#c)8TI%> zTmqyE1-m(xt^o=Zki2t0T>y8x<6)6D0qqyK2bnKHFhkz>tR1PaW*2)L;KFeS!_ji8 zr&$qprB`BV!oJdru5gs7$k^$i_j!vy=g~ka+R|3F^n>}LTNN~J{#n5v^EZNOQ992a zTi#|Hy0$FhD4=n=-ga_I>iX+H$AznmFic|kpp?PN`9=oHrJ#$7j|si#G|}w2#%@63 zB9v*SE3dXyLr^n-$WvG#VEd;GZ&HG@lp3MORu|B}?&#>%U_vg$_eY!Jv;X|{J3Tf`=7P(f$l55!Y3uJh2Ef=3R$Rx$baA?6Zy*Y#n)sLbRYnhG zO9o&X_t-;36-+2&)(JCt4I)w$ZXzh-G_gM2;);1PUZjvO|EHwL6Xtah#hPev0-|7@%?#Ah)vlN(O=fsH-ZRsmZ%2roqou6~J zw`r`^Ppw!&yh8LlA!Os2_t*I9$pazeKKaP%M+I9J!PzxjUG^daQh$Q25;FboF&U?J zGxMk4>$(`Zd2!n3QtIp0-evDz<(D)RtSw&}f58A*dW{vUk};@EiNNjKj*6C$sfV&? zt$S&bdC)tqaZ{CT14rTdQ$$|*Uvh}8{l0y+r)`qD=}lqlmF zc;GkW32UzSxmnFvv=LsB#s|BryW1p%{;@^P_{igLOf$7ESj6b%Px~90Kk8+A_|ft5 zmy*WnLms@WgM-CT^1KeV83Sdjs-^!zobMHbc~mM8+}n!4mRBs!6RGCEn>+(=0|Q5`Eg(z;61`e&j_ZgDR1ctu0& zO`a;fL)suLCY3v9h(vHi4c`|tPg0U^p#T?L z|Jg(;XXfWyiuhkNcwb$tkku6)57BBZWv6sQD@K>qeQ=_QRV+Y4$VC~8<3(Nu0sJZc z$g#22{P;5ORF|G_`-Az8UFg_zx_78&HQAuL@P||;Dcv!QIRzJPWvE~t zVE|`!i3^lhpM|< z0?B|6sldRC$oyJAVQDmEW?g^NxnF8REu}Hl{bxRRhxN!h&=vs-C#uD(bS!M#194;NSz}6zm3Oq_v2yc(s>_9x}%B zd!x6iCAVZSASrelT8dE$lJ(PGJ49tt8%Tt>*;hL7!h)4ZPq~{0_QQ|^BTnm--Ak#> z?YJqHb55|wW)@+tU?5tLir+^|9Q}u8*m!PJetDc05yMPwDE+M-6K7UhD$f@x^t(m9 z!MAQ~Yy@@AJlp!|IOu9QIwp^MlX0p5svEnNX14k8p=i9T9BP5e&wyb#y~$6vTzkL&f+Q0zilTq{Vp%0Y^>0=Yft_!99|u zp)OZ9lNgJ*>!Eyt*HoVO^uulq{ay*3+|OOGlJx^AQK+j5VXonp~?0!xG3c2#HRj8;$TV zOC3NZNhzFdz4SmNY?&ShwAMf9Eh*sTJnww74sgOz=#a}**{B*oa%X$*TI%KxCU~(c zRc;cOYK0651;~*~nITb)6rsG1F`!Ta2llZ(c1d6pg=*P)9G*lE+l$HvD;yt#ip#gf z1HcDN>;CBn)_jCh;et&or%MgIIN|PtdlLUTado8i(}!dcSsH3wrZ@A`RS8dI@!zxi z;aN}au?5utANa23Lb%TOnWXftK+_viq|vDc2K&I6!@S=zKlA?EZSbw(C!r?2dKI6T z5m&U)tDmP$1Dn8x1mVJ00&WCw-tvK@u(hO$LKQ};WfMKA zAOn|mr6v`9$L=$K5$k#2UW`VVD)DS>q9yWymw@kc0A9*mU$N*KS|J>l58Oz}p`K7K z7%sOgCI@wtG~~+{VnPP4h`2p|`HW@Av)@-?-D6#nZc|?;E!3FKCS;L1m4vCwbwXC9 zDCCMD8Px+ODyBwVS=V|UF%HgT{e*$rX?**j>n1fJt_l?ucB1G@^(VPSB_(So(Z5Ha zHRCdZK5WwK(+I_0=x@#`Cb5IBcUzmm1Uk0oO?W3>)aT$H6BX%!?HbbmIF0epa(jX` zF|z`&ika63nFQxB3G0hHenIDobUbrIA=Br_?Leq2RrsJy(`nVKyf8iVZU;Eh$aX%Z zbIwoWWp|S4`UC5bV$K>B1g|k&A_}B^&VzTn zaKCs#0*St3M%cPB)`ZWYK9|DY$R@}aPf9S384U{sAJDp5#K2WwkQ|8}GRPuwu{0K0<%Q?yJP1XU}cfcWIF9%l}? zC&b~f|KHbhIhaBWML?dRBLe3l&o8nxnoLhMS*Mc54QUDuC38&}$X>()H(>rrQVFCExv z6kE6x-6+fRO~7RkdMI3&Em4;j0g4)Nxa07!QuAk|P?XsYid^?S0>*&ed2B16ZaAsA zq1i-z)^Meef4@!&sz_k{CPujL%S^t`q*tCYVh6`%xcCR8?N5mrzKH1#LADfDXX(a4 zml9AEGlNy7M5v!J)h7nG@Qj$^Jn9$MGwXV3rrcF!;0iP`6@f$%=>Kb13yhnNthz?D zxDu?eQaQI133`RU6;-U zx`RHXYi|c^gCT{|F>MB2*aDxIfM`eZGJe-;6m!rkuHXLj7Y>xe8{gu~dA z2%Df&HI&3gMO1T}|2UwfK0E@HwVx@|F$OV)W&RONA#()SG*jH#XcL z$F0dCN?8ty1{k%3Y}Z zXeKC{jht zv74+c1Tzf%_;ksKX^ve1&gheG7Q569D&NPpo*9R~Ky-w+fZ_h-eIGgcg1Kw)dw4?B zdr=c347|?8h*~+qD$W>yhuu^s&Lumno^IRN2J+#oj1=l-O#MJ#{qw#!7p5?B|7i4* zTJ|W3(1(S%5HWO(Pk|Ds?uH7tRlQ`Zr#lojX|Nc>QW zA(i!dh25PnDuCKNZ?!yFqC6tfr!9Oj_yS22$Y0S-f6e*McBN3*P=JWbljLsg&S?qT zrP3g51xf*fsyR71N)KI9S z6W82WNzYuQDH{KN44EE9-2Q*lb%<1Om;FwXI$C_?9BOHTPBR5gFp#W>R*MWT{Pg?< zLYz2V6FIQ}_e3ldrhz^UO(GO&RyE`Xj1w?>&8J%k^Ub=N&QYj}$NJUX_ESk|m|;n4 z5n~rBNfR{`WV@uP5LVSK<6uQs8@D9z@wU&LK6*;HtCAvZ^8~(1$~3*^P&O~cvu3~h z^VHQ3iC^+ccWo8T)E$Y(6VRk($G33wvJUXb|}mV*2t-d0S?Ut zPliltgd-#>$^)jEUU*^Xp=vsKr9Z~${55Pe7qhrH-&jj*e~Lx+L2Notg$@SkmH4#x z%a=#}7Bn?x53{w@`N6ycHbcGGY`&MD$OT50#jHceo`dpBj7@%w4Et*0D%B3 z#LU$o4Y1RqCHWTUaS1maL?mCdks!9PJ_#*mEy&tw>A1*h3sBn7O3y!0|M~(jla4cm zd#3bqNCZ>k96x%jFXtjj{$Dqa`6+^J8TO5wfg&a?FeA_Mg?{(T|WOr7$EB{+(;W--Ohkl}M?$>=QF+t9kPy z?HX>-t<*B^a2G9eQV$@_y2J9Tf_|Jud|v)EGyIK@&yckhAWL-GxZuXGyV^zUQP(xW zNeYk4_(EniK|)ar$K44t)BSgiTAHHClgvEx7~4=2s~^`4&P!|@2RT;ZNWpB+7x8~b z3spTW-b5caveX~<*wIr3q4FXY7JU6LCB4jbJ%HeifS0PbR7t%TCd2&hjnJIeU;9s!)82(Ic%@)Lt*v>UjO6K*U*;WVLPxS7u5h3L?yA4QIX1c5I&( zhyeZxA6TC-5QKufM>rF_(xu&mF{5dZ_8y-qgkEFo=RBp9_nF47cU=&xOGD6S1{?sv z`C*Ie_IBJ5_d|waM8etUkVoB({HtlD-PeZ)Jzt%g)gP$PhxdA_AWFv|W1JR12AB|*mkqWU1 zEzLYtl^M+VA#vUH-mBkIK6%)0SdYsYPMi?Yqb?h@GA4FsC*6!=S>#PxEjt65hkrER z34w;W@oL&up|Q89ZZ65iFQsy;$Jb4>Uy?WmPaIOgrG1y**-%<;#3NNPgJIc_#E5sG zcyNNL4;LP@=KqSg6PyLJlOUBeqE^gt7HRDYl&sRBls2eoqjCLgGO-Ar@%3+4RGgfME1`KYsl_Bbs;#qEWv#s)N)v?1R+H(`Q1gLeGnH)cNH90X{;fl;8qe=+vb-c zGXvE*q1C*%#i(d%76v@jl_F}Yd=lPEj$o?8I}{FUJRwvU5IWIMYgo`FWnb~p^Lf6W zIp|X>Y!_U;ZBVD%}7hYiuZU=H~UxYk<8> z@n!>?C~N;#&ovw~LEOt@uce=8lRuW5U@%Yx?eOYZRD@=^dmFZU5M1UfdkAZrbvb?D z*T_YxCe3H0FZv!08Z7-d4wUrwHPo&vWw>}Xr+kyd_9(@PA3~)mWD;u4HA1zJ&w?T8 zbC9NO(tMn)yacwdyKv(EJHor_mTL}lbd2^QZ@N|0TYr6UT~)c;)_S&ku%L9G)0`YM zDYBHK5Fp&v2)67lP2upKFrT&GR5^C})3}K`&poZO$hmF-q2!KB`SdU%^e7oQ05MW< z)RcOhcpPY4YiN`bmvf7j7W;WZzf&@1EOM!eR0>{d^>>2jLZzB4g|NPV8x92%i!O&& zIkkTrsVQfxDW6UVM-WmUJd=evMLpIdz~EC1h0h^I#UMK5rdK=GWPT2UjDwIH2&bt@ zdmo0L!%TU%aU{I6>Y%rZx;iH_KmwJKrxc;x!{A(ZQlTWq{$`nDPfFu@ZB3TLje4R- zK5=1x;r?Fj&3!qT)yw`#=}t#8P+ZQqV0dGepEoYzU*kd|k|C5B^EWLOQqd=G1q(Wu z7>Wf4>WT~`9@zdr<~pcv>z z;#O4R0V`A6z1Fnuwj;ciHirM;Twn1Rzm0cyq!k{EWc5+di~WgF(`r zzDlsj6E-L~P+0fg2ug5F<)~0RJ6GKxccUC1U!Nr-L{!M=ViFS`c|*81X)!W|oATwn zf$gIuZ*c||Ubmve{6ApLxXT?SBm=a|Wd66aG|S%!NIz%3FhI`<9cwvr|1I6AXuSg- z@mK>BSk*^O{hYKWv2EBPY6nq={$;peZp+C{|2iyG)*pD`PTBQL`O%ZC40B)g2|jX9 ziY(tJ_3EHE&_|6RGr{r!QknRLmhC)68eqf+m@xI*`{kPCi+j`89`E|<|1uB_qc3+;bUfhXz!f&9Dl-5 zVM^(syc}G^$6f_4XqMF*6K?PB&!qt&TDVv^E&Z2bywLToHdLJv-A{kDnH1p z+t+0balvEK`KRs|xy;hk`T67;&5JBW?R{wysc&97b237uJk6I$uMw#oD=M-=HvROx zL%U~DQdS!>0uJswb&(9jM5*Xj`3qg~Yb7>3d5DSD1yNxtVrd4Q#q7`ImsFpWJ-T#_ zAjLMNr}b8)2qt=&6E%NUZT|a7c&bYeTtt>ogHRsS0aZ3cAg`vJuRtz`gr8le^&Ff< zguoS5m#M4YDr}qX ztWKS#=55+BiIaQh!_aqQ?8;^zVYo>LnM9cyHxZD~w-3K>tP}718zf8NFoXH>RN$f> z7N~JAI`6hb@1EnB~bzkX$Cn_2kCPZ!1ZZo9?nOSdeXFx@EKOn5SwXK;=l4RG)=uyg$A{=Hj>WU>$AP&}CE-E=%5x>oEI5KVB-G}zAk(mfI3)!xr@rqrN{0`U z@%`$I-b(3sK%zg(F;qO=rDsxO&?7{DxK#so2PLTESmJJk>FvPM^w0_08YkI@`9s)u zvTKfC$^N9B>(W1ul@74y7DjHV^8<`Tb?>I1xSGU1lcI0Mr}zw1kQ-QSL}9}5`rv{~tVE+_ zcT6h-02>f17xU|r+Elf?4D9yWsxe`wl1b7DIbq8_To@j=S_C+&zo@w_uOSpvQ7_B% z47O7(NI$3vm;EGXIGs1{kKsDOPT0$*T{XbKTzXnSPc3fQUHGc^TbF_&Uh39rUVnJh zlc5h4w{wurAA2`-hecY7cBSu-JU;ZN16XFT5JO(*Kah~kH>vuyR)F^+BdG=h5LY|H zI!|s$9mS2M`e+bP^fwA_@|?=P>oD!i>H+`Z&bxXh?pa%Qka%SK>bzZFWic_UV?gwT zo0i0BZ}AuZKi!mN)GbA0}5{SLg<^TnXyQ!U2-v+hfuHAw`#s67dI~UDHK7$fJ>T2k@L7UrWs= z##x zh-+JhI#CD=Po58`RU}_<5fO4St%C;RjVEp)h21H7t~um#4!`xG1Te z2?(*D7Ol{Wo==*9H|aptdf$#JAtYivF4nZ5sVN9L4Hsjfm(zvP^*oSZPvWV?qo?RP zh!50R6`44HCnCd3To|7w?AukbzOIkG$eY&1)z$?lW>XA4$NA2S0H1l*p(BFlWTK*C z_J=};#<*jNntBiler8MgtKfAYlsnLA$thC*=e>ND)I#C5#$Q?`Lq+vICr>j5NSUTj^iHLx)TCwcv^MkPpU4pWpf2OG zJ^~tT?I+q$gfPNPU3FaMGj)D!)|F9i<#*cS5j)eJb8{^wlWGJ5&{PIh;O=!ULkX!y zE=3rpQhF8u^-W17%D=Q)2o6#jC*lMUvEzerd-OMd9A0u=!e)# zYEmK*?j={&S`llr4i}SzIY~*m0qvb?zSx=61TkF(Enbi^Wa5`&2n+bw%UQ(DV872!Je58x2~ z+CYy@sfSs~9zsDM-T(5nYkyK1HwW;HJ%yy{)x+z{NMo&BDna0J)^TwvYPwyH4O#UJ zAt&*&Tm@&N6t=%F%*Q@-9JpGfDmVcZU|C$_2OzSH@j~h^`2Apxbd1Pwv!OQA8|$wn z=jzu@3E6_O-n`Dxipb0czCw?dTS1~xwxwApRB$_9ACFIyqbVrD z0(INLR~yfm5r>EN*2@u}7f zh%kEj3>O?Re_`Olf;+6T2qp2SbH`)SGnLT<^6s3=C*!~eDR;XC{Jb^9SSG%UoIdt- zXlX>~1s#mvv6$58=0!?cuzvfO8)$kKR#M2f`mLno+kGeTB3@J)NSeC9-iJc=-9UINyQ2zlH8)+@ltW}m%U)=9*R2DVVIMX62`+wmrPYPZ z=MyoufizX6VzY(xRsr?JOY;7FWX9-!xhWKcOOt)-HpeHqhE8j@I}cb@5{yVpK=O?VdjH)u|z&W6Xjvw8_@fB)Q1?Ip&e zqqL5=OZnmSeB_6@ps72I985|3I>)d7Vw#Dd4Y3k%j9TWh>3VN-2vw|T!v2T#pr}2R z61|k&_`BIkQSU2cXQa%0UVeU3@XL#;)RZa3maA=aeq|JepejPm2#EHxV+>3;=ke*U zTvP+h`d={2lh+Mx$b(d(A;*!3w?aVBS537shKvDQ)@TNSrSK(|!FB?y`7k8aZ!rxiti*=>sD$s;@>6L_smmPH{>fw79Zs_-rde{H< zIfD)?I8jSh7f_HNz(O4S-PcPT!kHh!&(pj5&9Vsbs^;6GNW;a0RYkL-WYkfU~SWzFIedLeq>cT({SoQQB%H$mL?n@=D*n^ zm(~Mx0PvQ%7gsr&Fzd5YjF0m=9|3mQyaG@p5uq2i2oah^}=$v4xhxX6n!+10+4q4{^ z-jRn6>%8SMdjl*1)~$(O#ZA)jAegV|#C39B5PXG6LnmMwHMHt3m^0-ar(T<%2m>dgCWZL_eorqp4*%qF>Z@G^T-4b z7qh>lO9AEI@j#Q0y-{2X?|g@j*V)@Y;u$3GouT!ww{ohbVc%7XotMAsa9~KVu*gMg zyAsCOGW^p7z*5c&%e2FxwoJ{kh)`1d^M8ZQ5Cj@k9a$4bbD}`)YjQhl{2H_)Rt|5t zid^RY1?0Kl#sBq#lF>$tO*@!Jh%5?q9Hvc-MS>C|Hu!apg)&1A$&G%ss(D2jX2;rZx4|~Z<2@|@mDLlJ5)`mMlSNU`VT>d8 z*Qc=8j!bt_70gnafuT`ojV#eYN}E|ukq1nPsLG(M><&;VaBqL zjOY1EN!RNd5db$StH2XpSZ^j>^GWl-pIw1!Hpo-}tQKmmtQ-#>-9=fx?7IC~IQO{e z|L_RhdAeqargTEUS0P^qE}wFVFafs{KWSsmvG(*c0qWj<#3SYC?HQv&&_RR{f-S*W4=Cd-fpzLp8PJ-tBAGZwuL?q zFgrC4cw~8Gy_D^XtQ8chM0%oeMtViO_;EQl{53lkb*xF&cQiydm;r!~hg(YcSAVb> zE<7Z7F6@5YgAt&sft#=VtDue!2`W(Gb(y!vxw|sGZI^Aw#~GvI)a=v{Vbk@}gbjHt zHB#Eo=z3<0)pSs$RY~Zr<8l;-aB9S7ud5)~ly4=HhMAc$R{by0Kr?j->@M5KjZ(wV z_y2G&AH2@vlSqHnld=JDx(33&_FiNJ?WprY01bk?b74N64kJ?gO!6W(v(rtX=QLj! zf?&U``N1L>`MvKc&wTNwLg&1wF1;D-=pUzU-=&f|plMYw0B~wcbXG90pyTA{x6P*n z*crM1Hjz(Vm}wO_e#4mRMOQlmqzO{Y2n{&dL~hc`UvfCe^Sd!rS2fho4; ze!`5hvmI8ddHoz2`NU~vHCakn!IV?S)IBVLY>*_}+}4W9wbBPhcGssFN{IneKR7HX z%8-iY`gIZ{3aX~~kC`IUZT{Dm@nw>n_!k-=?H|PO;jr<6P1w?73n100DWJ4ui8*ed z&f$IBnM6&&BX|QnN`^5CnMO$aeLB95Pl2Inj#r5L=u}#(==Hj6%=<6=m zw9)Pt^m?DIR5h*|)mun+y`atbVR-ENtmH}oRcD0LSnXLdao81~p6Wzg{y6Ajjo)O< z_(|_<#-B!XLK2Zm84|owaL@-LVNS@5K0pgYq3|BIr3epdNA!5tM?0(6ia8wI=aps*L_V(vU$0IITZHLbG?l~@sJeHpfUMM%#(r0oB*Tn7?2H`zl*b}o zloSijXJCZumt|qXFU?*mcL`vashLvc4k$}&Kc?fax7EhYsvU3zz?S~argXujhKDR`q z9S*v6tqdFF8L*g62h_fyHk*tf$%jCgmy^bOL_zpVJm%bKliMVRA zY^=5~5`j`IhSWi-lXqv#YcXV`EX=9rfNTb3M{okj)DC~$n_RS!5%!~pmfa9ahFqbj zfdwJ6)**U2YwNZQ0VHtK>K8SInI}Ah{_fs;5RQmmh^t?`V2;z!9GTdSWUMm;+n{ZC z(w!1eDEy3m>Qh%&{5j`iKRRp`lEawf|Fd zRrr`IS1hVe`I263a%eQ8l}6*i1?DAzi-3ZxjO*EYCw(apv6*UpoRzsh8llCw+`sEYhEydK1~mY_78ooIvv*Gkzrn6<9R@`6bvz8HZ3(;cvh&NQ6NJc5eoQT;HU zO+kK6U6wncIF$4sNH}8iX+a|K5F`!)cKpqw*SxM!JO~9x)_A|BYqzeROg%jjlp8DIzueu+~ zz?E3t1xFxE!@)sDQYBW7=~|R8p&5Pan;-o}uUB4=>6G9K9oGPV4hN^wIuu>`)1xI2$q7NoB{=&k8Wm-HarGp#>7tl?Q zG^IG4h{+Kv73axML(%imsT3q6FzXj$MEA<7@s3DiG5(8f*`uPy}i4rh(Wr&v`FESs+dO zJh;H=ST7`_#$Wk+m2LQZ0TQRIfMk6i39_tMWm8+2*19=2t%a{ym?S{?n@jRkvX9FV zQpf%VMUSA``SsYask&>ZbDfzkBTJ?}N)^E3EuJ^Uv^ksC+npztXT_DtA=-e7!y$MmIga zNg6VUpULI)nVg9k_m`WmQVvd4FUuoDEWJ6hUgTemWsjRz%UHMFbu;m48t%C!!QiPFbu;m48t%C(+d3m X25eG4Pi~S900000NkvXXu0mjfO)M5v literal 0 HcmV?d00001 diff --git a/Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1@3x.png b/Example/RHViewStateKit/Images.xcassets/ic-no-internet.imageset/015-question 1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7b308d2f2cf69ae92b799cddcba11ecc8cda00a8 GIT binary patch literal 48080 zcma%ig;!k95AWiOyA-!Yw@@hV?ryud7x&`DU5YQXxVyWQ;>9XB6o)TXiWT?1+uwVC zz~h`foV`1fWacKBe3DF@mWCoO79|!41j1ETlG6c!km3J6V07Tg=Qkf#fq$6pN`_t_ z5QEUa50ZQ)j|K1$$xBC322}r@`WNs8)lOPn8U$)e#(uO!1A%&MmF1-M{E&{GFmtK) zz4x#SIUJ#Y$}HNGUCJ3FZ)OD_m2j!G_jB;dgrJp5ardT@Q*+|LO{O%uRr%tdJyAa;OKQ3e=(tQ29ZrUnnTXq zFFt*|M@tRu-9~Vmx`wG>T~fuk$cNF`R(9RI=d+y?C=x)N79|W#1~Y;EYKvO`++Hqa zsaPXfi{{S`p^Ec3#{7Ra`*F<=tiGDWz|biq0ysTMW8sYQdXYrhk=Fb8YR-Awx&Q3= z(}-<}@Ht{Q6@gKqs`QOgi(17hnC!ykxh10A?3LL?!waP%B7Pe?C(6jc5NhNwG~^L7 zeabkR9rN)Y_@0OUcAJiXH15c#WM_HcgzA8uj0S$o6d`aC@J`-A^)-^<0BHzI&K6Y;bewYIoiIg829H%gU zxmSX}lzt<@cX!f@3j9QXN_G$`!G_X}=1K;9#Rfw+DZw@6JIvFrt=<61X9ZS}iTml2 z;^=?O5_QA#A4GDP8#6NQ=RFsV8y==F%mWY2lL&x;pHcD1+~w$^7sWwcP!Q+<1}tB< zlUk@Y62TF8%s7QkUzbN=fB?b-A)%7NBR%V8CfY>Q-0MD}zoZ6sA$bZM%5h5fu!IMxPa+yd(3Q5SbdiEU zQgopLxc%GfP07dF(R;x%ztJ|dd^{+Rsen0>QgH-q`;HqDJ9Ws`MhL8qVm&Yj)QhVU z8T7r^`T4;h`#Zjf(&+OpDR`9-eTYy1{eh>fDBwK5j7c(>M_sX$teN6 zp#wu;906Wy33SPH(+UYB<%SYAZ^!20-Lc$j2YyS_37Ftij|HhEowf^OK(3U%RE#e$ zOMTPg3RCR4e7T4w5-jbR2++QyCV&SGx|dNSSO_@yh(zI!M8Iz5BO}+~cltVSfMt%0 zApCMHCja)72Vfe30gfa~M@0qR)+Gf2TpW;}j)pY@UG_Z(@w&!8VX?rq`HHffp=aqb zn*V0Kq;CwM=!8v6GkHb+V~7LH!d_ji_p4~lfB8lFt%s=h0g`d?b0roLPECmc@39!eT)*N3=gt~67C>q-QdjYt> zsuCR~%lPC`$z&$lmaB*7gU@5D$Ci}=!KJc7`ww}F^=NH8MqG6(>h;ArAPWAHz&wyC z2)Sl7R>yye+ru`UK9vD@REP~QBDhI9{?AOsAs#f*yZpPN(~38}M|cHM7Q1=#8<j~IUp&h`CfjLe)9wd!Eg*($sg4B2j_^beIa4oG2 z6XCtT50rWNm&ZJpHhYh9+9;rTQa?ap^RjZ*`FU}OAa88X6H$eoUf0oX+V7@#AamRf%H`YCmMO_v1ffF*1qa6I@M*ra|%KrZyu@|2QDxlKkH zR$&DOMY&4EKhw4YR)xooC0vZnxm!HtH%}k0!ifny#|!H}d?A-Dlf-<1iU!`F8Kiy0 z56}lB2(^eMJiyG*ZOQIuWF9vS4{9NZIHwnq;7u!*v(kH7rs1hNuUX{#cC9F{(pLdTg()Qy5rLSOq?v{Bqry}|jFFuY)!0098;w_9{UQsk z;$1mz->WV@swazu6Y+uwQIWAxqm_*;7<}K`M9Z9*ePqTD@;hG>Mi$3U;CM;9Q8YYD zfjLS{KI8ZhM=ZFJYru#tLme866gJNk3tB7kVMlF^f5mZvU~Vdq()4;$JwtEAC>!~TUgCn)mSfwjL z?RD8Osds#eXR=6mKQg@xV8B1tRDW5v;MW1F*^=xk5+LK&)cg`w{ut2 ztiV{}j#bYN&A~&WZrV5xI4BegFw1Zb!Cf1rtj8R=6?PCu*}z%y7wv{o4PzrVb16>HYfDf+BxT@`VJ<1KL4!|)K_>3=8uWS0E+dei^1X$qZEA14#Jql3 zV5!52qu{3#N(Py}6f}@KrVv~l^|W(n$Es?-`R4QZS{SMqq7jGrzj=1|hTi>qQy=SV_2u;7mqr54 zh*2S51fZmZkvSNT5iJI`vtP9^Ld-vvzbcZ;xEC$!v~RqInSM82yU@|mHW1@wA`?{r zg^qzRYDPC{I`6I4)z_?N=$G${LWlJsOI*Apo zIgwhCXCvQ4ibua0>Wyc~?TE+45wlPdKHT$x=HFubNMV-3F?t)}79($I#2Z1e6oeG! z7|T&>G>~RI?9&N5ll#fk`Bc*!-Z8N+Yd>!^Pfk>BGXu@4_6hHg^vhljoqR)O#7N*w zRiZXvrRh-GW@ne1u>$b8qgK4)_PnioO-ag!uf2~(^%(5ZK}KP zUn(+$jg)vc_>E=(hO82ivt=fqoX*7btC$Ejvt{=c-%`JKBW_+X$-)B_M2Lc1lU&)# zn__+VJ0wA5^5TAG{+u?1p!rBenOF0}1OlsvzSHi=nt1wPNrRX!d-Z*u^|1SI6G#w& zfq--uY~Qt)UtK2AzPxLEuJv1XMomrfj}1~`iMr2JbNF0Wrm1Qgb>nZQ1&~8ofWvys z<8(=4{TEGH%Fs3Dq~ceQDanRGYkz6Y#vh5EOq0&Tjg1) zfFSr}>iK&6UGUp!gv+Do+>`sI#p7dL$D0iBFqR=G6BLHVI077YJvods7g!hQB^dZl z27^ToDB36H{6{5Dwk0Q$E!DEVvGNEaP3u9vuH5|dlHX!K%=H)(=$k=s98|Jc97H~B zNBPECGL=>opPnMW_qd&B_7(59cFR#mE!4EyF%FOUOeu4Y>R2ko{bR17jcMoAf=SPh z7olc=pOTB7cx9JbJ{2)zG560a8f-h7x457`abqr@ZTi5vIKS&TTwI8j5*Z9b`ayE@ zI%=+iDyU&-Qlycq(#)0Zwy}dyfm+H$`X8<?bb2dW3yh?4CNzKMWp#T|GCW@z6#TI<9!p1~&i{6c8VLji#I&DQJ^=?BqvN%22zCWZhA9o4 zkj{H3bcqHsN>#+l9;=wx-oCYo(kE31Khl7-P*BOh5d9kt*)2Q4urci)z44ru2%Kgd z*4>?KCPg24Q@Fl#y7vDRO-6aXw>af>(Q1t{a%ypY;D~?C0R0GpKzE{7L@4NY-DOmo z9FYgE4*=dO=u2h2(b|V-onPT-3d#9xlA|maDWN{=l~`a`B*~Y z$!sYcz)YCn6%-e0%zH`Db*QxuY#e1cjsbq7le0NTeelQMa!lc0TZusI?}r^90+jbK zuSB16r46!nO*+@ekMXd0n$PcTG3Da_V`5_0r(I=m;!>3{>573#;^FjnA@>77h%j=} zUPKupHypcc>5iXwS?1Jc3&9Tz%2><0UvCN$_Ri4n5GNTFKq(=ynsds55QuO8X)^La zfCJ_&@C(iQBKTf4VsB&p3s&S&eX63B*6UWQrd1TG7)zEPaq|sgJiJ#tAnmu4o-^Qq zPVy@gg*okbnZyCn7X-p{c0tpFn4Peb%66+U0#H8>0h~dxOTUCtnN0QwUiNP3WnIbFa5ap0HhJ2=fr;NMK3>1Y^7R3=k@qz8p^o{1CdbmI8^ zSo%Dq;z~`%e7opN@Es4k?!TL)AZL7UG#;6)HvxZlTr(7l6~rWr0?AGg)}AURE>WGx zh2onQQ8+y$N~U>3th^K7C}FM(*Ys=9T~6mBcN7m&=|}=>Y}QRP;fNTm*?uW>e@@Uc z#s)t__+*%@oTA~T*3FiFoZ{(=hXXDw@Qd?D(gu2F0(pgFV)q84eu#8&o)c{V*wP0i zf{M(^{3*nFLxKxKr&D3Lbnf&iNE(6DmVyl>5bx|_)0c!fFaC$!z;2jH4Cap(3K@nBB~Qn&Y#jgg`_L!~rw_32mSC|hlSavo7bx5|IySvH8?rCN4vpEw zFeTq=N7Y~CINEZpj<4m4+87FB_Rp6pO(}QSy@wk~Tg;bj8%diWZ3+{>O}C${>Hb56 zS#n~wOW6pqDg?#T$C2S`mn`Qq;CZx>IIXH5ju9q)Lh5IwZ|nw%N~aB@$~Q89*;V6m z(xJ0T%Y+cTsJ`P&Kt-bB!kDm0YcViH2Hm3b!jW{@TcWHG7CogI92*r$r_9OPv_q|> z?%^*Y3FQ_Ql~jJiY;f?%(%THcgH6cv1e+FUO8Bvy*ljhG7bSWWCjwxjXsObvvQK%* z4E0)gsD)Jh16Z+UgfIb>k6xSNs`-qXt>UKBityVtL4UzF1PVC1DzvGx9*4S)1{nEN zH0pUhR||alyam4w$$q^NTr3r{b6m#!Oy@0t;ej41O5cbaigMf>GfX;!Qt@--yxEyW zc~1_EmRS}2L>x<7%o|X}O#>y9&(7RsSe)%xZH_tjU-Z|kG81IrCOxij>qVH)vU~r` z=-#Ncq!?WgyJsT{22Fv$(1I-koI_5>@BjkSApi6ju1w`+y(I z#_}fG6ynn$0>(1A1^5-8e{{xU(3cpGqTkSNPiVWE&%~xXQX|-=@m*>6@(I$R=@&mA zM*m@Y?WJJc(@$=mg7+x$gzR-cAj_|BHI|8tRc1Mwyx|B2Ma+K=d6yU}CL?tJ#YqQ+ zRzUfi+DUse?OYK2z~yOb=L8dZIub^Zw%Z)ONue+E`|Q%CLtN`yAkx&Ll*QdJ!8FpL zi-#>krBU=5j(==-WNT)V(|;=PrcRl5=7|q)vXdLb8?h^AN>k1cx{O^howdY3mZ&eF zbd^aNf8c(R#M0Y7=OibYw5uB02D~=-*@qNC^#K?R!z}N*ya^d}4jcS7?u^|`d+)~x z&FwxQ6BwM)?C{J#YrQxmjvVDO4R0N{8hN_FCDWG?Pmo8J@^(}j!bk8y*NZKchxxHs^Gs3kwJ)L4CY z@rQw72HX{c;y__MJ%e;f<=!YJ$MjJo^zH2%1L6i}wkU}nLdXbP{47nq1zW-42SaEj-V-3#llee3Z8 zKoPObksx-IY)(bFXIqE9aYbYJE4@TdYz&+a=ufD@+x}90ndmOe9|KQw9`kVg$AFYa zQhLjxm$V*3={i-T6NCu!InZ+*S#AOo@&(T|_^1h55OlJav#Vm$IH-`h&p-qULZ*h| zYjJO{HEWKLmJGkQ`=;P@a+Nak*LShETqj8^77@}L7dzS|+|cvvD3i!3=w#AmB=*Ht zGFUj8fL+m#WjouM>^tuPHhrT=iwj8W7b2zgv`KBd^XoTI1EC#$lfrVFW{`SOFTK9#}E&nb50@ z2(OTQHeE$`oB6HaU=7E8PdF;PnM6Ve{xychcSG4UT9Fo)4ar!mn2hmgp8nu5%L4b}-}TDhtjYrkOn2C_>K33w=u=yMJ@R00XPMjarxB>eN)GUnos zpM5itp=biBV1J9{*Iujyj{K@h{blD;sAm0hx!ALH#t3-_NGse)CT_i#z=)Qi%h%5cUElY-eU$)(Q2W4E6hkSiZTkp&8B>1ls!4yWw#8IJJXul)zX$Bo1VLf7*wlWxk2EnqbG;^d-84^^{Z24?*(cP2 zLRY4t6~mSXp*QGQ7)Fe!G&46~Kiw^;vyB1BmH~bZBb-eekPMzF>hb_u%toB^%K!m@$&}(Di<--9o(_P zBiKG=#mafAtwrmXK(hVJk1w9V1Z<`p>9W*u^JyXI)ytcz*XVKY3M{yleZ)H_233TW z0;6k*B9}JmnkxfVQ65dets_{b1xGf~^dUvK44bqPksoxns~f0zBc4%^Cn2A<6F*I! z@mcozqIRUTymLPBY7>gIuNVHG;Xp)_ z`h~{TT2t3|%N}p>Y3b_3Y^=0eYKndwnJM2wxdWp2UsLJdR(VEgr1XdyD(*!uhmcZQ2SCq3i6q_XAFUW0d9$X zPxQ{XOYT?<#Za70>E3KPLFCht)Nvy#+q=>w{ogUtb3F>P4ta@$={vC;d2U29NqX{n z@l4-58IWLi+S{dmzB=4BvQO0)FLy~V=~O=B;KgDI8xrb2=+fY*n_V1~JU$J^JotmW zycOsL7kk$z?Pd)}uWEN*^#mkQ9O2x*07J9Rz?5?KJ(_LPza_BPS35HT8s|p7XDAFE zZj=YxgMB1$exDAQsn7?R>7XJ$uR(p2>u(&R1COgAeO??Hb z=B4}oK*jhkxz)1g%$!#XWvt3o$*YgKk(J0mgq^8sBUL7_n_*chM_m2hY?ef)+H@ywTvDP0J@~i3{oV}iPYGdcvxg5 zL}8V$ly_MHRm7$TS7#oLFf}@A{^S@&w-70W<3UPoN6$IudfOBm&lc1scQjL24y=S{|%w?2nQ=?GsB%x5S&N1OpO_aE-lurSlcnw(;=eaY z!c?Bsv1*dnau(dHlOl|y+C%|G0pmbUgI*{|x#OGOcz%Qfp~%3yA{xTgxb zrirk7+=jC26l>mcajoD#OCFs@ph%R+Rnu3M93=8s8FK_5A8X!*%OrxeEPmOPmt6Kp zF?nSK(6fD#%xTHG;!Z?b=Fi@ffH9%RWpKnKReNre{W_*Uw!K{Dka4-t=Q}eNt+VEC z3_fbCDURB>mLdVjQ?(X{m=<^ z&CCT9Ms+#fY5d)}Lp(<|2MXTfLT5`Z0z>Nm5gxKl<3m%-W(+lBk5W(hD_0*^WWauL zebq_ezg^>`;^ieN+jM(eIua5Z33oHU+4f?Ere1y3-DuJ%2;8+5xik4sSsSJAwZ`4w z^Zi2!^HMg#NT+!m@JmoQ8uBE+7}F~w`D*%z|U|0*!Vy9 zxV`+kA7Z46^EoQ=`b*i0^QZ0^-JAJ_p5Waw@AkJ2#sJ);=c3ufta98Yyx=w*1RqOTy;x_qQP%fvTFqv;}Cl3+>ebbqHyUj zyL9LFJXA9|QV|kI6!F(=_A+NqURkiiZfhh)(7D&)r#G}2{WMUJ^zZg-z2^yQ5(A-6 z`Ac_RG_`n_gbr^exM`_ibW>_a6EE|VH<1cAq;t@-C`xVFrEJQWUtmTff508X#(1sq=vscF9^}6qrT_n6*zOP`sD`6+MZyKGw(~-mV7E95m>6S8g)D?>7&!| z(2pX2@6P@5q$Fwq59EgpIDu-*-F{CgMj2#P9$K{xt_$gSiZ^cqe7)s<#f1bod2s!u zjb{ysx*Xo`mDsC8Sl`hP?VLRcXfJ_%t1rh4p{=;+wB!#(C*bhxZCkxAa070SC`mFQL**4$`WopqFD z`ib7@;W^76l~b|Z6|FII8Our!$Z%X2td~>Q;7|9vVJrp=Xm&b-1+hcFOON&9&bjSW zS=q+?^7^SbnSv2(p_+|^*8NkS#8;Q^!^yk^{Eqec4{KZ4j;T(nJ?`17QHTN&HRz^)z%e4RO-JMY7^)ty zYgU!E=Z}>n)vSOXryLK~Hmckt5gn_CM4#YsIPH>{S$^;vrOCK$E4Y~Z)+|Swg(P_^ z%6GZ=P;83zHj$dY)aS!K6%nYP)V*;z()Uaxl^YK$3w=M%CrvSy7OLs-@eIgKAa%x? z6{>6D^E}M;IYalc`_$r!{sMI-C$`dI*A0dHt3`v=S^;BWu>Se1+qz6sPKVJ;@&I$K zm!tV^l`7E=m*0^40qpBCD0&<59WH|$%%1%wWxDflbo8XA7bit!E7!8YkBY46?u={^~lR9 zTUOSfJ?L0BZ&pNyrZ20-i`q|00H?9w$WrctD~>afM?HvEHT)Irbz690a&tjHX&Kxd zOY7MPJBO8>20w44y4DfwJfoOmHg{kHF;QjA6tQDOB&1o2lLI2_e}3Q-3k79I;22<> zCF#c1uI(VHe4qw!;f;@^NRii#7Z!Lo6K!un4@Ml_{%B~3)-5Va7-Rg3B>%pmKzrLU z*|Q-yoROuTa{o{UI)%6`Q^SV zCYr!6uM1-)Jows6ADGrQ?!tGu)5P5q;USDn$Ve=mH57iRyhlXVx>90Bxq}Ed2;mIc^tH)j z_@*sCoJQ&aIlEfq$(;-zLoVbx8xh|NvVQn7pU|y%Hj(qCv9UWO-@b2SDAi?MwB1eb z$v{#~qF8Qk&owq4Xd&>h5+34$r~jbs_~&dP*#&u~ox$#YAJSxpE)N&`QlFnR|04S*FVSuIm9TnX zf&$P0gkK4!bV*SD^5&||%+#e!{e=xJCxJQ|q}K6|ZmeEjr_^MG0Mrpd?h)FZ$bq?D z03-eB`l-WAhp9gJH5Mlt%>YE23?{w}R7C=||1iBZiL0(CxF_3n8rEZin>-yg92fIv zxzS4!=%@{wd6(E7+k#?6fJ*bQxHa83@Qhf;Ma_$59Pd;>b7`)NY@>;xf-^@l{&V;N z+9rlIsKR5k9&kPJYXtZ7Yt7(Ek^;I+3xqM30j*6A;lQ_HT)UMjuSMlsux%gG1 zUkzZq*Qny`^;Q#Y@gwZjJNs{bO*gzt{d}=RxL6!-==C!oV816MS->@bA1#c;^V8#? zASNR=NC+MjGs?9vmm5)Dsc%^pnYSeWeRwUh$b_duMipT@8yp8c(JnU=gn+)u_6oro z_lHUM>xd#!Ut)UZABt9^-Y&uV4k{mE_&&8lZX-Wy3d7RTK&S>AsoGW*Qg2&z33YyH ztp}8?0wCG%_5x++`H$YOZ+c~;8y<+?=Q=h&iyf1`Mri-g=Z`SvAxY2-0c}@5G&bIE zZ#*@$uX0fN)CFHJ`Wk<%aYar=yQcvf2Zkd^qh=>8mk+f}{`~h=D=p(AzWV2ttH+jq zUSn<=FH0stUe5q?RMx+E+>A`Wjim1;YJ)}mE>OJ5Xo?6Xo9amIn1$5$eD}jpxJIM% zx!m~Iez1!#%%r9p{4(M$s?Z#;HQf`Mhoxtq{abds{qGMfzM29n(Rs`bU%*wPD-EZ)LG)b$jRHk7g%y$X7<-g`*5^y_}w)vWScHThZ*)x&wd$SYnU(~myI@$T!0GS1%46O_TxvkCWJRjy9n%gzdNk=B~?H@5i}sAoEGp5PAiGh|z~q|y3S&lJ!B6F`Qd!yj64 zOp%ddx$hV$R&L6Q4XrqP;x=oDyB%ey58vg{$9jC|yNhHUjK{2g3MW^ZUCr)vbSkAf zL*4{xtP-R0Z12ux(|b;xn{a#oRc0 zD)FIv`QD*zR0XYXfo1e!NMp1pIG!F-z%e%H?c0#Ye)X-zL$~Qe;{pn@J zO!WE9!78XiUjYR*vN5)-crOF$Hw|X3#(8cpROXf5uzeupCkr1wMl~7e;`~VQHD!vi zHzp~q(`x;4=xmM161yX@TV7oeTwN5cLgVxb2yW^sb6< zehYc)CL!&2og?yE9-%)w#$=|IBemtZj7@{tKUud`I?s+I)Ei7HUj7Y8*%eE5sFXF# z<4S?`?r{3EhA@@hRChG$~bq@Z* zz7#CF;`0&944Z)j#*9`$n7_B44%x4FyPgtj*%{@A{h7Ym;c#WC(NY8g>!wxnUV z?ONX{C3^6-f?>P@j~%6>u!N$vQrvo$R1^Idkw*+Vaa=l9leywG!wWd$k7(!dZ1J2q zcU^`Pj}t$-y5AQZlh;Pqj?b5R=o*kMc6T(?=oKemy|!sS+xrnlw56W^?fLc#)pP*b zB{NXCQ?$29@+q20H2;LhZaTKcVzVtF&eLkd{Pf<;Fexhlr}thca|j`+xi>OP6ZcXT zB&TP>b7a*-waa{T0((G9rC{MH9G(j$T9~LhC!YLM{Y1?Mnm|vSU)li1KTaBL$yGx>y&pT7H2;9IA^O2Lf4qNeeZjU$MeWSJsH01^-mW}ET2Zo zF8GlVa2lOnyG9if87!aeGDmaQ0VG0T@&OB`z8U z<$Q7^#XB6vuY5HOUk9sct?X$==A^%Crh5n|HoH#~=_Uy3Y;*9~<2L;!?X(@z2^%>k z4?bD+@jWt9c1Y7&sLu>QKnB3p1{C#Ak323!BLb#PHb zFv9zlnSXcM^tQgMiu+ZHzpZ75v!78HJg?onF;d?$y45EBvSwqBxJ-|yk)tjtspf}| z0=Ov)6e|Qj#1mnB-OjCFE5s(<$@;IJzvjte#jX1iquFUbJ+HB=Lg#LW*gzt|6l!*d z&Si2qUs1jnr_qlHx9tstf*2tkBs5Sb~$7fuRAm*T|wG(u~O3`^Bc-WdV^lx=vp z;itm=ax0PHYa6q7A8kDH?`d3j9InW9FkwR!9#<8wvlLVyg^{^KKk=^#Sr=8oxT?O^xZW-S6H@ml{4t+Hx$XJ zVKO*5O}pR;Bjp>iHY!AB6BEcBu9QirJ&XmG&%1g%)r8GTyPx#?9ae=%q#5~+EYE$^ zwbO-}_>NresVyvK63(a5_tpP57Xyb3?N?ND;>x!fzB&E6xT5B|)Xrhr+!q|elQ zV#Lp+$o3)}=n_H`lZ~rQtlWtZlkI}}t^;-AG~}J4o_bZ*m}rGIzjvj%KiqiLw~JcY zOY}5w8w`~>1#64uVYMujO0H%tUW|$o+E4S(p(2-0S|;CZKkl2?=2pFFi6pD1)ifKV z`LX*rGV#%`dE4kpNwX2p0wYJB?0z#$32?1qBdV!o!}DgeV(JnX!wrdvU%zI$C68Wd zL&_BlmFCSFM&5Qi&yu#f&Iaf=RcE|W8F^gi@4Nnpb0?>7a;2_3g}J~X>)p7?Fg)ZG zs9|FW8R&ATp|(fz&`>?k0WaE+q@-}C<5i>3Br?HQ@rhIA~0!Z3?rj| zn-&&CXYZ@>>!+gf_dH`EI{DN#H4_J(c(>2E+Y`dz&kuIwt&UC|!HSlPc!h+4El0+ML53cEQ>p1OIYZf_e`M4YIAU*< zn^pxACWRAo`e^uZHCCH03;QBirU+M$*K+-T&7iFgT8`Kj9i`hgd)b!_?es;p5v5$^8t3H)eGZdIj**X0dzo~zEJG2_W0ERVXje)zUy4kZWWuJg%CQIb};)b7cdm~w7 zZLWob)XG7Hzx|<{zWRzs48FVAfphpDFl#wb*U<6EVo}9H?;fjWEK8t@IWD8&@v7nP zDp~7SJ7Ee{et!{tJRg~owauUZi<~Lso+E~O26z81lbP&lR@~H+c9??U5r9n5k+CE5 zOZvokDHBGFq6fN|#{hYNRpxfX;!U2NUBe#-(k+)PgqNp`YL42$>^(*tJ2Ui%J#upj zO|FpqepNsHEjFYnc|h$d{kH`bd@}YXW2kU#+Ldt*Gds8cQ|R<)0Gx}oq)7Wv?|DJD ztsoa^X2KjUB?5iR><%w@EVLdl0h!4m$-mJwulH4m%NcT9JFHBtesT;1^!Fa(!#n4^ zVr! znqZ5zl5jD}71N1D@>qyuih_)N`#rtSYqm1yxbKdN$-1mqc-m2v4ED|)d9~&_yajG$ z|E+lv#k)z!w{5PMQRbQh{*PA}(Ao`4dK|>{&GGk=%lj(wGarUc#+8ZR%7NWY2xIVQ zP#BlJIm}6ZmzVVJ7oEf2w*PYDAIE_IzPXiAxdmf~sk(o!dOWgD;I8e4GiK6DI_#JM z_2_F3_b+2xH~1hkU<=-bjV_JNO<+VXFe|_sl0_-gzHY0etn*HtD46ghJ(#_KoKN>s zvf}&QSGi4x+|~KcsB(+-+{Q~jF)g1}J00NT(>5nbkBl^T_v9pqRN2@BA{m@ME=oaQn_=c{j&Uh{bwup23pouZq|=Gog*QRAex^o|_J^9sws;Lx?=PW-tR)Cya7fUvS`-nm`D+eejx=s_&2M zi6JDz+RHE?)(VA3(Z783%Z88{$4B)(&8MK;JZoh&eX^I%w?bJ zZGU8b+d+sDUg5*sTCdr4{GV>IvC}`Zn&Os00%yS;HmI_N(o^&iXkuGiJ+4c-->F_m ze3N18VpN#1KQ{9aZpszRsjvS}0_GCOsZTj~*;(SUZ)YZ~^vt6|b6%(TdC&17=JRdx z<>|?zKeCE>or&h&9XYu<8ze-c7r&>)o^zfMuCn8=PivEP{@+b+!RM=kMRMWn$Kb!) zA;I{(epi+ryM9f$ATtmK_FJ3;&bFS3GY8jeLsHqKb2XH4p&vM^g5CL|EnWpRK1w*k zxE zH1Y8SZg}4hzrSRNnP(F_m4A-U<1~|AhQ^GR4c_!#RA}+m z;)kEmYXSaXWiFmGIsMRfyn6pG^Kpb2Bf*QmLxjYz@3vqA z8^ekHJ!(=6vMMD+wRL_d;c=dvRr1(s=ZTFk%pd2NJLT)jm8>b81Kc0aNafFCwu zk86;wG9-&p69y+n;T*%x_n+}^$LgJ;{CD01Zm83$s?*9*C4xDYx9+5b(z#)hv1x%t zW9XRq8#|rx>sR@~A6tMvZ+shvqrAS)kKOt;FZU0J3ht@HcKN6^hw9T6`JjRUe3W)i zHT5i0JPye8^Z>jNiheNpSx4dANrRGw;i5L{*Z4E&-NmBfm;G|plK1udtE4fzDs*OvH&At$|F7ZyR+rRjnHO`*OUlwSLvv_G=H9m0;Mtw_X*Y{1#c~J6WMv2Q` z@qj{pD{LeJ0ye_%O!qe&Z{ji3tUW?~tLSH<{0i@$R$m!$Q2Yv5^w*{&k@2E-%~HX+ z=kayNbU@ycayvJk;j7fON!KZf^}X(Dx0F6E^@nmtOQrvewjgBy|3j%6Kp>bwAM}%8 zFCg6BRU)|ZXAmwkRflckgPnKy35%NZS8=K5mN+SU`vd0j?`WCLZtURor=q`Rf)REX zr(c5Cjc}0u?`s5LO~y<-;-Tu(JMe{$$H?x$w~t3}OCBuAYqfQ?&3Kj^98x^ivy0^H zH1dVzKq>PiS<9MF`aF~G8!js4?1x@_5?#M@dV8QtS5Z;$mz{(oOKuy0^=iJ*mHjbH94rT1Hi$P|ALk7>>eX@QJ5-PDo2AFKX&4Nk}1VY@+>>O z+u%$Q%VQ$nrT~In=|=Fzh<4)%nSJ-q8QHIWxTwW&!>sh~Q}UoOaRJU(0J( zTn#RNrZDR#BFev_8_@Di2qSOxANuZ^6POBczD6er#lTDPoa{E;1* z9!%fZk8DDjo5MBlQZ`kqsUIvLAdjnr$LcfRv&wlB9|wu1adVmgDpN91v9bB8T*^w};?n-6;Yk-1w6PIl<90a5)$V?`j^eCOl6kz#MvIFP;U|1zx;;*u- zKvHKrp+E?q9i4THiI@TsBf^?7^$v{D9M?}o<2&Gp*TVva#h}D_z69fep%z8IuVA>m z>WWKBEk*Y18JU7)SG<8E2VB`gj@h(&fzhfIW0p~2MachBGD{c1r2MK?cSC`3f;$YVA{DW$VWV5})@ zkK%!Wnuk<4|I_Vf?eBE&7tHo-H#nocxHV{?vux@Z*?rY1LsHIyk{?K(rg`jF}=50yn z!)4R!5>;*|$iiyzNN(~HVJX_ndcS0eZ$Z8(Lx;TWoep~CvtsUzmn^n!B}R;Lcr`tG z5*QSz{~TzI;`D#_`35Uz;2a>7{xp3hTjkf1bMaj4;SU(NDz|F=rO#zq&Le_7M^N?( z16h@?3*XoTILG9x3s9ta6+x(|s0R3+M=-b5iV+9( znq$96T>g()i=N-#$G-s+^Z(#s)8*cEU= zN0hXQV^E@F?cLuBm9_W9e(<8-vIqlo;gE+maR0q8e(jX+2ywBka;@R@L>zsZPQLxy zyz+$UvYUPW?2}J&LZTPvm{=6-^4~=a`f{~dj_{gI)|v#yr7+i+?AlVbYDDabglp@Y z&V*BV&!V^rLjcMQommL7^oJOOQ8tzX`wN!_x(ba|&hoGb@5?Mj1@-@Q)+3{`v+7;| z_X;&0%$qt5`yQ|d>>3kQIiUapz#Idd6K#n{lZkQ3eMp|5kzKkzGn%Vlkf&VAg|Yo zkGwv@eg;l%zr$`TXl*C{`Y+8i% z1DZl;=D)mDGAb|9)y$Yk`*dBh;n;ed-s4L7k~Hyc$#0r27?vp+<<5)YsZ$48{4D1?Al(IdqS9$QJ z&zzF&QX$A;^C)6>Cv?<;Dtq-|40(Ltu$ComS_;adRWr*qza)ce^rhIn?<+PmX&Un! zMBGr1&-a+DUC6{uB?AjveH2JBHOmLh7?$wk`5}^jN;o>&RTMqzSC^qhrqu zw%o-A#IkaBvLHM)UVK6jQn=fF>`0CH@5Y*d=XICxkCO)4)dAB4QSRemCE5zEB9qUxG^T6-TQLX&*uo*&5^!BAsuPF_OyCl)p4UKKk)bZyFSP_tm5RbgYpZ)tmVX%_in3Nw5--Ku(BhhRILFm?d0!^3 zKByOcendW&8^SqG>ef^rov~HwlkPt!Syimpqb_Vz5=}$zkVW+mnW}Js9>j$F$*2%L{{K|p zaNH=!ngh+x7s9W~{8K=H=dX>`S&0(w^8B;H#@|~XVVgW#s69v8fUz@N%gn(vpN|UV9yz} zPs|2M#}yD;{Ua0cV(D@HPiKld?8Qb{YVDGyieH2ChQC@(+ll*je#|QgZl$=G3^6{0 z1OP=uWZ(vh^}S(wAV=Bp1&ZwC#$ZG6!&o!U!ci-a4DOj{TfrLgU;|*rjJHj@^(W=* zSyx+Ic{O~gL%&d4gpAD#P0qgeZlB%Dus6;=h;)=XkGryTq)ElxB&C$?%IG_6V_tP+ zF@d^)0`V~0*BAd?{|eZZE;l3hZE;T2LHR@^dz9uMRNy_m8swa8r=UxM9GOBq$<^vp z|9Yvb9rIMrwyX6K>${mpT%)cWe`kK-!VAs{-*M!c&f6|!TW)K8%ZEl{lLpz(1~b=0 zAX8*yPMNa_X`>ypF18`%rm|^$*_sv3uDnmD3vZ9_9-%M6FC1^$k2ka&m-ym2=94zL8Px zctV;*yF#ooF{L}uu_!JYGB}(f7?|=n(hRYIn+Vf%%;F7}Mf@L@&N42l?(6%AbPECs zl8Q7aARW@uJpn^XN_T^FDc#ZyLwEPkCEXp;-SwR7e?RZ}u+Q0Z_S&m{-xVjXEvhdn zn|;LoW8^zDmu(ft$%Cv#hq4~*w19fH`yDolFn};*IQn77))yr-8LaB~SiSTienm;{ z{k{(JZD9x6KFLkm;t%^+?xK^aQY1o|pM8Z>0cpIl;9xB74aW69_@3J8Tz(Eb`fhik5oV|`M$ z`dA0^S=QH)s&ph&EGz&<2_oV42jghcHXWJA!b|5-GvL5KMoQx=K$*_^n0X1p=gzU< zaq zI_qXkwbi6obWfqep?qi69-){lCa`}cE zFNKL>uD8Df%zu`su;eous(b72kZI#b)u7aHTGH`$bGAuZ{-v`uQt_y@T3te>HRl7l z)>qW8>$zJX$bKPSWFjFmBY&HyZ@LoPDI?oT@z2;ohFfqul=IvE;Zi6r71Cu(rdY|R zGCh?r<$!QMU~4r%1pZid(PDQv>mVr?9jN~aVP?av{d*l+1=1!0U)j5CvF{~dy_GXe z)m_eQrK&(R5#I^5!>9$4$3Db%;ZFmX@8tx_d(jpTaW9fz4AnR^&MPh1L2JW~M@NbM z52?T9F#6l9wm=Ib*H)Vfoys5g3?PrcHNUJ`RB`pKhk~(HF@#HTcV zPMzCDAOsfZ`oL+}92yP&o11`$8D6QSKW=ca{WctVjG&plD8Fu_V zsLHEWl;AES>;7s&z)f8)rYN6H0XV}`dR$*JSeb~(w(gMOYM*mjk5p@hrM@?Q3t;s| znBJ{B5$b2F6T+B=zAOd*VJzZ+iqyZU)l#VwzbEVtabGGUtL6mL_<@Oku(!7DavzwI zJ+7N-!Wr4CU(cm90aZ(JB!3)?VgfaavF2hNQaLWt&#s!yKa?X7pqYhmcRfd0!92^; zJ7KN0TIomvO(vENyS)xLmIB974q6HM4}H?E#6L&F6vgwI1M9G<64S?HqEYX}f0Moa z#98-AaASxoi=!!)Nz|lCMgoG{WaQWFZhUD8HD7LAaVl|NKR zotA6ha-Uv@3q@n9x1?sruTQtXhh`=)hg&Btk01t8;WfaOTSX!1h(6emqVq~Kj$-e& z@q82Td9|7r7B%`1akx#8^@DsZE0eH8rzc7=xv9buk6NvGF?&s!HX_!yUm^ds7SoCj z&U5}dopwi8AOgp{Y_|C`>AV^|b3J$VS=+e$jdnzYa-U3bqlMTZGsQDmS#UIVRGMz@ z@m4NHk$45~HEWj1ijq}`Z++$3SW}{R)@2~eH%OwCwndeD;X6J!*8z)p;)LA1lmEPE zBCs6iIE*`EE~K49p`x#2{QKpKF?)ApX~@Figps%+`sa_m7T%Yk)g~%IRHa@e6z;hs82Co;TD!W5K*o~s@+xg#8o~5N1Gz|noOSgT?lS^@q zoJdxK>XD;>6PI)H(B60pciFF#4>RMbZu||-ZJy6)QsH`8v1dds5D8(a2%tqqchU}F z=^@mt%3SHMBruhOd_D|?Lq1iZ3ia|T&4)PiGLg>N+_<#Pk8(*DiYFkZx@sy66dwsGbAwe` zfBzz7Z;sZWHOFUtt2X&L{#-A?s!<@imkHA@g1L^aBS7GU-Z?Hk?605q^$)kr^BLv6 zO2L+m#|UQyL$lFGlK!MJEwM1d8RcG<=I6NUR(J^O(+lMk8kOeAS759D|MequMrQ3_ ziqC~pu-NWi{oz!bkWIYR`uN&FnxhasKEhO5&rFk+qUPPSYCSlf>8%xyf@`E3u2V_c zL!qopxwft3Q!JWNDnur|{u(3)`#e$hVOPniEr9Z=8GSuZp}Rpz%Zh~R8Vdwxsx42z*Bh0sfduz95NcSMY@cBQu^3!gq|v8dFra0pBd=f7+<{@^t&h&afu;RDKl?e0>`%B zb+^<(7My<d8QxDL=8ru6~=(x`RTG|L~fmiLjV6>J>$53nT7iKl9 z03wMNQiz!H&I=3D*oLGmIfK*9Lw(AJMZBojnjl?xI&H@xDb`_0s8(n~t|(q*mAT`3 z|CjJuk;?32#dQCe{>Y=5ztm3G-KL&Z45t(SlRQpCHR0h7|11>HwI6`}!9-ERUqc98Q(4Ml zIaCLnLEp~QNhyVK%YA>bf337d`It+d_q(!s@sHi-PCtFP4Lgf)z2%G^nGqY2aiO$+ zCS3$o8jD$%G~%R@3lSvqPy2_-h>-}TZ5JH5<+ZxpNmiz*VuObF^C{2dux5jgTwuW5 zo5z0wts;z`w5o)iIjd6kf*;B&V4@0UX~2CE z634Gu+o$-ShZGRDZrZZX-TYC;ZL#5$_YY}8%TufL$jPp>*DfxRaf52lhL^^S1yn(W z{&RIaVb}iRvc=sNQN!>b&bhRwT*2qZvhck|UW?QaIvJc|>QMZsZ#XgO5P_+6RJx)k z=8*Fs{!yUpid9Qr@SeAC8R(FYFRisR4QNd^JVT3SUKX>vVU-ZCJL^N=!*D9NY2gWb zz*fX8YTnq+f{{%IG*HYjkI4bT=odk~QmPB|`6NzPw_)4W)TzyS4En9&6wstVpQ+Qr zTTVJTz1vrI$7s#T<+ukN`tfdw9aJ}&7N@&q9q z^Od}d{ZW;IPa|5ctilkJvYQY69e<`wXjFDlvo-zl}k?Jw>`dX)TZbR<$feJ{7_fJvT^G-l*NVN z_R4=z{3pqT({x(fdZS_2xCVI)gVdoD?m;wA5U43*7ItRO7Z5naLWIZ z;7^^B9AhtqPCgjeZ(v|)Xs0h{V< zC?55ExND~zWu<*i6A=zYm(kMs_TNb&6iihaZUA9l*&; zdXIjz6@M%bBj$>hzi37l!bSlltUVA@B^2;#x;NM*+g;Z3$Q}mM-f~_QYM6f~y4qd$ zu;zsb>eZ$=Q{|9|Eh~76!I(`xOg+oH$|No^Tcx*eH7bHJosdPiuV>bUweNZY#X-ud(efWJcyq(auR3xpzELO?B39ZOD!Yx;# zFLvQyNbc_GWI)8TL&mU56KVpMf}aOF!vAker9h=O9nNE6foj&KuvX^3gc_8?&J|?> z2psJ*K=S}9+}iZ<+@T-CG6a6GYmDzmw3G~UFMxN&4l0y@#Bm9Sei<+17lo5^SUiMJ z(G$6h>7q*gjnwr(+WUXKOdX2)9oODhmY5p-%1tLCezq0mKL{=WMg~nrV-dUdpDwa* z!LSxfx!YRFzyGeij}>OlLUzH`kBjJlbJsFvGnvQh9yqUevF>xKvPYy|c;dO&m%w(c zZ&x-;w@x5%U5jO2o^pG%kpLcu*M9|-h22s*@$5d$#%cYxjv%m3yUtrk>{fticODyA zJjNk6wv|k`e;nWXl>ceRz`v9S1ji-TVIyRKU{2iAmx*{ASEW%c^`g4}N8%#0K;MYv zo2;LygKqWM9rtb!ws<8-6`GuJAkx2=z)gZAAj6WJGbVL7Xq@+54HrxpKd=2r-;>_F z!w)}nZLomc20h3hW3c3Dlfrc?Aw#R%hkR;eY1_J;>pHgg0aoa93qIPl-YTO)I1MZ! zT}Plgry(*FPh=F(w@6t-GqL660uv2Z#O>99o7mXET1TAsP=1|)V3daRT*EHmCE$(a}z)nI5bjHHcI==BZ z8C1X_!*rTZ`rR#tH^?wy*kT!0m5MqM6cZA0ZoB8W|8YacvTKTjoVy!n34+Kt8O zxZ_==_-3ziRM&r=&9$!u4)%jO8pdF$BW zU7gp^fTVE1b<9^>sNh!C4R$?y;6C=3)}iTe zTx7`ytMF!|1Ch3LeZBP2~rCNH-lAaeQ3ELGvAT zd1o;Ji>P12{jN~GuX=)txnMkl*lLDJ)CupWv{2tN9?M6l`Zn@V64a=3-MP?GzLBbd zd2AH8AW*VlYG*NalR65s1@g0Icwv809=AjA7ausq|9}tE|FCTppfe7&t~aVP_{WFh z79YS>Gnc3a75)kJP2)I4roLQ#3}vnKwb-KGZk4y>Aa461r_0xY#DayKdOI)@uw%%K z%yeJB+Xh{!2pl}kM+gqgB_50~47+dhhVWp8J~JXrt@TTJw2SSY#I#(CXTPrd*rWGM zOiEYdwEW?04P2N@y6t@SVtpK@Y6}@j-;JPl7nr5%Iu_n8LvmF6xM`df0S;jS;%4)h^-{M7y|q=#hHd}(U}0UU ze=Mp!I_4B?*-rpKRdS@ne-gxPojTdHIQ3PPVp<6%Z%rH+U`A)x)NOIBooF5}_qd4N zD=3`z5M#erO_num`Px5KMyn7Z(3)CGFU7VJyPU7ckL`1fWN?0^cHWC`J!6z||5?48 z?z;7?Ua0FLN%Su0X*+3j*{%R$4AqC^3Qv19k(_yA@W9%>Aw7#-hTcTHy9 z*@d}=KWsNe=qlzb73VlNKikS`AB_}R22PcVQW#o%f81|Sa~HiDUO`1te1+0DBJRBO zsmOmqU%2IIN+uMSg_{HyI^WF48MiSZedPAinn%<9vC$mOR1ZQws+=C${dG~*t0k0# zJfmX@%xFK58e;x`?Y>E^^GQSA&+zOXy;j>muOo)NVVCt;h!Jw{X?8rH*&613Js1!~?; z;vyPY!33vePXcxwi;-d-VH@_mk_)Avu>2 zpVwN9^QA^a@qApsdgrs8j$V!KO%?erb~>i+eE?6%vV2`x%ZQpS!r~1?a;Btyyzy9o zyE&w1a;e&eMk0HO&isMFWUroI7QZB1<;Qn} zxy!)V1s)U1!LwcKheh1`FEpf$E#{3Gmt`_+Osr1wRP_*fmWI%1W}Zl`95eaWvqgIW z9+OH>&hI4`sco}msSlS;h2r(EZ?4go2?mILYgc#CV48y3yh@{6qhoRi>`l}^I^N-4 zd*HSS+y2NwzaEXSDrd1|=N_FJ$7m!ZM;||8LjTzKFpWg`vD8#41IufJw{%4$P6vxQ z4p+Z=4~g&E5eD_1;!o>lc41=|6@#UX+cqM z`(RU|ny_W2S1&=%t)0`6$x+g3krpkEMmJ@YBCfgAUeiC?Gl`#6Pj{22t2llOMw`Nq zC9YOjmOzk}Wqj(qE!l~yy7YLmSeRoSF; zmb8{iPU;+jdy;E@^4SA$2giOC)Wg_F=;q8HpE2)=3Cn*jw`!IShUC_?kVayHp=* z@a=qLIH{MlE@%4IVAa4;k)C#tE0j-M=>pbYet}A+F*VVpSm!+N<%2qP2aip3TjJX< zU)u}gs;+%EV4Zi?@H+Lr^Dw>(k>7PHIG+iHM7-leD{UDsgI1n!mP+x$BV&oJGY?UaYyfXExWF-675veZVd`e4?L+c> z_0HdttJ`_B9AJGvNsxgHMU9`?>&igk@+#8B;25!zl9uvGjBo7ET;hYK~O00-sL zNszR#N*@3%hN}QjI#ORig(bSw#d04A8U>T!A}7H$=Uza=>iCC?Y?d)XaWd`N{skTJ zgudok8i!`$s$}ML9CcAoc6T$!h$wbI3 zHKPI)cEh9gdLRg=Npn%?NsBaH%ch2GyHdVUw>i$~6;e9@Sf|OZ)%N?tqEXWKUpsEx z0yW-0Tm2HL3yzbK-@F?yA9oGr94ZIO1HWOi(#=ie$q0`0|7dEbm_tV!j4xQ9^47_! zkeL-HTLyl{#=Eh+>8bfMadyqe%6N?JrS;)SPHdk4B%#Fw1__u;@wX&l#j++hYhONV zdP@2>e;@&~fr{JmSsW_|Y%t@;8X>&btN&>TvLg+yJMOl5xS6hHj|)&{u`-2Av!rL# zBt$JL;E0YJH9w_^g_Y~ETv)v50s>zJV1|bO1d@(5MxD52GL2Yp_7Ou3iTIt|PGO6M zv0%lQC){~l`Cl?^t*h?A2PuhJ1O^`ccID%noW3HOo_f)heaZJDj@YRiU43B}$Sqe1 ztrGjzLw~X7O4N+`(qi&lhdyxTdyN;0yAGrQ^n3`;RU}Q0(-(a$R?;6J(#pP2gjvK) zZl{;!f-=5S)w*AyVihzYviW?Rla7W8M=dPqjMPlbY>#4-N3%wLR(dvx_2`YRhpjln zV#y}lKF8WCnXT>7mP3{-mH#XdO-q)pygN45LEaPbj$O_brxP0qqj=1KhvHE0i{40N z?&0FESjp-3$k~m{qE0XTW_Coj#k6YWID=CBzDu~KkprW0rx!mWh zcVhap089|j_ZpbznVrlN#nzv_MwC5s~a62LBz@@x;j4?alP6BTl2$ZaWXa zy51{lCjY~9G3QKjQ#fjUEY{bI!@0KaKl$stoCvLuTIqVMY4&wDK*TI_a~+}@^lN~G z2ft?;@oDA7LNj;K2PM>GZBX|J)a@a#j~7ciuU;uQB5a0V!m*LeH?BtPI>JTatuq|E(z0e%v7urFiw~P$t>L}oFkDdn(3Qz=} ztZ)~N^V;G3uhvW**S{p7L%kvTe~7Z%`I*7HcYh3xr?QP`>c5r&l_7(J@}`NrY`ng= zsOOQw8Mfg)oTRkz>bYXGxQ>|LOrhVLSb&V5WCFj?Va>#r(?9!#4EZ-?^;~^)of)g2 z_4d5+#cX^E{L0D*)X1H#v&{;?7qW%QOhyJ9m*1#KG+#1vN2X!4Dm1V*Lu?8OS3Zyb zOKChnNe82Dq%h$qG`-RvK=2po6umlot0Tjp>~q9)pwn`3tNHnOr+BCgR6%GnH z(``KqAZ#6?T#W#hyaAwZqBy19H%u~TEP(!q1iR#BmFzMZSMBv%$g}Hsbbg;Ta4AM0 zRf2UQr@qO5wea}_bX5T<_(8w&rZPyb7-crm8Cp(!JyR?xAIM6NCv1tI-5(VBmX%%K z7D3CL*h}l7=IE1A1y1dpW4%1L%3_fVqOSe=rhNv4Qs7u2h}CqD78U`aU9_y1yH#CS z9|%Omu~s+#42VyAQ%e@_w!GXyziv*IIU9N$c?=Npk$r4W=Ww|mm&_T8%4bzYe6G6Y zke2|gDD5m8$xbv3ii8!T(IfQ9(zoD;`_GUgtq}pA3ng*9>vG}^#}YQzcGA) z0;|{!ck>*2XJYUAlYwW>cvN6wB@z`|TJ{p;XT6y{mQI3J2mTl}0)r7aW{LS~$ zqhW9aWH>=Z48;rBY?@gFnLJ6v$G{7Rf7&eTR*Pf^@z~xoT0r#GrUjZE0kKqcYW`+u zY__Z71f+gM`q%%ew9a$|`@-bkd^5e*rh4){l%#dtHVk z=hL?mPn>%vW@i+alV2#Yep_>ZV|UbLPG-NTw z?Htd6Z1LEYBm%J)|L40JQ|vou%WJ>#2*Po$Bfku-tgu&#ZnjB*OfAXN`cn~)Y-Y?e zYEMIq(NYLToS|Vt4Ib=|zuu2{9%BJ#Z)@){Oxmtl16*#WNub$I0kn7p$^{fM6J?7R znjSzK8!F2a*)?gxti~;)cInN%t|H=MxFn1VzoC*q&!V;7Fni6}RUu=xi<^GwCg2$> z?44Fy+nfunB0C-)%_;+UTBLfcivCfC2hA>dT$ah&AUwPZ-|Ya7^o(}Q4mm^g!-l!S z*uO5LDV^&B{NeNrt!{@|`vW0$e;13Cl)e60anxLHlJC*Q(HRZBW_*3@42d*IJgd;n zo9m`3n77OoXe!+&03TAD!AMUxM!jqnd^VDzxL%9_Kt>Gv1(URax2_G&SMud+hl=IN zp7G85IY$?tyHK2?cLMW`8?ci;QH=%8u<}!p!$eQx3XK*j#*%eU(bdUrWX^~$PdUyB zH04#E8Iwc2#VEi!_N-~ud3Yy@^kXlGGaYXl@Ryr|kW7)hIxmoO0cR`e<$n__6Mi;S85V*KAGAT$~EIVVCqVHo{?pfwmgL7sPDjdyjSV zW3Ttkgq?Wa&f|u$v3nddtKU3<-A6{*i<|Hg z`)+hXew}Ern>Yqy{}vHryN^UV$T|M8Kg8tPO2A97%F-XHz_+cOQty6q^5Vebc4W?e z>l-eIk^YM)N6aShjPEQ*wyv0bv8H((4!Qo`AHQJ}Thb89$3EL&&yTI?SQSlsI-^Ef zp7qfYRU|M5^tWPzYU7O=*?lH2$RCU@F{~eTSCW$X)E3QSvue}=`!w;IG~;KPCWA{V z-_BQt*BV$(>=P9ZCWo^0;B}HlAD?NP+H%7a&Y&>7l&~f9fZ5!F=lR`!nn9IGFw4lG zsOjz3FX@g3qpVFB7hiyBCvR5nhNB+gJl)56!D}Yz1)ogH7dsV1`HB#tMwwo0&H{D0 zjM9deZ7U@b(~a>9B$YKCo?eBC-@$Ca{vzX{xaMJHIoOc?~u z$MOqKE}|M2H0jJQ{pdq;_adV?4b24R`7h{!NfLe6D@~Ut?aCIhw1Mdz*XtfpZm;C@ zY?XE3p{ymet-b~b%i|0mb8Gu%&#KjXRb<>w>0)n^gqP

1BVaiUJT*?TyUEM~~c< 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 + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + + + diff --git a/Example/RHViewStateKit/Main/ItemTableViewCell.swift b/Example/RHViewStateKit/Main/ItemTableViewCell.swift new file mode 100644 index 0000000..14f1f65 --- /dev/null +++ b/Example/RHViewStateKit/Main/ItemTableViewCell.swift @@ -0,0 +1,78 @@ +// +// ItemTableViewCell.swift +// RHViewStateKit +// +// Created by Bagus andinata on 21/07/21. +// Copyright (c) 2021 All rights reserved. +// + +import UIKit + +final class ItemTableViewCell: UITableViewCell { + //MARK: - PROPERTY + let titleLabel: UILabel = { + let view = UILabel() + view.font = .boldSystemFont(ofSize: 18) + view.textColor = .black + view.numberOfLines = 1 + return view + }() + + let descriptionLabel: UILabel = { + let view = UILabel() + view.font = .systemFont(ofSize: 14) + view.textColor = .gray + view.numberOfLines = 1 + return view + }() + + let arrowRight: UIImageView = { + let view = UIImageView(image: UIImage(named: "ic-arrow-right")) + view.contentMode = .center + return view + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + selectionStyle = .none + + contentView.addSubview(titleLabel) + contentView.addSubview(descriptionLabel) + contentView.addSubview(arrowRight) + + configureConstraints() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + //MARK: - METHODS + private func configureConstraints() { + titleLabel.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), + titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), + titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: arrowRight.leadingAnchor, constant: -8) + ]) + + descriptionLabel.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + descriptionLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 8), + descriptionLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), + descriptionLabel.trailingAnchor.constraint(lessThanOrEqualTo: arrowRight.leadingAnchor, constant: -8), + descriptionLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -8) + ]) + + arrowRight.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + arrowRight.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + arrowRight.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), + arrowRight.widthAnchor.constraint(equalToConstant: 24), + arrowRight.heightAnchor.constraint(equalToConstant: 24) + ]) + } + + //MARK: - ACTION + +} diff --git a/Example/RHViewStateKit/Main/MainViewController.swift b/Example/RHViewStateKit/Main/MainViewController.swift new file mode 100644 index 0000000..6dedc2f --- /dev/null +++ b/Example/RHViewStateKit/Main/MainViewController.swift @@ -0,0 +1,101 @@ +// +// MainViewController.swift +// RHViewStateKit +// +// Created by Bagus andinata on 17/07/21. +// Copyright (c) 2021 All rights reserved. +// Template by BagusAnDinata +// + +import UIKit +import RHViewStateKit + +class MainViewController: UIViewController { + //MARK: - PROPERTY + private let tableView: UITableView = { + let view = UITableView() + view.register(ItemTableViewCell.self, forCellReuseIdentifier: "ItemTableViewCell") + return view + }() + + private struct MainContent { + var title: String + var description: String + } + + private var content: [MainContent] { + return [MainContent(title: "Using container UIViewController", description: "RHViewState implement in UIViewController"), + MainContent(title: "Using container UITableView", description: "RHViewState implement in UITableView"), + MainContent(title: "Using container UICollectionView", description: "RHViewState implement in UICollectionView")] + } + + //MARK: - UIVIEWCONTROLLER LIFECYLE + override func loadView() { + super.loadView() + + view.backgroundColor = .white + + view.addSubview(tableView) + tableView.dataSource = self + tableView.delegate = self + + configureConstraints() + configureNavBar() + } + + override func viewDidLoad() { + super.viewDidLoad() + + } + + //MARK: - METHOD + private func configureConstraints() { + tableView.snp.makeConstraints { make in + make.edges.equalTo(view.safeAreaLayoutGuide).inset(UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)) + } + } + + private func configureNavBar() { + navigationItem.title = "RHViewStateKit" + navigationItem.backButtonTitle = "" + navigationController?.navigationBar.titleTextAttributes = [ + NSAttributedString.Key.foregroundColor: UIColor.black] + navigationController?.navigationBar.isTranslucent = false + navigationController?.navigationBar.backgroundColor = .white + navigationController?.navigationBar.tintColor = .black + } + + //MARK: - ACTION +} + +extension MainViewController: UITableViewDataSource, UITableViewDelegate { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return content.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: "ItemTableViewCell") as? ItemTableViewCell else { + return UITableViewCell() + } + + cell.titleLabel.text = content[indexPath.row].title + cell.descriptionLabel.text = content[indexPath.row].description + cell.arrowRight.isHidden = false + + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + switch indexPath.row { + case 0: + let vc = ExampleViewController() + navigationController?.pushViewController(vc, animated: true) + case 1: + let vc = ExampleTableViewController() + navigationController?.pushViewController(vc, animated: true) + default: + let vc = ExampleViewController() + navigationController?.pushViewController(vc, animated: true) + } + } +} diff --git a/Example/RHViewStateKit/ViewController.swift b/Example/RHViewStateKit/ViewController.swift new file mode 100644 index 0000000..5e20bb2 --- /dev/null +++ b/Example/RHViewStateKit/ViewController.swift @@ -0,0 +1,24 @@ +// +// ViewController.swift +// RHViewStateKit +// +// Created by bagusandinata on 07/17/2021. +// Copyright (c) 2021 bagusandinata. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + +} + diff --git a/Example/Tests/Info.plist b/Example/Tests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Example/Tests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift new file mode 100644 index 0000000..41d7549 --- /dev/null +++ b/Example/Tests/Tests.swift @@ -0,0 +1,28 @@ +import XCTest +import RHViewStateKit + +class Tests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..75bfeb4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2021 bagusandinata + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/RHViewStateKit.podspec b/RHViewStateKit.podspec new file mode 100644 index 0000000..0d83366 --- /dev/null +++ b/RHViewStateKit.podspec @@ -0,0 +1,24 @@ +# +# Be sure to run `pod lib lint RHViewStateKit.podspec' to ensure this is a +# valid spec before submitting. +# +# Any lines starting with a # are optional, but their use is encouraged +# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html +# + +Pod::Spec.new do |s| + s.name = 'RHViewStateKit' + s.version = '1.0.0' + s.summary = 'RHViewState provides fully customizable configuration to change state in your view' + s.platform = :ios + s.ios.deployment_target = '10.0' + s.swift_version = '5.1' + s.requires_arc = true + s.homepage = 'https://github.com/bagusandinata/RHViewStateKit' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'bagusandinata' => 'bagusandinata@icloud.com' } + s.source = { :git => 'https://github.com/bagusandinata/RHViewStateKit.git', :tag => s.version.to_s } + s.frameworks = 'UIKit' + s.source_files = 'Source/*.swift' + s.dependency 'SnapKit', '5.0.1' +end diff --git a/Source/AssociationPolicy.swift b/Source/AssociationPolicy.swift new file mode 100644 index 0000000..47804aa --- /dev/null +++ b/Source/AssociationPolicy.swift @@ -0,0 +1,50 @@ +// +// AssociationPolicy.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import Foundation + +// Partially copy/pasted from https://github.com/jameslintaylor/AssociatedObjects/blob/master/AssociatedObjects/AssociatedObjects.swift +enum AssociationPolicy: UInt { + // raw values map to objc_AssociationPolicy's raw values + case assign = 0 + case copy = 771 + case copyNonatomic = 3 + case retain = 769 + case retainNonatomic = 1 + + var objc: objc_AssociationPolicy { + return objc_AssociationPolicy(rawValue: rawValue)! + } +} + +protocol AssociatedObjects: AnyObject { } + +// transparent wrappers +extension AssociatedObjects { + /// wrapper around `objc_getAssociatedObject` + func ao_get(pkey: UnsafeRawPointer) -> Any? { + return objc_getAssociatedObject(self, pkey) + } + + /// wrapper around `objc_setAssociatedObject` + func ao_setOptional(_ value: Any?, pkey: UnsafeRawPointer, policy: AssociationPolicy = .retainNonatomic) { + guard let value = value else { return } + objc_setAssociatedObject(self, pkey, value, policy.objc) + } + + /// wrapper around `objc_setAssociatedObject` + func ao_set(_ value: Any, pkey: UnsafeRawPointer, policy: AssociationPolicy = .retainNonatomic) { + objc_setAssociatedObject(self, pkey, value, policy.objc) + } + + /// wrapper around 'objc_removeAssociatedObjects' + func ao_removeAll() { + objc_removeAssociatedObjects(self) + } +} + +extension NSObject: AssociatedObjects { } diff --git a/Source/RHButtonConfiguration.swift b/Source/RHButtonConfiguration.swift new file mode 100644 index 0000000..f5d47f0 --- /dev/null +++ b/Source/RHButtonConfiguration.swift @@ -0,0 +1,51 @@ +// +// RHButtonConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public enum RHButtonCornerType { + case capsule + case custom(radius: CGFloat) + case none +} + +public struct RHButtonConfiguration { + /// Button attributes + public var attributes: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 12), .foregroundColor: UIColor.white] + + /// Button color + public var color: UIColor = .red + + /// Button corner radius, default = 20 + public var cornerType: RHButtonCornerType = .custom(radius: 20) + + /// Button width, nil = auto + public var width: CGFloat? = nil + + /// Button height, default = 40 + public var height: CGFloat = 40 + + /// Button top constraint, default = 20 + public var topConstraint: CGFloat = 20 + + /// Button title inset, default = 8 + public var titleInset: CGFloat = 8 + + /// Button shadow radius, default = 0 + public var shadowRadius: CGFloat = 0 + + /// Button shadow opacity, defautl = 0.5 + public var shadowOpacity: Float = 0.5 + + /// Button border color, default = nil + public var borderColor: UIColor? = nil + + /// Button border width, default = 0 + public var borderWidth: CGFloat = 0 + + public init() {} +} diff --git a/Source/RHDefaultLoading.swift b/Source/RHDefaultLoading.swift new file mode 100644 index 0000000..72e9c18 --- /dev/null +++ b/Source/RHDefaultLoading.swift @@ -0,0 +1,63 @@ +// +// RHDefaultLoading.swift +// RHViewStateKit +// +// Created by Bagus andinata on 21/07/21. +// + +import UIKit +import SnapKit + +open class RHLoadingView: UIView { + /// Start loading animation + open func startAnimating() {} + + /// Stop loading animation + open func stopAnimating() {} + + /// Optional update UI loading animation + open func updateUI() {} +} + +class RHDefaultLoading: RHLoadingView { + private let indicator: UIActivityIndicatorView = { + let view = UIActivityIndicatorView(style: .gray) + return view + }() + + var color: UIColor = .gray { + didSet { + indicator.color = color + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + + backgroundColor = .clear + + addSubview(indicator) + updateUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Methods + + override func updateUI() { + indicator.snp.remakeConstraints { make in + make.width.height.equalTo(20) + make.center.equalTo(self) + } + } + + override func startAnimating() { + indicator.startAnimating() + } + + override func stopAnimating() { + indicator.stopAnimating() + } +} diff --git a/Source/RHDefaultViewState.swift b/Source/RHDefaultViewState.swift new file mode 100644 index 0000000..a48f12e --- /dev/null +++ b/Source/RHDefaultViewState.swift @@ -0,0 +1,518 @@ +// +// RHDefaultViewState.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit +import SnapKit + +class RHDefaultViewState: UIView { + // MARK: - PROPERTY + private let messageView: UIView = { + let view = UIView() + return view + }() + + private let coverImageView: UIImageView = { + let view = UIImageView() + view.contentMode = .scaleAspectFit + return view + }() + + private let imageView: UIImageView = { + let view = UIImageView() + view.contentMode = .scaleAspectFit + return view + }() + + private let titleLabel: UILabel = { + let view = UILabel() + view.textAlignment = .center + view.numberOfLines = 0 + return view + }() + + private let descriptionLabel: UILabel = { + let view = UILabel() + view.textAlignment = .center + view.numberOfLines = 0 + return view + }() + + private let primaryButton: UIButton = { + let view = UIButton() + view.addTarget(self, action: #selector(didTapPrimaryButton(_:)), for: .touchUpInside) + return view + }() + + private var gradientLayer: CAGradientLayer? + + private var DEFAULT_CONTENT = RHContent() + + private var DEFAULT_CONFIGURATION_VIEW = RHViewConfiguration() + + private var DEFAULT_CONFIGURATION_BUTTON = RHButtonConfiguration() + + private var DEFAULT_CONFIGURATION_TITLE = RHTitleConfiguration() + + private var DEFAULT_CONFIGURATION_DESCRIPTION = RHDescriptionConfiguration() + + private var DEFAULT_CONFIGURATION_IMAGE = RHImageConfiguration() + + private var DEFAULT_CONFIGURATION_POSITION = RHPositionConfiguration() + + private var loadingView: RHLoadingView { + return loadingConfiguration.view + } + + var loadingConfiguration = RHLoadingConfiguration() { + didSet { + configureUILoading() + } + } + + var actionButton: ((UIButton)->())? + + // MARK: - Initialization + + override init(frame: CGRect) { + super.init(frame: frame) + + addSubviews(with: [coverImageView, messageView]) + messageView.addSubviews(with: [imageView, titleLabel, descriptionLabel, primaryButton]) + + configureUILoading() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - METHODS + + /* + - content : Data source for content + - configView : Data source for view configuration + - configButton : Data source for button configuration + - configTitle : Data source for title configuration + - configDescription : Data source for description configuration + - configImage : Data source for image configuration + - configPosition : Data source for position configuration + */ + func configureDataSource(content: RHContent, + configView: RHViewConfiguration, + configButton: RHButtonConfiguration, + configTitle: RHTitleConfiguration, + configDescription: RHDescriptionConfiguration, + configImage: RHImageConfiguration, + configPosition: RHPositionConfiguration) { + self.DEFAULT_CONTENT = content + self.DEFAULT_CONFIGURATION_VIEW = configView + self.DEFAULT_CONFIGURATION_BUTTON = configButton + self.DEFAULT_CONFIGURATION_TITLE = configTitle + self.DEFAULT_CONFIGURATION_DESCRIPTION = configDescription + self.DEFAULT_CONFIGURATION_IMAGE = configImage + self.DEFAULT_CONFIGURATION_POSITION = configPosition + + updateContent() + updateUI() + } + + // Update Content + private func updateContent() { + updateContentImage() + updateContentTitle() + updateContentDescription() + updateContentButton() + } + + // Update UI + private func updateUI() { + // Message configuration + messageView.alpha = DEFAULT_CONFIGURATION_VIEW.alpha + + updateUIImage() + updateUIButton() + updateUIBackground() + configurePosition(viewPosition: DEFAULT_CONFIGURATION_POSITION.view, + imagePosition: DEFAULT_CONFIGURATION_POSITION.image, + messagePosition: DEFAULT_CONFIGURATION_POSITION.text) + } + + /// Make text alignment from message position + fileprivate func makeTextAlignment(with messagePosition: RHTextPosition) -> NSTextAlignment { + switch messagePosition { + case .left: + return .left + case .right: + return .right + case .justify: + return .justified + default: + return .center + } + } + + //MARK: - ACTION + + @objc + private func didTapPrimaryButton(_ sender: UIButton) { + actionButton?(sender) + } +} + +//MARK: - Update Content + +extension RHDefaultViewState { + /// Update content image + fileprivate func updateContentImage() { + switch DEFAULT_CONFIGURATION_POSITION.image { + case .cover(_, _): + coverImageView.image = nil + coverImageView.image = DEFAULT_CONTENT.image + imageView.image = nil + imageView.isHidden = true + default: + coverImageView.image = nil + imageView.image = nil + imageView.image = DEFAULT_CONTENT.image + imageView.isHidden = false + } + } + + /// Update content title + fileprivate func updateContentTitle() { + if let title = DEFAULT_CONTENT.title { + titleLabel.isHidden = false + titleLabel.attributedText = NSAttributedString(string: title, attributes: DEFAULT_CONFIGURATION_TITLE.attributes) + } else { + titleLabel.isHidden = true + } + } + + /// Update content description + fileprivate func updateContentDescription() { + if let description = DEFAULT_CONTENT.description { + descriptionLabel.isHidden = false + descriptionLabel.attributedText = NSAttributedString(string: description, attributes: DEFAULT_CONFIGURATION_DESCRIPTION.attributes) + } else { + descriptionLabel.isHidden = true + } + } + + /// Update content primary button + fileprivate func updateContentButton() { + if let titleButton = DEFAULT_CONTENT.titleButton, + !titleButton.isEmpty { + primaryButton.isHidden = false + primaryButton.setAttributedTitle(NSAttributedString(string: titleButton, attributes: DEFAULT_CONFIGURATION_BUTTON.attributes), for: .normal) + } else { + primaryButton.isHidden = true + } + } +} + +//MARK: - Update UI + +extension RHDefaultViewState { + /// Update UI image + fileprivate func updateUIImage() { + if let imageTintColor = DEFAULT_CONFIGURATION_IMAGE.tintColor { + imageView.tintColor = imageTintColor + coverImageView.tintColor = imageTintColor + } else { + imageView.tintColor = .systemBlue + coverImageView.tintColor = .systemBlue + } + } + + /// Update UI button + fileprivate func updateUIButton() { + primaryButton.backgroundColor = DEFAULT_CONFIGURATION_BUTTON.color + primaryButton.layer.shadowColor = DEFAULT_CONFIGURATION_BUTTON.color.cgColor + primaryButton.layer.shadowOffset = CGSize(width: 0.0, height: 0) + primaryButton.layer.masksToBounds = false + primaryButton.layer.shadowRadius = DEFAULT_CONFIGURATION_BUTTON.shadowRadius + primaryButton.layer.shadowOpacity = DEFAULT_CONFIGURATION_BUTTON.shadowOpacity + primaryButton.layer.borderWidth = DEFAULT_CONFIGURATION_BUTTON.borderWidth + primaryButton.layer.borderColor = DEFAULT_CONFIGURATION_BUTTON.borderColor?.cgColor + + switch DEFAULT_CONFIGURATION_BUTTON.cornerType { + case .capsule: + primaryButton.layer.cornerRadius = DEFAULT_CONFIGURATION_BUTTON.height*0.5 + case .custom(let radius): + primaryButton.layer.cornerRadius = radius + case .none: + primaryButton.layer.cornerRadius = 0 + } + } + + /// Update UI background + fileprivate func updateUIBackground() { + // Background gradient configuration + if let gradientColor = DEFAULT_CONFIGURATION_VIEW.gradientColor { + gradientLayer?.removeFromSuperlayer() + gradientLayer = CAGradientLayer() + gradientLayer?.colors = [gradientColor.0.cgColor, gradientColor.1.cgColor] + gradientLayer?.startPoint = CGPoint(x: 0.5, y: 1.0) + gradientLayer?.endPoint = CGPoint(x: 0.5, y: 0.0) + gradientLayer?.locations = [0, 1] + gradientLayer?.frame = bounds + layer.insertSublayer(gradientLayer!, at: 0) + } else { + gradientLayer?.removeFromSuperlayer() + // Background configuration + backgroundColor = DEFAULT_CONFIGURATION_VIEW.backgroundColor + } + } + + /// Update UI background loading + fileprivate func updateUIBackgroundLoading() { + gradientLayer?.removeFromSuperlayer() + backgroundColor = loadingConfiguration.backgroundColor + } + + /// Update UI loading + fileprivate func configureUILoading() { + loadingView.removeFromSuperview() + loadingView.isHidden = true + addSubview(loadingView) + + loadingView.snp.makeConstraints { make in + make.center.equalTo(self) + make.size.equalTo(loadingConfiguration.size) + } + + loadingView.updateUI() + guard let loadingView = loadingView as? RHDefaultLoading else { return } + loadingView.color = loadingConfiguration.color + } +} + +//MARK: - Configure Constraint + +extension RHDefaultViewState { + fileprivate func configurePosition(viewPosition: RHViewPosition, imagePosition: RHImagePosition, messagePosition: RHTextPosition) { + configureView(in: viewPosition) + + switch imagePosition { + case .top: + topImage(in: messagePosition) + case .bottom: + bottomImage(in: messagePosition) + case .cover(let topConstraint, let bottomConstraint): + coverImage(in: messagePosition, topConstraint: topConstraint, bottomConstraint: bottomConstraint) + } + } + + //MARK: Configure View Position + + private func configureView(in position: RHViewPosition) { + messageView.snp.remakeConstraints { make in + make.leading.equalTo(self).offset(DEFAULT_CONFIGURATION_VIEW.horizontalConstraint) + make.trailing.equalTo(self).offset(-DEFAULT_CONFIGURATION_VIEW.horizontalConstraint) + switch position { + case .top: + make.top.equalTo(self).offset(DEFAULT_CONFIGURATION_VIEW.verticalConstraint) + case .center: + make.centerY.equalTo(self) + case .bottom: + make.bottom.equalTo(self).offset(-DEFAULT_CONFIGURATION_VIEW.verticalConstraint) + } + } + } + + //MARK: Configure Image Position + + private func topImage(in position: RHTextPosition) { + coverImageView.snp.removeConstraints() + + imageView.snp.remakeConstraints { make in + make.top.equalTo(messageView) + make.size.equalTo(DEFAULT_CONFIGURATION_IMAGE.size) + make.centerX.equalTo(messageView) + } + + titleLabel.textAlignment = makeTextAlignment(with: position) + titleLabel.snp.remakeConstraints { make in + make.top.equalTo(imageView.snp.bottom).offset(DEFAULT_CONFIGURATION_TITLE.topConstraint) + make.trailing.leading.equalTo(messageView) + } + + descriptionLabel.textAlignment = makeTextAlignment(with: position) + descriptionLabel.snp.remakeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_DESCRIPTION.topConstraint) + make.trailing.leading.equalTo(messageView) + } + + primaryButton.snp.remakeConstraints { make in + make.top.equalTo(descriptionLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_BUTTON.topConstraint) + configureButton(in: position, withConstraintMaker: make) + } + } + + private func bottomImage(in position: RHTextPosition) { + coverImageView.snp.removeConstraints() + + titleLabel.textAlignment = makeTextAlignment(with: position) + titleLabel.snp.remakeConstraints { make in + make.top.trailing.leading.equalTo(messageView) + } + + descriptionLabel.textAlignment = makeTextAlignment(with: position) + descriptionLabel.snp.remakeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_DESCRIPTION.topConstraint) + make.trailing.leading.equalTo(messageView) + } + + imageView.snp.remakeConstraints { make in + make.top.equalTo(descriptionLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_IMAGE.topConstraint) + make.size.equalTo(DEFAULT_CONFIGURATION_IMAGE.size) + make.centerX.equalTo(messageView) + } + + primaryButton.snp.remakeConstraints { make in + make.top.equalTo(imageView.snp.bottom).offset(DEFAULT_CONFIGURATION_BUTTON.topConstraint) + configureButton(in: position, withConstraintMaker: make) + } + } + + private func coverImage(in position: RHTextPosition, topConstraint: TopConstraint, bottomConstraint: BottomConstraint) { + imageView.snp.removeConstraints() + + coverImageView.snp.remakeConstraints { make in + make.top.equalTo(self).offset(topConstraint) + make.bottom.equalTo(self).offset(-bottomConstraint) + make.trailing.leading.equalTo(self) + } + + titleLabel.textAlignment = makeTextAlignment(with: position) + titleLabel.snp.remakeConstraints { make in + make.top.trailing.leading.equalTo(messageView) + } + + descriptionLabel.textAlignment = makeTextAlignment(with: position) + descriptionLabel.snp.remakeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_DESCRIPTION.topConstraint) + make.trailing.leading.equalTo(messageView) + } + + primaryButton.snp.remakeConstraints { make in + make.top.equalTo(descriptionLabel.snp.bottom).offset(DEFAULT_CONFIGURATION_BUTTON.topConstraint) + configureButton(in: position, withConstraintMaker: make) + } + } + + // MARK: Configure Button Position + + private func configureButton(in position: RHTextPosition, withConstraintMaker make: ConstraintMaker) { + make.bottom.equalTo(messageView).offset(0) + make.height.equalTo(DEFAULT_CONFIGURATION_BUTTON.height) + + switch position { + case .center, .justify: + make.centerX.equalTo(messageView) + case .left: + make.leading.equalTo(messageView) + make.trailing.lessThanOrEqualTo(messageView) + case .right: + make.leading.greaterThanOrEqualTo(messageView) + make.trailing.equalTo(messageView) + } + + if let width = DEFAULT_CONFIGURATION_BUTTON.width { + make.width.equalTo(width) + } else { + guard let titleWidth = primaryButton.titleLabel?.textWidth else { return } + + let insetTitle = DEFAULT_CONFIGURATION_BUTTON.titleInset*2 + let targetWidth = titleWidth + insetTitle + + make.width.equalTo(targetWidth) + } + } +} + +// MARK: - Animations + +extension RHDefaultViewState { + // Fade animation + func fade(_ duration1: TimeInterval, _ duration2: TimeInterval) { + + coverImageView.alpha = 0 + imageView.alpha = 0 + titleLabel.alpha = 0 + descriptionLabel.alpha = 0 + primaryButton.alpha = 0 + + UIView.animate(withDuration: duration1, animations: { [weak self] in + self?.titleLabel.alpha = 1 + self?.descriptionLabel.alpha = 1 + self?.primaryButton.alpha = 1 + }) { [weak self](completed) in + UIView.animate(withDuration: duration2, animations: { [weak self] in + self?.coverImageView.alpha = 1 + self?.imageView.alpha = 1 + }, completion: nil) + } + } + + // Scale animation + func scale(_ duration1: TimeInterval, _ duration2: TimeInterval) { + + coverImageView.transform = CGAffineTransform(scaleX: 0, y: 0) + imageView.transform = CGAffineTransform(scaleX: 0, y: 0) + titleLabel.alpha = 0 + descriptionLabel.alpha = 0 + primaryButton.alpha = 0 + + UIView.animate(withDuration: duration1, animations: { [weak self] in + self?.titleLabel.alpha = 1 + self?.descriptionLabel.alpha = 1 + self?.primaryButton.alpha = 1 + }) { [weak self](completed) in + UIView.animate(withDuration: duration2, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.8, options: .curveEaseInOut, animations: { [weak self] in + self?.coverImageView.transform = .identity + self?.imageView.transform = .identity + }, completion: nil) + } + } +} + +extension RHDefaultViewState { + /// Play image animation + func play() { + DEFAULT_CONFIGURATION_IMAGE.animation?.play?(self) + } + + /// Show loading + func showLoader() { + coverImageView.isHidden = true + messageView.isHidden = true + loadingView.isHidden = false + loadingView.startAnimating() + updateUIBackgroundLoading() + } + + /// Hide loading + func hideLoader() { + coverImageView.isHidden = false + messageView.isHidden = false + loadingView.isHidden = true + loadingView.stopAnimating() + updateUIBackground() + } +} + +// MARK: - Model Content + +extension RHDefaultViewState { + struct RHContent { + var image: UIImage? + var title: String? + var description: String? + var titleButton: String? + } +} diff --git a/Source/RHDescriptionConfiguration.swift b/Source/RHDescriptionConfiguration.swift new file mode 100644 index 0000000..0f3221c --- /dev/null +++ b/Source/RHDescriptionConfiguration.swift @@ -0,0 +1,18 @@ +// +// RHDescriptionConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public struct RHDescriptionConfiguration { + /// Title attributes + public var attributes: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 16), .foregroundColor: UIColor.darkGray] + + /// Description top constraint , default = 26 + public var topConstraint: CGFloat = 10 + + public init() {} +} diff --git a/Source/RHImageConfiguration.swift b/Source/RHImageConfiguration.swift new file mode 100644 index 0000000..849557d --- /dev/null +++ b/Source/RHImageConfiguration.swift @@ -0,0 +1,24 @@ +// +// RHImageConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public struct RHImageConfiguration { + /// Image Animation + public var animation: RHViewStateAnimation? = .scale(0.3, 0.3) + + /// Image tint color + public var tintColor: UIColor? = nil + + /// Image top constraint, default = 16 + public var topConstraint: CGFloat = 16 + + /// Image size, default CGSize(width: 200, height: 200) + public var size: CGSize = CGSize(width: 200, height: 200) + + public init() {} +} diff --git a/Source/RHLoadingConfiguration.swift b/Source/RHLoadingConfiguration.swift new file mode 100644 index 0000000..17e5042 --- /dev/null +++ b/Source/RHLoadingConfiguration.swift @@ -0,0 +1,24 @@ +// +// RHLoadingConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public struct RHLoadingConfiguration { + /// Title attributes + public var view: RHLoadingView = RHDefaultLoading() + + /// Size loading, default = 50 + public var size: CGSize = CGSize(width: 20, height: 20) + + /// Background loading, default = white + public var backgroundColor: UIColor = .white + + /// Indicator color default, default = gray + public var color: UIColor = .gray + + public init() {} +} diff --git a/Source/RHPositionConfiguration.swift b/Source/RHPositionConfiguration.swift new file mode 100644 index 0000000..2081649 --- /dev/null +++ b/Source/RHPositionConfiguration.swift @@ -0,0 +1,42 @@ +// +// RHPositionConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public typealias TopConstraint = CGFloat +public typealias BottomConstraint = CGFloat + +public struct RHPositionConfiguration { + var view: RHViewPosition = .center + var text: RHTextPosition = .center + var image: RHImagePosition = .top + + public init(view: RHViewPosition? = nil, text: RHTextPosition? = nil, image: RHImagePosition? = nil) { + self.view = view ?? .center + self.text = text ?? .center + self.image = image ?? .top + } +} + +public enum RHViewPosition { + case top + case center + case bottom +} + +public enum RHTextPosition { + case left + case center + case right + case justify +} + +public enum RHImagePosition { + case top + case bottom + case cover(TopConstraint, BottomConstraint) +} diff --git a/Source/RHTitleConfiguration.swift b/Source/RHTitleConfiguration.swift new file mode 100644 index 0000000..82a1475 --- /dev/null +++ b/Source/RHTitleConfiguration.swift @@ -0,0 +1,18 @@ +// +// RHTitleConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public struct RHTitleConfiguration { + /// Title attributes + public var attributes: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 24), .foregroundColor: UIColor.darkGray] + + /// Title top constraint when image in top, default = 26 + public var topConstraint: CGFloat = 26 + + public init() {} +} diff --git a/Source/RHViewCollectionState.swift b/Source/RHViewCollectionState.swift new file mode 100644 index 0000000..5448352 --- /dev/null +++ b/Source/RHViewCollectionState.swift @@ -0,0 +1,67 @@ +// +// RHViewCollectionState.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +// copy from https://github.com/alberdev/EmptyStateKit, partially edited + +import UIKit + +public protocol RHViewCollectionState { + var image: UIImage? { get } + var title: String? { get } + var description: String? { get } + var titleButton: String? { get } + var viewConfiguration: RHViewConfiguration { get } + var buttonConfiguration: RHButtonConfiguration { get } + var titleConfiguration: RHTitleConfiguration { get } + var descriptionConfiguration: RHDescriptionConfiguration { get } + var imageConfiguration: RHImageConfiguration { get } + var positionConfiguration: RHPositionConfiguration { get } +} + +public extension RHViewCollectionState { + + var image: UIImage? { + get { return nil } + } + + var title: String? { + get { return nil } + } + + var description: String? { + get { return nil } + } + + var titleButton: String? { + get { return nil } + } + + var viewConfiguration: RHViewConfiguration { + get { return RHViewConfiguration() } + } + + var buttonConfiguration: RHButtonConfiguration { + get { return RHButtonConfiguration() } + } + + var titleConfiguration: RHTitleConfiguration { + get { return RHTitleConfiguration() } + } + + var descriptionConfiguration: RHDescriptionConfiguration { + get { return RHDescriptionConfiguration() } + } + + var imageConfiguration: RHImageConfiguration { + get { return RHImageConfiguration() } + } + + var positionConfiguration: RHPositionConfiguration { + get { return RHPositionConfiguration() } + } + +} diff --git a/Source/RHViewConfiguration.swift b/Source/RHViewConfiguration.swift new file mode 100644 index 0000000..51caa4c --- /dev/null +++ b/Source/RHViewConfiguration.swift @@ -0,0 +1,27 @@ +// +// RHViewConfiguration.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +public struct RHViewConfiguration { + /// Alpha container + public var alpha: CGFloat = 1.0 + + /// Background color + public var backgroundColor: UIColor = .white + + /// Background Gradient color + public var gradientColor: (UIColor, UIColor)? = nil + + /// Top or bottom Constraint + public var verticalConstraint: CGFloat = 40 + + /// Left & right Constraint + public var horizontalConstraint: CGFloat = 40 + + public init() {} +} diff --git a/Source/RHViewState+DataSource.swift b/Source/RHViewState+DataSource.swift new file mode 100644 index 0000000..2af747c --- /dev/null +++ b/Source/RHViewState+DataSource.swift @@ -0,0 +1,82 @@ +// +// RHViewState+DataSource.swift +// RHViewStateKit +// +// Created by Bagus andinata on 24/07/21. +// + +import Foundation + +public protocol RHViewStateDataSource: AnyObject { + /// Data source for content image + func imageForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> UIImage? + + /// Data source for content title + func titleForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? + + /// Data source for content description + func descriptionForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? + + /// Data source for content title + func titleButtonForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? + + /// Data source for view configuration + func rhViewConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHViewConfiguration + + /// Data source for button configuration + func rhButtonConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHButtonConfiguration + + /// Data source for title configuration + func rhTitleConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHTitleConfiguration + + /// Data source for description configuration + func rhDescriptionConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHDescriptionConfiguration + + /// Data source for image configuration + func rhImageConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHImageConfiguration + + /// Data source for position configuration + func rhPositionConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHPositionConfiguration +} + +public extension RHViewStateDataSource { + func imageForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> UIImage? { + return nil + } + + func titleForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + return nil + } + + func descriptionForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + return nil + } + + func titleButtonForState(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> String? { + return nil + } + + func rhViewConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHViewConfiguration { + return RHViewConfiguration() + } + + func rhButtonConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHButtonConfiguration { + return RHButtonConfiguration() + } + + func rhTitleConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHTitleConfiguration { + return RHTitleConfiguration() + } + + func rhDescriptionConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHDescriptionConfiguration { + return RHDescriptionConfiguration() + } + + func rhImageConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHImageConfiguration { + return RHImageConfiguration() + } + + func rhPositionConfiguration(_ state: RHViewCollectionState, inViewState viewState: RHViewState) -> RHPositionConfiguration { + return RHPositionConfiguration(view: .center, text: .center, image: .top) + } +} diff --git a/Source/RHViewState+Delegate.swift b/Source/RHViewState+Delegate.swift new file mode 100644 index 0000000..efc50f7 --- /dev/null +++ b/Source/RHViewState+Delegate.swift @@ -0,0 +1,13 @@ +// +// RHViewState+DataSource.swift +// RHViewStateKit +// +// Created by Bagus andinata on 24/07/21. +// + +import Foundation + +public protocol RHViewStateDelegate: AnyObject { + /// Delegate tap button + func viewState(_ viewState: RHViewState, didTapButton button: UIButton) +} diff --git a/Source/RHViewState.swift b/Source/RHViewState.swift new file mode 100644 index 0000000..68f8cc0 --- /dev/null +++ b/Source/RHViewState.swift @@ -0,0 +1,133 @@ +// +// RHViewState.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +// copy from https://github.com/alberdev/EmptyStateKit, partially edited and added + +import UIKit + +public class RHViewState { + + public weak var delegate: RHViewStateDelegate? + public weak var dataSource: RHViewStateDataSource? + + private var defaultViewState: RHDefaultViewState! + + /// Show or hide view + private var hidden = true { + didSet { + defaultViewState?.isHidden = hidden + } + } + + /// State mode + private var state: RHViewCollectionState? { + didSet { + guard let state = state else { return } + + if let dataSource = dataSource { + let content = RHDefaultViewState.RHContent( + image: dataSource.imageForState(state, inViewState: self), + title: dataSource.titleForState(state, inViewState: self), + description: dataSource.descriptionForState(state, inViewState: self), + titleButton: dataSource.titleButtonForState(state, inViewState: self)) + + defaultViewState.configureDataSource(content: content, + configView: dataSource.rhViewConfiguration(state, inViewState: self), + configButton: dataSource.rhButtonConfiguration(state, inViewState: self), + configTitle: dataSource.rhTitleConfiguration(state, inViewState: self), + configDescription: dataSource.rhDescriptionConfiguration(state, inViewState: self), + configImage: dataSource.rhImageConfiguration(state, inViewState: self), + configPosition: dataSource.rhPositionConfiguration(state, inViewState: self)) + } else { + let content = RHDefaultViewState.RHContent(image: state.image, title: state.title, description: state.description, titleButton: state.titleButton) + + defaultViewState.configureDataSource(content: content, + configView: state.viewConfiguration, + configButton: state.buttonConfiguration, + configTitle: state.titleConfiguration, + configDescription: state.descriptionConfiguration, + configImage: state.imageConfiguration, + configPosition: state.positionConfiguration) + } + } + } + + /// Loading configuration + public var loading = RHLoadingConfiguration() { + didSet { + defaultViewState.loadingConfiguration = loading + } + } + + init(inView view: UIView?) { + + // Create empty state view + defaultViewState = RHDefaultViewState() + defaultViewState.isHidden = true + defaultViewState.actionButton = { [weak self] (button) in + self?.didTapButton(button) + } + + // Add it to your view + if let view = view as? UIScrollView { + configureViewStateConstraint(with: view.superview) + } else { + configureViewStateConstraint(with: view) + } + } + + deinit { + delegate = nil + dataSource = nil + defaultViewState = nil + state = nil + } +} + +extension RHViewState { + /// Show view state + public func show(_ state: RHViewCollectionState? = nil) { + self.state = state + hidden = false + defaultViewState.play() + } + + public func hide() { + hidden = true + } + + /// Show loading in viewstate + public func showLoader() { + defaultViewState.showLoader() + hidden = false + } + + /// Hide loading in viewstate + public func hideLoader() { + defaultViewState.hideLoader() + hidden = true + } +} + +extension RHViewState { + /// Handle tap button + private func didTapButton(_ button: UIButton) { + delegate?.viewState(self, didTapButton: button) + } +} + +extension RHViewState { + fileprivate func configureViewStateConstraint(with containerView: UIView!) { + defaultViewState.frame = containerView.frame + + containerView.addSubview(defaultViewState) + + defaultViewState.snp.makeConstraints { make in + make.edges.equalTo(containerView) + } + } +} diff --git a/Source/RHViewStateAnimation.swift b/Source/RHViewStateAnimation.swift new file mode 100644 index 0000000..2dee273 --- /dev/null +++ b/Source/RHViewStateAnimation.swift @@ -0,0 +1,30 @@ +// +// RHViewStateAnimation.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +// copy from https://github.com/alberdev/EmptyStateKit + +import UIKit + +public typealias FadeTimeInterval = TimeInterval +public typealias ScaleTimeInterval = TimeInterval + +public enum RHViewStateAnimation { + + case fade(FadeTimeInterval, FadeTimeInterval) + case scale(ScaleTimeInterval, ScaleTimeInterval) + case noAnimation + + var play: ((RHDefaultViewState) -> ())? { + switch self { + case .fade(let duration1, let duration2): + return { $0.fade(duration1, duration2) } + case .scale(let duration1, let duration2): + return { $0.scale(duration1, duration2) } + case .noAnimation: return nil + } + } +} diff --git a/Source/UILabel+TextWidth.swift b/Source/UILabel+TextWidth.swift new file mode 100644 index 0000000..adf7181 --- /dev/null +++ b/Source/UILabel+TextWidth.swift @@ -0,0 +1,19 @@ +// +// UILabel+TextWidth.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import Foundation + +public extension UILabel { + var textWidth: CGFloat? { + guard let myText = self.text else { return nil } + guard let myFont = self.font else { return nil } + + let rect = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude) + let labelSize = myText.boundingRect(with: rect, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: myFont], context: nil) + return ceil(labelSize.width) + } +} diff --git a/Source/UIView.swift b/Source/UIView.swift new file mode 100644 index 0000000..05350f7 --- /dev/null +++ b/Source/UIView.swift @@ -0,0 +1,30 @@ +// +// UIView.swift +// Pods-RHViewStateKit_Example +// +// Created by Bagus andinata on 18/07/21. +// + +import UIKit + +private var viewStatekey = "viewState" + +public extension UIView { + var viewState: RHViewState! { + get { + guard let saved = ao_get(pkey: &viewStatekey) as? RHViewState else { + self.viewState = RHViewState(inView: self) + return self.viewState + } + return saved + } + set { ao_set(newValue ?? RHViewState(inView: self), pkey: &viewStatekey) } + } + + func addSubviews(with views: [UIView]) { + views.forEach { view in + addSubview(view) + } + } +} + diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj new file mode 120000 index 0000000..3c5a8e7 --- /dev/null +++ b/_Pods.xcodeproj @@ -0,0 +1 @@ +Example/Pods/Pods.xcodeproj \ No newline at end of file