+
+@end
+ ```
+
+
+ ```Objective-C
+ //AppDelegate.m
+- (void)tabBarController:(UITabBarController *)tabBarController didSelectControl:(UIControl *)control {
+ UIView *animationView;
+ // 如果 PlusButton 也添加了点击事件,那么点击 PlusButton 后不会触发该代理方法。
+ if ([control isKindOfClass:[CYLExternPlusButton class]]) {
+ UIButton *button = CYLExternPlusButton;
+ animationView = button.imageView;
+ } else if ([control isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
+ for (UIView *subView in control.subviews) {
+ if ([subView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
+ animationView = subView;
+ }
+ }
+ }
+
+ if ([self cyl_tabBarController].selectedIndex % 2 == 0) {
+ [self addScaleAnimationOnView:animationView];
+ } else {
+ [self addRotateAnimationOnView:animationView];
+ }
+}
+
+//缩放动画
+- (void)addScaleAnimationOnView:(UIView *)animationView {
+ //需要实现的帧动画,这里根据需求自定义
+ CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
+ animation.keyPath = @"transform.scale";
+ animation.values = @[@1.0,@1.3,@0.9,@1.15,@0.95,@1.02,@1.0];
+ animation.duration = 1;
+ animation.calculationMode = kCAAnimationCubic;
+ [animationView.layer addAnimation:animation forKey:nil];
+}
+
+//旋转动画
+- (void)addRotateAnimationOnView:(UIView *)animationView {
+ [UIView animateWithDuration:0.32 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
+ animationView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
+ } completion:nil];
+
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ [UIView animateWithDuration:0.70 delay:0 usingSpringWithDamping:1 initialSpringVelocity:0.2 options:UIViewAnimationOptionCurveEaseOut animations:^{
+ animationView.layer.transform = CATransform3DMakeRotation(2 * M_PI, 0, 1, 0);
+ } completion:nil];
+ });
+}
+ ```
+
+### 横竖屏适配
+
+`TabBar` 横竖屏适配时,如果你添加了 `PlusButton`,且适配时用到了 `TabBarItem` 的宽度, 不建议使用系统的`UIDeviceOrientationDidChangeNotification` , 请使用库里的 `CYLTabBarItemWidthDidChangeNotification` 来更新 `TabBar` 布局,最典型的场景就是,根据 `TabBarItem` 在不同横竖屏状态下的宽度变化来切换选中的`TabBarItem` 的背景图片。Demo 里 `CYLTabBarControllerConfig.m` 给出了这一场景的用法:
+
+
+ `CYLTabBarController.h` 中提供了 `CYLTabBarItemWidth` 这一extern常量,并且会在 `TabBarItem` 的宽度发生变化时,及时更新该值,所以用法就如下所示:
+
+ ```Objective-C
+- (void)updateTabBarCustomizationWhenTabBarItemWidthDidUpdate {
+ void (^deviceOrientationDidChangeBlock)(NSNotification *) = ^(NSNotification *notification) {
+ [self tabBarItemWidthDidUpdate];
+};
+ [[NSNotificationCenter defaultCenter] addObserverForName:CYLTabBarItemWidthDidChangeNotification
+ object:nil
+ queue:[NSOperationQueue mainQueue]
+ usingBlock:deviceOrientationDidChangeBlock];
+}
+
+- (void)tabBarItemWidthDidUpdate {
+ UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
+ if ((orientation == UIDeviceOrientationLandscapeLeft) || (orientation == UIDeviceOrientationLandscapeRight)) {
+ NSLog(@"Landscape Left or Right !");
+ } else if (orientation == UIDeviceOrientationPortrait){
+ NSLog(@"Landscape portrait!");
+ }
+ CGSize selectionIndicatorImageSize = CGSizeMake(CYLTabBarItemWidth, [self cyl_tabBarController].tabBar.bounds.size.height);
+ [[self cyl_tabBarController].tabBar setSelectionIndicatorImage:[[self class]
+ imageFromColor:[UIColor yellowColor]
+ forSize:selectionIndicatorImageSize
+ withCornerRadius:0]];
+}
+ ```
+
+
+
+### 访问初始化好的 CYLTabBarController 对象
+
+对于任意 `NSObject` 对象:
+
+ `CYLTabBarController.h` 中为 `NSObject` 提供了分类方法 `-cyl_tabBarController` ,所以在任意对象中,一行代码就可以访问到一个初始化好的 `CYLTabBarController` 对象,`-cyl_tabBarController` 的作用你可以这样理解:与获取单例对象的 `+shareInstance` 方法作用一样。
+
+接口如下:
+
+ ```Objective-C
+// CYLTabBarController.h
+
+@interface NSObject (CYLTabBarController)
+
+/**
+ * If `self` is kind of `UIViewController`, this method will return the nearest ancestor in the view controller hierarchy that is a tab bar controller. If `self` is not kind of `UIViewController`, it will return the `rootViewController` of the `rootWindow` as long as you have set the `CYLTabBarController` as the `rootViewController`. Otherwise return nil. (read-only)
+ */
+@property (nonatomic, readonly) CYLTabBarController *cyl_tabBarController;
+
+@end
+ ```
+
+用法:
+
+
+ ```Objective-C
+//导入 CYLTabBarController.h
+#import "CYLTabBarController.h"
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ CYLTabBarController *tabbarController = [self cyl_tabBarController];
+ /*...*/
+}
+ ```
+
+### 点击 PlusButton 跳转到指定 UIViewController
+
+提供了一个协议方法来完成本功能:
+
+
+
+实现该方法后,能让 PlusButton 的点击效果与跟点击其他 TabBar 按钮效果一样,跳转到该方法指定的 UIViewController 。
+
+注意:必须同时实现 `+indexOfPlusButtonInTabBar` 来指定 PlusButton 的位置。
+
+遵循几个协议:
+
+
+
+
+另外你可以通过下面这个方法获取到 `PlusButton` 的点击事件:
+
+```Objective-C
++ (BOOL)shouldSelectPlusChildViewController;
+```
+
+用法如下:
+
+
+```Objective-C
++ (BOOL)shouldSelectPlusChildViewController {
+ BOOL isSelected = CYLExternPlusButton.selected;
+ if (isSelected) {
+ NSLog(@"🔴类名与方法名:%@(在第%@行),描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), @"PlusButton is selected");
+ } else {
+ NSLog(@"🔴类名与方法名:%@(在第%@行),描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), @"PlusButton is not selected");
+ }
+ return YES;
+}
+
+```
+
+### 让TabBarItem仅显示图标,并使图标垂直居中
+
+要想实现该效果,只需要在设置 `tabBarItemsAttributes`该属性时不传 title 即可。
+
+比如:在Demo的基础上,注释掉图中红框部分:
+
+
+注释前 | 注释后
+-------------|-------------
+|
+
+可以通过这种方式来达到 Airbnb-app 的效果:
+
+
+
+如果想手动设置偏移量来达到该效果:
+可以在 `-setViewControllers:` 方法前设置 `CYLTabBarController` 的 `imageInsets` 和 `titlePositionAdjustment` 属性
+
+这里注意:设置这两个属性后,`TabBar` 中所有的 `TabBarItem` 都将被设置。并且第一种做法的逻辑将不会执行,也就是说该做法优先级要高于第一种做法。
+
+做法如下:
+
+
+但是想达到Airbnb-app的效果只有这个接口是不行的,还需要自定义下 `TabBar` 的高度,你需要设置 `CYLTabBarController` 的 `tabBarHeight` 属性。你可以在Demo的 `CYLTabBarControllerConfig.m` 中的 `-customizeTabBarAppearance:` 方法中设置。
+
+注:“仅显示图标,并使图标垂直居中”这里所指的“图标”,其所属的类是私有类: `UITabBarSwappableImageView`,所以 `CYLTabBarController` 在相关的接口命名时会包含 `SwappableImageView` 字样。另外,使用该特性需要 `pod update` 到 1.5.5以上的版本。
+
+
+### 多TabBar嵌套,并指定PlusButton位置
+
+该功能旧版本可能并不支持,建议更新最新版中使用。
+
+效果图:
+
+ 
+
+
+实现 PlusButton 的如下协议方法指定 context:
+
+ ```Objective-C
+//CYLPlusButtonSubclassing
++ (NSString *)tabBarContext;
+
+ ```
+
+当该值与 TabBarController 的 context 能够匹配上,PlusButton 将会展示。如果 PlusButton 与 TabBarController 均未制定 context 值,那么默认 context 值是相等的。
+
+目前仅支持一个 PlusButton 展示一次,不限层级。如果与多个 TabBarController 的 context 能够匹配上,仅展示在最先一次的匹配上的 TabBarController 上。
+
+
+
+### 在 Swift 项目中使用 CYLTabBarController
+
+仓库中给出了一个Swift Demo,文件夹叫做 Example-Swift。
+
+感谢[@WeMadeCode](https://github.com/WeMadeCode) 提供的 Swift 版 Demo,原仓库地址:[WeMadeCode/CYLTabBarController-Swift](https://github.com/WeMadeCode/CYLTabBarController-Swift)
+
+具体的编写步骤参考热心网友提供的教程: [《从头开始swift2.1 仿搜材通项目(三) 主流框架Tabbed的搭建》]( http://www.jianshu.com/p/c5bc2eae0f55?nomobile=yes )
+
+这里注意,文章的早期一个版本的示例代码有问题(笔者注:现在已经更新了),少了设置 PlusButton 大小的代码:
+这将导致 PlusButton 点击事件失效,具体修改代码如下:
+
+
+### 搭配 Storyboard 使用 CYLTabBarController
+
+参考:
+
+ - 见这里 [issue讨论]( https://github.com/ChenYilong/CYLTabBarController/issues/170 )
+ - [这里](https://github.com/ChenYilong/CYLDeallocBlockExecutor) ,里面有个文件夹CYLTabBarControllerTestDemo,这个Demo演示了如何搭配 Storyboard 使用。
+
+### 源码实现原理
+
+参考: [《[Note] CYLTabBarController》]( http://www.jianshu.com/p/8758d8014f86 )
+
+更多文档信息可查看 [ ***CocoaDocs:CYLTabBarController*** ](http://cocoadocs.org/docsets/CYLTabBarController/1.2.1/index.html) 。
+
+## FAQ
+
+
+更多Q-A内容,可以在这里查看: [issue-FAQ](https://github.com/ChenYilong/CYLTabBarController/issues?utf8=✓&q=+label%3AQ-A+)
+Q:为什么放置6个TabBarItem会显示异常?
+
+A:
+
+Apple 规定:
+
+ > 一个 `TabBar` 上只能出现最多5个 `TabBarItem` ,第六个及更多的将不被显示。
+
+
+另外注意,Apple检测的是 `UITabBarItem` 及其子类,所以放置“加号按钮”,这是 `UIButton` 不在“5个”里面。
+
+最多只能添加5个 `TabBarItem` ,也就是说加上“加号按钮”,一共最多在一个 `TabBar` 上放置6个控件。否则第6个及之后出现 `TabBarItem` 会被自动屏蔽掉。而且就Apple的审核机制来说,超过5个也会被直接拒绝上架。
+
+Q:我把 demo 两侧的 item 各去掉一个后,按钮的响应区域就变成下图的样子了:
+ 
+
+ A:v1.5.5 版本已经修复了该问题,现在不会出现类似的问题了:点击按钮区域却不响应,响应区域有偏移。
+
+Q: 如何实现添加选中背景色的功能 ,像下面这样:
+
+
+A:我已经在 Demo 中添加了如何实现该功能的代码:
+详情见 `CYLTabBarControllerConfig` 类中下面方法的实现:
+
+ ```Objective-C
+/**
+ * 更多TabBar自定义设置:比如:tabBarItem 的选中和不选中文字和背景图片属性、tabbar 背景图片属性
+ */
+- (void)customizeTabBarAppearance:(CYLTabBarController *)tabBarController;
+
+ ```
+
+效果如下:
+
+
+
+Q: 当 `ViewController` 设置的 `self.title` 和 `tabBarItemsAttributes` 中对应的 `title` 不一致的时候,会出现如图的错误,排序不对了
+
+A:在 v1.0.7 版本中已经修复了该 bug,但是也需要注意:
+
+请勿使用 `self.title = @"同城"; ` 这种方式,请使用 `self.navigationItem.title = @"同城"; `
+
+`self.title = @"同城"; ` 这种方式,如果和 `tabBarItemsAttributes` 中对应的 `title` 不一致的时候可能会导致如下现象(不算 bug,但看起来也很奇怪):
+
+
+
+
+
+规则如下:
+
+ ```Objective-C
+
+ self.navigationItem.title = @"同城"; //✅sets navigation bar title.The right way to set the title of the navigation
+ self.tabBarItem.title = @"同城23333"; //❌sets tab bar title. Even the `tabBarItem.title` changed, this will be ignored in tabbar.
+ self.title = @"同城1"; //❌sets both of these. Do not do this‼️‼️ This may cause something strange like this : http://i68.tinypic.com/282l3x4.jpg
+
+ ```
+
+ Q : 当使用这个方法时 `-[UIViewController cyl_popSelectTabBarChildViewControllerAtIndex:]` 系列方法时,会出现如下的黑边问题。
+
+
+
+A: 这个是 iOS 系统的BUG,经测试iOS9.3已经修复了,如果在更早起版本中出现了,可以通过下面将 `rootWindow` 的背景色改为白色来避免:比如你可以 `Appdelegate` 类里这样设置:
+
+
+ ```Objective-C
+//#import "CYLTabBarController.h"
+ [[self cyl_tabBarController] rootWindow].backgroundColor = [UIColor whiteColor];
+ ```
+Q:我现在已经做好了一个比较简单的中间凸起的 icon 但是超过了49这个高度的位置是不能效应的 我想请问你的demo哪个功能是可以使我超出的范围也可以响应的呢?
+
+A: 这个是自动做的,但是 `CYLTabBarController` 只能保证的是:只要是 `UIButton` 的 frame 区域内就能响应。
+
+请把 button 的背景颜色设置为显眼的颜色,比如红色,比如像下面的plus按钮,红色部分是能接收点击事件的,但是超出了红色按钮的,黄色的图片区域,依然是无法响应点击事件的。
+
+
+
+这是因为,在响应链上,`UIControl` 能响应点击事件, `UIImage` 无法响应。
+
+
+Q:为什么在iOS10上会Crash,iOS9上不会?
+
+
+A:
+ 在注册加号按钮时,需要在 `-application:didFinishLaunchingWithOptions:` 方法里面调用 `[YourClass registerPlusButton]`
+
+ 这里注意,不能在子类的 `+load` 方法中调用,比如像下面这样做,在 iOS10 系统上有 Crash 的风险:
+
+ ```Objective-C
+ + (void)load {
+ [super registerPlusButton];
+}
+ ```
+
+Q: 我的样式是点击 `plusButton` 后跳转到一个 `ViewController`,但是选中了一次中间的 `plusButton` 之后,再点别的 `tabItem` ,中间不会变成 `normal` 的状态。
+
+A: 有两种情况会造成这个问题:
+
+ 1. 应该是你的 `tabBar` 设置了 `delegate` 了,你要是 `tabBar` 的代理没设置的话,默认会有这个 `selected` 状态切换的处理。你设置代理后,会覆盖我的行为。所以手动加上就好了。
+
+ ```Objective-C
+- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
+ [[self cyl_tabBarController] updateSelectionStatusIfNeededForTabBarController:tabBarController shouldSelectViewController:viewController];
+ return YES;
+}
+ ```
+
+ 2. `plusButton` 添加了自定义点击事件或者自定义手势,因为这样会造成点击事件冲突或手势冲突,当需要 `pushViewController` 的时候,这个库会自动的添加点击事件,你这里重新加了点击事件所以冲突了;
+
+ 在你项目的基础,把 `plusButton` 的点击事件取消掉,也就是 `addTarget` 这一行注释掉,手势事件也同理,应该就ok了
+
+A: `PlusButton` 与其他的 `TabBarItem` 距离没有平均分布
+
+(对应于 [issue#36](https://github.com/ChenYilong/CYLTabBarController/issues/36#issuecomment-269165471) )
+
+把这 Demo 里的这一行代码改下:
+
+ ```Objective-C
+[button sizeToFit];
+ ```
+
+改成:
+
+ ```Objective-C
+button.frame = CGRectMake(0.0, 0.0, w, h);
+ ```
+
+那么如果单是放一个照相机的图片,一般是多大的尺寸?
+
+这个要看设计图,通常情况下,你可以写死与其他TabBarItem一样大小:
+
+
+ ```Objective-C
+ [UIScreen mainScreen].bounds.size.width / [CYLTabBarController allItemsInTabBarCount]
+ ```
+
+
+Q:如何兼容 Lottie 动画?
+A:用法见:https://github.com/ChenYilong/CYLTabBarController/issues/341
+
+
+(更多iOS开发干货,欢迎关注 [微博@iOS程序犭袁](http://weibo.com/luohanchenyilong/) )
+
+----------
+Posted by [微博@iOS程序犭袁](http://weibo.com/luohanchenyilong/)
+原创作品,版权声明:License MIT
+
+
+
diff --git a/beta-link-frontend/Pods/Manifest.lock b/beta-link-frontend/Pods/Manifest.lock
new file mode 100644
index 0000000..00fa135
--- /dev/null
+++ b/beta-link-frontend/Pods/Manifest.lock
@@ -0,0 +1,28 @@
+PODS:
+ - CYLTabBarController (1.24.2):
+ - CYLTabBarController/Core (= 1.24.2)
+ - CYLTabBarController/Core (1.24.2)
+ - SQLite.swift (0.12.2):
+ - SQLite.swift/standard (= 0.12.2)
+ - SQLite.swift/standard (0.12.2)
+ - StoryView (1.0)
+
+DEPENDENCIES:
+ - CYLTabBarController (~> 1.24.0)
+ - SQLite.swift (~> 0.12.0)
+ - StoryView (~> 1.0)
+
+SPEC REPOS:
+ trunk:
+ - CYLTabBarController
+ - SQLite.swift
+ - StoryView
+
+SPEC CHECKSUMS:
+ CYLTabBarController: e7440ad0992edfb8ac14a6c793f43aa636c5cba5
+ SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3
+ StoryView: 17d2a421b678874a80235643e438a58bdb7738b7
+
+PODFILE CHECKSUM: 413cc55e74ce1d6d2321ea4ae8c98fa6e14e977e
+
+COCOAPODS: 1.9.3
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/project.pbxproj b/beta-link-frontend/Pods/Pods.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..5fc842b
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/project.pbxproj
@@ -0,0 +1,1264 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 51;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 027649FBC9785D13847C7C274FC8EA23 /* CYLBaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3BCA65D3BDDED9E3DAC2B705997BA6 /* CYLBaseTableViewController.m */; };
+ 03F6349BC7F1C0F3BDFD63082CCE32DB /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424AA4C67DD10E583383633F11C1C90B /* FTS4.swift */; };
+ 0EEC54AB7E430C883AE39D1C1B63FB11 /* UITabBarItem+CYLBadgeExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 287F34147F1D1EB8FBA4AD1A5A0BECDE /* UITabBarItem+CYLBadgeExtention.m */; };
+ 11E9A60E5488B2F144F7091C12A8AFC8 /* Bundle+Current.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE85D9E4DD9D41CCD9EBD3D92B77F327 /* Bundle+Current.swift */; };
+ 120FA66546BE31F009BCCE2FE4E4EF79 /* StoryView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CC077F31C7D96FA8D7522673A4948DE1 /* StoryView-dummy.m */; };
+ 13DC37325FD7C005D5757A7A24879CFB /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35A5EFF8E53E9BCBE07A32B11A24393C /* Expression.swift */; };
+ 16E32D96D226F5CA5ECE9021B4448A2C /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EAA78CB753E33B353CAC38BA19FEEAE /* Connection.swift */; };
+ 17C3477E8F6F11CA2C56F219BFAB3E0B /* CYLBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7BAEF3C37584684A3C7E30668BA616B /* CYLBaseViewController.m */; };
+ 18808F9C139BA0E9059E72980F0BF908 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B85E324A528B217488E0597D94BE6BE1 /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 188E0D4F7200FED3C7A1245F9F913072 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4702B5F00A72B40AD567320687A9D315 /* Coding.swift */; };
+ 1B13B36FAC4CB8F57794A2B328FDA679 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F187B23D76A4035085034B76948C1F33 /* CoreFunctions.swift */; };
+ 1D662E993CBC300751029AFA28119FAA /* UIViewController+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = E033DF6CE818B47EB34B9538B7ADC8A3 /* UIViewController+CYLTabBarControllerExtention.m */; };
+ 22EAB668FE5586C2F6CA752D5DA6F6E3 /* CYLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CFA1249BD7132E22D15BFAF8A71A2A /* CYLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2C4F38367FEF4F7C72224D9EB87B7F71 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53C1F59BDD34BD349262DA8DE0EAC4C /* Blob.swift */; };
+ 31AAD13A75FA67A504E265924E542827 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 662B95F09098795C6A01542F9578BC5C /* Statement.swift */; };
+ 33C26096E41EB51DF5A5496913881FDE /* UIView+CYLBadgeExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 978D28643322EDB190423EDF84534676 /* UIView+CYLBadgeExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 348B481DC980D7B5252368E2A54CFBF9 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98791AC9CB62E7C78EDD13C979556396 /* Foundation.swift */; };
+ 3652B4B9BB589867C8D67336338D3773 /* UIBarButtonItem+CYLBadgeExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 6424239A145E49FD4F9019C08B557CAF /* UIBarButtonItem+CYLBadgeExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 378F27964752FF09834A21DACBD15C55 /* CYLBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FFA282ECD369C4EEB37F88E7323BA9 /* CYLBaseNavigationController.m */; };
+ 3C60BB96C019A0810C4C4E56D254D4D5 /* UIImage+Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A916B160D475DBE6B11A56C16D99CA4 /* UIImage+Circle.swift */; };
+ 413CB0F828FF7A662E9B4A4A0352E19E /* CYLPlusButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0A2C03B8D710F021F6B1101355C2CC /* CYLPlusButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 444D048C8F52A4002F068AE6198AA5B7 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25781D277184544D7F4938E33A48B521 /* Query.swift */; };
+ 4A50D35274D871E14260F93489F87E32 /* SQLiteObjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 36AE7339EDBEC75BC550C32085CEEDF7 /* SQLiteObjc.m */; };
+ 4E3EDCB1C27B3725FD8AEFD7E61B9E17 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7002B6FE04BEC2054F917835C4C02384 /* RTree.swift */; };
+ 50927CD00CDD4831AD1C791D4D48EE29 /* UIControl+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 458E063FC738E8FA700A213A6B363552 /* UIControl+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 562C0EC24B01344973D5C5CF71B52248 /* UIImage+Path.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A42581A07F43BC192A0F93928E18F5 /* UIImage+Path.swift */; };
+ 5AB7AA2D47C8BD4ED779FB58ADD2EB19 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C7F1C4C145962B2B8C628B57198269 /* Operators.swift */; };
+ 5BA891FB2BE2492499DD30FAD3D2F399 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79785105D9B24C4DB95B92EA65E81A7C /* Value.swift */; };
+ 5D1D42009E941070E4EDDE947A881181 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60862016BC2D6AFA7A4B14160E8154D0 /* Errors.swift */; };
+ 5F0FEAC9AD3DC25D70597129AD0B3B89 /* CYLBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D30DF9E79FEFE0B112AAF0E619D2A6 /* CYLBaseViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5F75157A5075DECD1D4512F9A6744CA6 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A2DC781E6111219780E332A0662DB9B /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 63A93F929559AAF0557A44781B1556F2 /* StoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA635AFB5C9706B7918C5223EF24D7E /* StoryView.swift */; };
+ 63C5BBF2B620578B799B65A3ECCA7B64 /* CYLTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F42454F90BA73DECDE24E2E9F06DA3 /* CYLTabBarController.m */; };
+ 65E7580551F2BAB73DFD24359872D3AA /* UIImage+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A19AFEAE17E6CBBF41FDCE0A0810236 /* UIImage+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 667ADE28EE275FD80A4B25D9B2433EAC /* CYLTabBarController.h in Headers */ = {isa = PBXBuildFile; fileRef = E9F863A84F1C1EDAFC6595D1721DE59B /* CYLTabBarController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 67F339D752FFF174485AB6F96EC6FA7E /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01C3D3A9A780AC76FF48723B8F8660BF /* SQLite.swift-dummy.m */; };
+ 6F11E3173F02C685EBEF2C0AF019919E /* UITabBarItem+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C229C03918114779E7370C3A8E8FB5D /* UITabBarItem+CYLTabBarControllerExtention.m */; };
+ 74EF61867DEF0770958224A78E1F8A50 /* UITabBarItem+CYLBadgeExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = B931DA99A4626231EAF4FE88822C9B97 /* UITabBarItem+CYLBadgeExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7599024DB59A664B43BF2FF798AEC13B /* StoryViewCell.xib in Sources */ = {isa = PBXBuildFile; fileRef = 3250F6E36B6CEA35D050B942976979B0 /* StoryViewCell.xib */; };
+ 79E43357E56514CD6FE8A6F4B1D28C2E /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373E16A0DE46EBD0B4BA7BF74E3D5FC7 /* Helpers.swift */; };
+ 7E548D92E0FB7C4DD6A5D99017938FE6 /* CYLBadgeProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B96179DBF8C0BD92C03EAB1FA3C8BF34 /* CYLBadgeProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 936D6784CCCC36EFEE8CE92BF469A8C7 /* CAAnimation+CYLBadgeExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C109BCEEBF8E8AF57AE038E9270C98 /* CAAnimation+CYLBadgeExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 98DDB1A28A05F1FFC53F0E39934173D2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
+ 99B444C65949A7CF85A8F1BE3462A156 /* CYLTabBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DDBB9DDD4AAFAE75AC500172018A503 /* CYLTabBar.m */; };
+ 99F9147E7A386B878E0C97B673C9ACCA /* UIBarButtonItem+CYLBadgeExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B767BF47859B309A91C1CC6BC0F8ECF /* UIBarButtonItem+CYLBadgeExtention.m */; };
+ 9B3A040DEACD188FBA57F28AFAADB057 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7313704FDF1D7C8F1C7F24EECDA57009 /* AggregateFunctions.swift */; };
+ 9DA7D664608CACF877DF8FF5FF9E8F6F /* CYLTabBarController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BED9DF78CCE48606FF629CDC3D528C9 /* CYLTabBarController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A1133BEA1323E593060910E2194A938E /* StoryViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86FC050A23464499D80FFA369EDFE0F0 /* StoryViewCell.swift */; };
+ A42659683986F68D9D4F244F1DB71C2F /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FE79CEF87A1474518BB5B33803C48F7 /* FTS5.swift */; };
+ A7566895CD56B9ACDC99EACEAF133338 /* CYLTabBar+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D8F75946F96B78241E00B342391F39A /* CYLTabBar+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A90EA7375C096DD7019DD497D66E6ED1 /* UIView+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E14D7040DA9E9A6114538D83CAFD67D /* UIView+CYLTabBarControllerExtention.m */; };
+ A966409E4EB7EB56CBE6C9DFA0FC5B94 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116489DB601D4D718B3DD2B0C082E25C /* DateAndTimeFunctions.swift */; };
+ A986DA550E6FC3AE55589118CA6126A6 /* CYLTabBar+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 82A425A4153F45829CA0067612B34A59 /* CYLTabBar+CYLTabBarControllerExtention.m */; };
+ AB29531C3A4BF24C5ED7B5FBDA315FEF /* UIViewController+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BA3AA0EE2768FFB2A269561F5FF4135 /* UIViewController+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B17DF670B69CF28B490DE111532217A0 /* Pods-beta-link-frontend-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC571B5EDCE92B23B95EA3CA5CC5A /* Pods-beta-link-frontend-dummy.m */; };
+ B1D89872AC365C78155FF44EE9F28FEF /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE9BBFDA9F0551284D1AC746350805D /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B2D62BF511E1858400ABBCB77FD9D934 /* CYLBaseNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A951953FDB5FBD5525F36881750ADE0 /* CYLBaseNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B6E718AAE46278B59C05F24BCE97568E /* StoryView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 08F24C4618DD27A4A637291B1D9988F9 /* StoryView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BCBC58B86314444FE44BEC4AAE807FBF /* UIControl+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = D99189B9C1B2086944D283F554075D12 /* UIControl+CYLTabBarControllerExtention.m */; };
+ BD424D96C5C8F63C1309083E4E79F1B4 /* StoryView.xib in Sources */ = {isa = PBXBuildFile; fileRef = 1DCE01C4C466C3F11819F5D7C06EFE0E /* StoryView.xib */; };
+ BF8982E7EAEAD50BD5F6F55763F26395 /* CYLPlusButton.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2F50F796CDEDAEAEE741F2B5DB41A6 /* CYLPlusButton.m */; };
+ C0A2FF9D884B773A45F7A541C80DAFDC /* CYLTabBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6BDE1A5748EFF1C2932325268F0F1C /* CYLTabBar.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C1297EC02CBA5F9058373D8309E06C7E /* Story.swift in Sources */ = {isa = PBXBuildFile; fileRef = E37AB4FA4E8330E3F4D66D5BF112CF70 /* Story.swift */; };
+ C26CACB8540BF37A2C6EEAA3237ED9E3 /* UIView+CYLBadgeExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F0E15364E44B3A243075B2CB9E3C843 /* UIView+CYLBadgeExtention.m */; };
+ C64E97D5FC0802B08D7CA36AEC74A422 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778D5D65B76574842C36B14A59003B5D /* CustomFunctions.swift */; };
+ C7501844CD1436F9FBDE9C24CEFCCC7B /* NSObject+ClassName.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB11921401CCCAC8278E63215963332B /* NSObject+ClassName.swift */; };
+ CE7AE4C53CF3B0582938695B56A6A17B /* UIViewController+CYLNavigationControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 5958B5A6FD4B1B4CDF113074B748C7C3 /* UIViewController+CYLNavigationControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D08F2F370D7B0B6FAC3D07F37108B81C /* UIView+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = E0C8E0B1476249DD4508C849604A0701 /* UIView+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D6E6E2AA38E0E6B0B7D1E0891F4FD12D /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71D814BCE651F96182D0F469FA4815E /* Setter.swift */; };
+ DD44A17C7665842E6AE218DC4B0572A5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
+ DDA8FA48839CB0DA756BC5043213B362 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
+ E0F6A6504206BEB29FEAFBBB223DFC5F /* CAAnimation+CYLBadgeExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC24EAAE426A36BD874B8DE4E0E82AE /* CAAnimation+CYLBadgeExtention.m */; };
+ E4658C7BA420DD73B04001355F6C8115 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
+ EE966B1A61C1960A3BBC22A783C27272 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD3D48827CF5732BF5B4432276295DC /* Collation.swift */; };
+ EF0AE7FC243DB75BE8F4EB6523512777 /* UIImage+CYLTabBarControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 611952C11AFBBC78DBCC4B5A662B37E8 /* UIImage+CYLTabBarControllerExtention.m */; };
+ EF5E32C13CFA779B953F8F81AE3C67D6 /* SQLiteObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4580E8AF3A7435F062F8C9DB27FB4 /* SQLiteObjc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F32BE07372CCC6071A6B6CD6BCD4B36F /* UITabBarItem+CYLTabBarControllerExtention.h in Headers */ = {isa = PBXBuildFile; fileRef = 073356CFAD1713755B11AC06EDA9F5C2 /* UITabBarItem+CYLTabBarControllerExtention.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F65C88FF18F215BF14E96127767D6916 /* UIView+LoadXIB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B1C8D553C03FBDA41DA74B9000BFB6 /* UIView+LoadXIB.swift */; };
+ F6831A92E9CCFEE7E0BDD5B010EFE8F0 /* CYLTabBarController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0116806E3F088416D20433FED8998FCC /* CYLTabBarController-dummy.m */; };
+ F6BB6C198A2522FF0633261964EB2A24 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0154C6BEABE7CD77E884E8078761468 /* Schema.swift */; };
+ F87BDBFDCDCC27F1E58A944139D05391 /* Pods-beta-link-frontend-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 864EBFCA1508C8A931B08BA625F64F5E /* Pods-beta-link-frontend-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F8AD3B4371962CA98F7F75B552A633C0 /* CYLBaseTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6355071630870A72A36F847D70C13FFB /* CYLBaseTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F9273C5AEF959FFB0E89D2D02F6F926D /* UIViewController+CYLNavigationControllerExtention.m in Sources */ = {isa = PBXBuildFile; fileRef = 98D64E9C2214926F7E0F441010A34DE8 /* UIViewController+CYLNavigationControllerExtention.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ A58E834F4C8DC89EE9B1294CAA43FDD3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3F2C1776D90B62B156DB52C41A5C419C;
+ remoteInfo = SQLite.swift;
+ };
+ C2061AC6A1363CBBDEB23CA346F9E80B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8534B493C62D81C69516B0E9599CEF36;
+ remoteInfo = CYLTabBarController;
+ };
+ E26F4A752A23E4EE2D8DB8487B7F3708 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C784B52AB0EC92E2CCA71E8ACDA96F21;
+ remoteInfo = StoryView;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 0116806E3F088416D20433FED8998FCC /* CYLTabBarController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CYLTabBarController-dummy.m"; sourceTree = ""; };
+ 01C3D3A9A780AC76FF48723B8F8660BF /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; };
+ 02B1C8D553C03FBDA41DA74B9000BFB6 /* UIView+LoadXIB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+LoadXIB.swift"; path = "Source/Extension/UIView/UIView+LoadXIB.swift"; sourceTree = ""; };
+ 073356CFAD1713755B11AC06EDA9F5C2 /* UITabBarItem+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBarItem+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/UITabBarItem+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ 08F24C4618DD27A4A637291B1D9988F9 /* StoryView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StoryView-umbrella.h"; sourceTree = ""; };
+ 093DA06E6E13A6853020F7D45A2FB20A /* Pods-beta-link-frontend.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-beta-link-frontend.release.xcconfig"; sourceTree = ""; };
+ 0BA3AA0EE2768FFB2A269561F5FF4135 /* UIViewController+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/UIViewController+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ 0CB75BF5BB0DA0D3B347992389EF7AC0 /* StoryView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "StoryView-prefix.pch"; sourceTree = ""; };
+ 0FE79CEF87A1474518BB5B33803C48F7 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; };
+ 10116787FCC98C8B713C105ADBC21258 /* StoryView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = StoryView.modulemap; sourceTree = ""; };
+ 1020BEC1C9E959D5CE084404E9BA45DD /* CYLTabBarController.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CYLTabBarController.release.xcconfig; sourceTree = ""; };
+ 11379CD47AB7EF82906A00DC52ED52E5 /* SQLite.swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.release.xcconfig; sourceTree = ""; };
+ 116489DB601D4D718B3DD2B0C082E25C /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; };
+ 13C1D21B7FFC630FF2B88F57B2A643FC /* SQLite.swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.debug.xcconfig; sourceTree = ""; };
+ 1D6BDE1A5748EFF1C2932325268F0F1C /* CYLTabBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLTabBar.h; path = CYLTabBarController/CYLTabBar.h; sourceTree = ""; };
+ 1DCE01C4C466C3F11819F5D7C06EFE0E /* StoryView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StoryView.xib; path = Source/Class/StoryView/StoryView.xib; sourceTree = ""; };
+ 1DDBB9DDD4AAFAE75AC500172018A503 /* CYLTabBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLTabBar.m; path = CYLTabBarController/CYLTabBar.m; sourceTree = ""; };
+ 25781D277184544D7F4938E33A48B521 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; };
+ 27D30DF9E79FEFE0B112AAF0E619D2A6 /* CYLBaseViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLBaseViewController.h; path = CYLTabBarController/CYLBaseViewController.h; sourceTree = ""; };
+ 287F34147F1D1EB8FBA4AD1A5A0BECDE /* UITabBarItem+CYLBadgeExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBarItem+CYLBadgeExtention.m"; path = "CYLTabBarController/UITabBarItem+CYLBadgeExtention.m"; sourceTree = ""; };
+ 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+ 3250F6E36B6CEA35D050B942976979B0 /* StoryViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StoryViewCell.xib; path = Source/Class/StoryViewCell/StoryViewCell.xib; sourceTree = ""; };
+ 32FEEA20F8DF7AED57E52850B573407C /* Pods-beta-link-frontend-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-beta-link-frontend-acknowledgements.markdown"; sourceTree = ""; };
+ 35A5EFF8E53E9BCBE07A32B11A24393C /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; };
+ 36AE7339EDBEC75BC550C32085CEEDF7 /* SQLiteObjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SQLiteObjc.m; path = Sources/SQLiteObjc/SQLiteObjc.m; sourceTree = ""; };
+ 373E16A0DE46EBD0B4BA7BF74E3D5FC7 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; };
+ 38C109BCEEBF8E8AF57AE038E9270C98 /* CAAnimation+CYLBadgeExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CAAnimation+CYLBadgeExtention.h"; path = "CYLTabBarController/CAAnimation+CYLBadgeExtention.h"; sourceTree = ""; };
+ 3A19AFEAE17E6CBBF41FDCE0A0810236 /* UIImage+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/UIImage+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ 3A916B160D475DBE6B11A56C16D99CA4 /* UIImage+Circle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Circle.swift"; path = "Source/Extension/UIImage/UIImage+Circle.swift"; sourceTree = ""; };
+ 3BED9DF78CCE48606FF629CDC3D528C9 /* CYLTabBarController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CYLTabBarController-umbrella.h"; sourceTree = ""; };
+ 424AA4C67DD10E583383633F11C1C90B /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; };
+ 458E063FC738E8FA700A213A6B363552 /* UIControl+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIControl+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/UIControl+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ 4702B5F00A72B40AD567320687A9D315 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; };
+ 4A951953FDB5FBD5525F36881750ADE0 /* CYLBaseNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLBaseNavigationController.h; path = CYLTabBarController/CYLBaseNavigationController.h; sourceTree = ""; };
+ 4E14D7040DA9E9A6114538D83CAFD67D /* UIView+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/UIView+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ 4FDC4C35030BE38616360F7884950347 /* Pods-beta-link-frontend.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-beta-link-frontend.modulemap"; sourceTree = ""; };
+ 56073194A14EAB474A17C683E6EC09BD /* Pods-beta-link-frontend-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-beta-link-frontend-Info.plist"; sourceTree = ""; };
+ 5958B5A6FD4B1B4CDF113074B748C7C3 /* UIViewController+CYLNavigationControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+CYLNavigationControllerExtention.h"; path = "CYLTabBarController/UIViewController+CYLNavigationControllerExtention.h"; sourceTree = ""; };
+ 5A2DC781E6111219780E332A0662DB9B /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; };
+ 5E4686C2F81429976B5652681A9CB16A /* CYLTabBarController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CYLTabBarController.debug.xcconfig; sourceTree = ""; };
+ 60862016BC2D6AFA7A4B14160E8154D0 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; };
+ 611952C11AFBBC78DBCC4B5A662B37E8 /* UIImage+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/UIImage+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ 6355071630870A72A36F847D70C13FFB /* CYLBaseTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLBaseTableViewController.h; path = CYLTabBarController/CYLBaseTableViewController.h; sourceTree = ""; };
+ 6424239A145E49FD4F9019C08B557CAF /* UIBarButtonItem+CYLBadgeExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+CYLBadgeExtention.h"; path = "CYLTabBarController/UIBarButtonItem+CYLBadgeExtention.h"; sourceTree = ""; };
+ 662B95F09098795C6A01542F9578BC5C /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; };
+ 6AD3D48827CF5732BF5B4432276295DC /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; };
+ 6B0E735583C88A43A5B9EA6454438174 /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; };
+ 7002B6FE04BEC2054F917835C4C02384 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; };
+ 714A3DE7D2D2F151145FC1FF1AC32142 /* CYLTabBarController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CYLTabBarController-prefix.pch"; sourceTree = ""; };
+ 71CFA1249BD7132E22D15BFAF8A71A2A /* CYLConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLConstants.h; path = CYLTabBarController/CYLConstants.h; sourceTree = ""; };
+ 7313704FDF1D7C8F1C7F24EECDA57009 /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; };
+ 75C7F1C4C145962B2B8C628B57198269 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; };
+ 778D5D65B76574842C36B14A59003B5D /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; };
+ 793AC79303F670D40A7E8FC2CD00667B /* StoryView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StoryView.release.xcconfig; sourceTree = ""; };
+ 79785105D9B24C4DB95B92EA65E81A7C /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; };
+ 7B767BF47859B309A91C1CC6BC0F8ECF /* UIBarButtonItem+CYLBadgeExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+CYLBadgeExtention.m"; path = "CYLTabBarController/UIBarButtonItem+CYLBadgeExtention.m"; sourceTree = ""; };
+ 7D849E55560EFB2C9D2A6174C5AA873D /* StoryView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = StoryView.debug.xcconfig; sourceTree = ""; };
+ 7D8F75946F96B78241E00B342391F39A /* CYLTabBar+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CYLTabBar+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/CYLTabBar+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ 7F0E15364E44B3A243075B2CB9E3C843 /* UIView+CYLBadgeExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+CYLBadgeExtention.m"; path = "CYLTabBarController/UIView+CYLBadgeExtention.m"; sourceTree = ""; };
+ 82A425A4153F45829CA0067612B34A59 /* CYLTabBar+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CYLTabBar+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/CYLTabBar+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ 864EBFCA1508C8A931B08BA625F64F5E /* Pods-beta-link-frontend-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-beta-link-frontend-umbrella.h"; sourceTree = ""; };
+ 86FC050A23464499D80FFA369EDFE0F0 /* StoryViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryViewCell.swift; path = Source/Class/StoryViewCell/StoryViewCell.swift; sourceTree = ""; };
+ 8A2302AFFCD61213A6CE3CB46F2CAA30 /* StoryView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = StoryView.framework; path = StoryView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8AE9BBFDA9F0551284D1AC746350805D /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; };
+ 8C229C03918114779E7370C3A8E8FB5D /* UITabBarItem+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBarItem+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/UITabBarItem+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ 8DC24EAAE426A36BD874B8DE4E0E82AE /* CAAnimation+CYLBadgeExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CAAnimation+CYLBadgeExtention.m"; path = "CYLTabBarController/CAAnimation+CYLBadgeExtention.m"; sourceTree = ""; };
+ 8EAA78CB753E33B353CAC38BA19FEEAE /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; };
+ 906A19E93F2CFBE91C4D117B04626B12 /* CYLTabBarController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CYLTabBarController.framework; path = CYLTabBarController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 94FFA282ECD369C4EEB37F88E7323BA9 /* CYLBaseNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLBaseNavigationController.m; path = CYLTabBarController/CYLBaseNavigationController.m; sourceTree = ""; };
+ 978D28643322EDB190423EDF84534676 /* UIView+CYLBadgeExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+CYLBadgeExtention.h"; path = "CYLTabBarController/UIView+CYLBadgeExtention.h"; sourceTree = ""; };
+ 98791AC9CB62E7C78EDD13C979556396 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; };
+ 98D64E9C2214926F7E0F441010A34DE8 /* UIViewController+CYLNavigationControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+CYLNavigationControllerExtention.m"; path = "CYLTabBarController/UIViewController+CYLNavigationControllerExtention.m"; sourceTree = ""; };
+ 9A3BCA65D3BDDED9E3DAC2B705997BA6 /* CYLBaseTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLBaseTableViewController.m; path = CYLTabBarController/CYLBaseTableViewController.m; sourceTree = ""; };
+ 9B0A2C03B8D710F021F6B1101355C2CC /* CYLPlusButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLPlusButton.h; path = CYLTabBarController/CYLPlusButton.h; sourceTree = ""; };
+ 9B3082C917241D33C5977825A511AEFE /* StoryView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "StoryView-Info.plist"; sourceTree = ""; };
+ 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; };
+ 9F6FC571B5EDCE92B23B95EA3CA5CC5A /* Pods-beta-link-frontend-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-beta-link-frontend-dummy.m"; sourceTree = ""; };
+ A03DF007EC63E81180CCF47806BFCB35 /* Pods-beta-link-frontend.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-beta-link-frontend.debug.xcconfig"; sourceTree = ""; };
+ AB6F750CD8BA2F9B16F874337C3F59CF /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; };
+ ADF1458F184DF97984B69C9E26210681 /* Pods-beta-link-frontend-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-beta-link-frontend-frameworks.sh"; sourceTree = ""; };
+ AFDB2273400E098CB15CF4A2B6B4205E /* Pods_beta_link_frontend.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_beta_link_frontend.framework; path = "Pods-beta-link-frontend.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B85E324A528B217488E0597D94BE6BE1 /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; };
+ B931DA99A4626231EAF4FE88822C9B97 /* UITabBarItem+CYLBadgeExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBarItem+CYLBadgeExtention.h"; path = "CYLTabBarController/UITabBarItem+CYLBadgeExtention.h"; sourceTree = ""; };
+ B96179DBF8C0BD92C03EAB1FA3C8BF34 /* CYLBadgeProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLBadgeProtocol.h; path = CYLTabBarController/CYLBadgeProtocol.h; sourceTree = ""; };
+ B96AE49A561884EAF918F9929E63D918 /* Pods-beta-link-frontend-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-beta-link-frontend-acknowledgements.plist"; sourceTree = ""; };
+ C02990A6CB173B5E84A495D864AC42F9 /* SQLite.swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SQLite.swift-Info.plist"; sourceTree = ""; };
+ C71D814BCE651F96182D0F469FA4815E /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; };
+ CC077F31C7D96FA8D7522673A4948DE1 /* StoryView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "StoryView-dummy.m"; sourceTree = ""; };
+ CDF4580E8AF3A7435F062F8C9DB27FB4 /* SQLiteObjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLiteObjc.h; path = Sources/SQLiteObjc/include/SQLiteObjc.h; sourceTree = ""; };
+ D53C1F59BDD34BD349262DA8DE0EAC4C /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; };
+ D99189B9C1B2086944D283F554075D12 /* UIControl+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIControl+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/UIControl+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ DB11921401CCCAC8278E63215963332B /* NSObject+ClassName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+ClassName.swift"; path = "Source/Extension/NSObject/NSObject+ClassName.swift"; sourceTree = ""; };
+ DE85D9E4DD9D41CCD9EBD3D92B77F327 /* Bundle+Current.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bundle+Current.swift"; path = "Source/Extension/Bundle/Bundle+Current.swift"; sourceTree = ""; };
+ E033DF6CE818B47EB34B9538B7ADC8A3 /* UIViewController+CYLTabBarControllerExtention.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+CYLTabBarControllerExtention.m"; path = "CYLTabBarController/UIViewController+CYLTabBarControllerExtention.m"; sourceTree = ""; };
+ E0C8E0B1476249DD4508C849604A0701 /* UIView+CYLTabBarControllerExtention.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+CYLTabBarControllerExtention.h"; path = "CYLTabBarController/UIView+CYLTabBarControllerExtention.h"; sourceTree = ""; };
+ E0F42454F90BA73DECDE24E2E9F06DA3 /* CYLTabBarController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLTabBarController.m; path = CYLTabBarController/CYLTabBarController.m; sourceTree = ""; };
+ E37AB4FA4E8330E3F4D66D5BF112CF70 /* Story.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Story.swift; path = Source/Entity/Story.swift; sourceTree = ""; };
+ E9F863A84F1C1EDAFC6595D1721DE59B /* CYLTabBarController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CYLTabBarController.h; path = CYLTabBarController/CYLTabBarController.h; sourceTree = ""; };
+ EB2F50F796CDEDAEAEE741F2B5DB41A6 /* CYLPlusButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLPlusButton.m; path = CYLTabBarController/CYLPlusButton.m; sourceTree = ""; };
+ EDA635AFB5C9706B7918C5223EF24D7E /* StoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryView.swift; path = Source/Class/StoryView/StoryView.swift; sourceTree = ""; };
+ F0154C6BEABE7CD77E884E8078761468 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; };
+ F0A42581A07F43BC192A0F93928E18F5 /* UIImage+Path.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Path.swift"; path = "Source/Extension/UIImage/UIImage+Path.swift"; sourceTree = ""; };
+ F187B23D76A4035085034B76948C1F33 /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; };
+ F433923D8E5CAB52E83FC0D52448E574 /* CYLTabBarController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CYLTabBarController-Info.plist"; sourceTree = ""; };
+ F5FA45A44C42CC2CA3A324A3E914CE19 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F7BAEF3C37584684A3C7E30668BA616B /* CYLBaseViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CYLBaseViewController.m; path = CYLTabBarController/CYLBaseViewController.m; sourceTree = ""; };
+ FE0D213AC71FE05C5FC7F5D15F76972F /* CYLTabBarController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CYLTabBarController.modulemap; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 40FC351082C71FE378AFBEA19AA5237A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4658C7BA420DD73B04001355F6C8115 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 487B77068732922B20DB8AD2EE44A09C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 98DDB1A28A05F1FFC53F0E39934173D2 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1DC26BE8ED6BB3E57EC282209CB9866 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DD44A17C7665842E6AE218DC4B0572A5 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EB3B44470BDA3A23139F17ED8B72621B /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DDA8FA48839CB0DA756BC5043213B362 /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 1729AB07D2A9CC0494ECD907364F48EE /* Pods-beta-link-frontend */ = {
+ isa = PBXGroup;
+ children = (
+ 4FDC4C35030BE38616360F7884950347 /* Pods-beta-link-frontend.modulemap */,
+ 32FEEA20F8DF7AED57E52850B573407C /* Pods-beta-link-frontend-acknowledgements.markdown */,
+ B96AE49A561884EAF918F9929E63D918 /* Pods-beta-link-frontend-acknowledgements.plist */,
+ 9F6FC571B5EDCE92B23B95EA3CA5CC5A /* Pods-beta-link-frontend-dummy.m */,
+ ADF1458F184DF97984B69C9E26210681 /* Pods-beta-link-frontend-frameworks.sh */,
+ 56073194A14EAB474A17C683E6EC09BD /* Pods-beta-link-frontend-Info.plist */,
+ 864EBFCA1508C8A931B08BA625F64F5E /* Pods-beta-link-frontend-umbrella.h */,
+ A03DF007EC63E81180CCF47806BFCB35 /* Pods-beta-link-frontend.debug.xcconfig */,
+ 093DA06E6E13A6853020F7D45A2FB20A /* Pods-beta-link-frontend.release.xcconfig */,
+ );
+ name = "Pods-beta-link-frontend";
+ path = "Target Support Files/Pods-beta-link-frontend";
+ sourceTree = "";
+ };
+ 182B5763B59549C868E9B99C89A85812 /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ 10116787FCC98C8B713C105ADBC21258 /* StoryView.modulemap */,
+ CC077F31C7D96FA8D7522673A4948DE1 /* StoryView-dummy.m */,
+ 9B3082C917241D33C5977825A511AEFE /* StoryView-Info.plist */,
+ 0CB75BF5BB0DA0D3B347992389EF7AC0 /* StoryView-prefix.pch */,
+ 08F24C4618DD27A4A637291B1D9988F9 /* StoryView-umbrella.h */,
+ 7D849E55560EFB2C9D2A6174C5AA873D /* StoryView.debug.xcconfig */,
+ 793AC79303F670D40A7E8FC2CD00667B /* StoryView.release.xcconfig */,
+ );
+ name = "Support Files";
+ path = "../Target Support Files/StoryView";
+ sourceTree = "";
+ };
+ 344B3CE3BE7B2C18974F45C6FC4B3C06 /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ FE0D213AC71FE05C5FC7F5D15F76972F /* CYLTabBarController.modulemap */,
+ 0116806E3F088416D20433FED8998FCC /* CYLTabBarController-dummy.m */,
+ F433923D8E5CAB52E83FC0D52448E574 /* CYLTabBarController-Info.plist */,
+ 714A3DE7D2D2F151145FC1FF1AC32142 /* CYLTabBarController-prefix.pch */,
+ 3BED9DF78CCE48606FF629CDC3D528C9 /* CYLTabBarController-umbrella.h */,
+ 5E4686C2F81429976B5652681A9CB16A /* CYLTabBarController.debug.xcconfig */,
+ 1020BEC1C9E959D5CE084404E9BA45DD /* CYLTabBarController.release.xcconfig */,
+ );
+ name = "Support Files";
+ path = "../Target Support Files/CYLTabBarController";
+ sourceTree = "";
+ };
+ 6456BF32B3868E2DAFB596D8E34BD3B0 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 67EEB7D6439F12CDD8C7748094880B01 /* CYLTabBarController */,
+ F8C0EADFEABDE5ABF6A321194755CF31 /* SQLite.swift */,
+ 7D55186AED98BBB7307AA9113E7BF0FA /* StoryView */,
+ );
+ name = Pods;
+ sourceTree = "";
+ };
+ 6495F26BECAC4271C09990C3913E36AD /* Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ AB6F750CD8BA2F9B16F874337C3F59CF /* SQLite.swift.modulemap */,
+ 01C3D3A9A780AC76FF48723B8F8660BF /* SQLite.swift-dummy.m */,
+ C02990A6CB173B5E84A495D864AC42F9 /* SQLite.swift-Info.plist */,
+ 6B0E735583C88A43A5B9EA6454438174 /* SQLite.swift-prefix.pch */,
+ B85E324A528B217488E0597D94BE6BE1 /* SQLite.swift-umbrella.h */,
+ 13C1D21B7FFC630FF2B88F57B2A643FC /* SQLite.swift.debug.xcconfig */,
+ 11379CD47AB7EF82906A00DC52ED52E5 /* SQLite.swift.release.xcconfig */,
+ );
+ name = "Support Files";
+ path = "../Target Support Files/SQLite.swift";
+ sourceTree = "";
+ };
+ 67EEB7D6439F12CDD8C7748094880B01 /* CYLTabBarController */ = {
+ isa = PBXGroup;
+ children = (
+ E2A992853EDDE92BB24914FE6C4E125B /* Core */,
+ 344B3CE3BE7B2C18974F45C6FC4B3C06 /* Support Files */,
+ );
+ name = CYLTabBarController;
+ path = CYLTabBarController;
+ sourceTree = "";
+ };
+ 7092F3DCB0CE84690AF97DCFF397297A /* standard */ = {
+ isa = PBXGroup;
+ children = (
+ 7313704FDF1D7C8F1C7F24EECDA57009 /* AggregateFunctions.swift */,
+ D53C1F59BDD34BD349262DA8DE0EAC4C /* Blob.swift */,
+ 4702B5F00A72B40AD567320687A9D315 /* Coding.swift */,
+ 6AD3D48827CF5732BF5B4432276295DC /* Collation.swift */,
+ 8EAA78CB753E33B353CAC38BA19FEEAE /* Connection.swift */,
+ F187B23D76A4035085034B76948C1F33 /* CoreFunctions.swift */,
+ 778D5D65B76574842C36B14A59003B5D /* CustomFunctions.swift */,
+ 116489DB601D4D718B3DD2B0C082E25C /* DateAndTimeFunctions.swift */,
+ 60862016BC2D6AFA7A4B14160E8154D0 /* Errors.swift */,
+ 35A5EFF8E53E9BCBE07A32B11A24393C /* Expression.swift */,
+ 98791AC9CB62E7C78EDD13C979556396 /* Foundation.swift */,
+ 5A2DC781E6111219780E332A0662DB9B /* fts3_tokenizer.h */,
+ 424AA4C67DD10E583383633F11C1C90B /* FTS4.swift */,
+ 0FE79CEF87A1474518BB5B33803C48F7 /* FTS5.swift */,
+ 373E16A0DE46EBD0B4BA7BF74E3D5FC7 /* Helpers.swift */,
+ 75C7F1C4C145962B2B8C628B57198269 /* Operators.swift */,
+ 25781D277184544D7F4938E33A48B521 /* Query.swift */,
+ 7002B6FE04BEC2054F917835C4C02384 /* RTree.swift */,
+ F0154C6BEABE7CD77E884E8078761468 /* Schema.swift */,
+ C71D814BCE651F96182D0F469FA4815E /* Setter.swift */,
+ 8AE9BBFDA9F0551284D1AC746350805D /* SQLite.h */,
+ CDF4580E8AF3A7435F062F8C9DB27FB4 /* SQLiteObjc.h */,
+ 36AE7339EDBEC75BC550C32085CEEDF7 /* SQLiteObjc.m */,
+ 662B95F09098795C6A01542F9578BC5C /* Statement.swift */,
+ 79785105D9B24C4DB95B92EA65E81A7C /* Value.swift */,
+ );
+ name = standard;
+ sourceTree = "";
+ };
+ 7D55186AED98BBB7307AA9113E7BF0FA /* StoryView */ = {
+ isa = PBXGroup;
+ children = (
+ DE85D9E4DD9D41CCD9EBD3D92B77F327 /* Bundle+Current.swift */,
+ DB11921401CCCAC8278E63215963332B /* NSObject+ClassName.swift */,
+ E37AB4FA4E8330E3F4D66D5BF112CF70 /* Story.swift */,
+ EDA635AFB5C9706B7918C5223EF24D7E /* StoryView.swift */,
+ 1DCE01C4C466C3F11819F5D7C06EFE0E /* StoryView.xib */,
+ 86FC050A23464499D80FFA369EDFE0F0 /* StoryViewCell.swift */,
+ 3250F6E36B6CEA35D050B942976979B0 /* StoryViewCell.xib */,
+ 3A916B160D475DBE6B11A56C16D99CA4 /* UIImage+Circle.swift */,
+ F0A42581A07F43BC192A0F93928E18F5 /* UIImage+Path.swift */,
+ 02B1C8D553C03FBDA41DA74B9000BFB6 /* UIView+LoadXIB.swift */,
+ 182B5763B59549C868E9B99C89A85812 /* Support Files */,
+ );
+ name = StoryView;
+ path = StoryView;
+ sourceTree = "";
+ };
+ B7411A076FAB470E21DB2D6BF9BE7EAD /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 906A19E93F2CFBE91C4D117B04626B12 /* CYLTabBarController.framework */,
+ AFDB2273400E098CB15CF4A2B6B4205E /* Pods_beta_link_frontend.framework */,
+ F5FA45A44C42CC2CA3A324A3E914CE19 /* SQLite.framework */,
+ 8A2302AFFCD61213A6CE3CB46F2CAA30 /* StoryView.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ C0834CEBB1379A84116EF29F93051C60 /* iOS */ = {
+ isa = PBXGroup;
+ children = (
+ 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */,
+ );
+ name = iOS;
+ sourceTree = "";
+ };
+ C9ADBB45092A16197BB6CA3A21DC774E /* Targets Support Files */ = {
+ isa = PBXGroup;
+ children = (
+ 1729AB07D2A9CC0494ECD907364F48EE /* Pods-beta-link-frontend */,
+ );
+ name = "Targets Support Files";
+ sourceTree = "";
+ };
+ CF1408CF629C7361332E53B88F7BD30C = {
+ isa = PBXGroup;
+ children = (
+ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
+ D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */,
+ 6456BF32B3868E2DAFB596D8E34BD3B0 /* Pods */,
+ B7411A076FAB470E21DB2D6BF9BE7EAD /* Products */,
+ C9ADBB45092A16197BB6CA3A21DC774E /* Targets Support Files */,
+ );
+ sourceTree = "";
+ };
+ D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ C0834CEBB1379A84116EF29F93051C60 /* iOS */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ E2A992853EDDE92BB24914FE6C4E125B /* Core */ = {
+ isa = PBXGroup;
+ children = (
+ 38C109BCEEBF8E8AF57AE038E9270C98 /* CAAnimation+CYLBadgeExtention.h */,
+ 8DC24EAAE426A36BD874B8DE4E0E82AE /* CAAnimation+CYLBadgeExtention.m */,
+ B96179DBF8C0BD92C03EAB1FA3C8BF34 /* CYLBadgeProtocol.h */,
+ 4A951953FDB5FBD5525F36881750ADE0 /* CYLBaseNavigationController.h */,
+ 94FFA282ECD369C4EEB37F88E7323BA9 /* CYLBaseNavigationController.m */,
+ 6355071630870A72A36F847D70C13FFB /* CYLBaseTableViewController.h */,
+ 9A3BCA65D3BDDED9E3DAC2B705997BA6 /* CYLBaseTableViewController.m */,
+ 27D30DF9E79FEFE0B112AAF0E619D2A6 /* CYLBaseViewController.h */,
+ F7BAEF3C37584684A3C7E30668BA616B /* CYLBaseViewController.m */,
+ 71CFA1249BD7132E22D15BFAF8A71A2A /* CYLConstants.h */,
+ 9B0A2C03B8D710F021F6B1101355C2CC /* CYLPlusButton.h */,
+ EB2F50F796CDEDAEAEE741F2B5DB41A6 /* CYLPlusButton.m */,
+ 1D6BDE1A5748EFF1C2932325268F0F1C /* CYLTabBar.h */,
+ 1DDBB9DDD4AAFAE75AC500172018A503 /* CYLTabBar.m */,
+ 7D8F75946F96B78241E00B342391F39A /* CYLTabBar+CYLTabBarControllerExtention.h */,
+ 82A425A4153F45829CA0067612B34A59 /* CYLTabBar+CYLTabBarControllerExtention.m */,
+ E9F863A84F1C1EDAFC6595D1721DE59B /* CYLTabBarController.h */,
+ E0F42454F90BA73DECDE24E2E9F06DA3 /* CYLTabBarController.m */,
+ 6424239A145E49FD4F9019C08B557CAF /* UIBarButtonItem+CYLBadgeExtention.h */,
+ 7B767BF47859B309A91C1CC6BC0F8ECF /* UIBarButtonItem+CYLBadgeExtention.m */,
+ 458E063FC738E8FA700A213A6B363552 /* UIControl+CYLTabBarControllerExtention.h */,
+ D99189B9C1B2086944D283F554075D12 /* UIControl+CYLTabBarControllerExtention.m */,
+ 3A19AFEAE17E6CBBF41FDCE0A0810236 /* UIImage+CYLTabBarControllerExtention.h */,
+ 611952C11AFBBC78DBCC4B5A662B37E8 /* UIImage+CYLTabBarControllerExtention.m */,
+ B931DA99A4626231EAF4FE88822C9B97 /* UITabBarItem+CYLBadgeExtention.h */,
+ 287F34147F1D1EB8FBA4AD1A5A0BECDE /* UITabBarItem+CYLBadgeExtention.m */,
+ 073356CFAD1713755B11AC06EDA9F5C2 /* UITabBarItem+CYLTabBarControllerExtention.h */,
+ 8C229C03918114779E7370C3A8E8FB5D /* UITabBarItem+CYLTabBarControllerExtention.m */,
+ 978D28643322EDB190423EDF84534676 /* UIView+CYLBadgeExtention.h */,
+ 7F0E15364E44B3A243075B2CB9E3C843 /* UIView+CYLBadgeExtention.m */,
+ E0C8E0B1476249DD4508C849604A0701 /* UIView+CYLTabBarControllerExtention.h */,
+ 4E14D7040DA9E9A6114538D83CAFD67D /* UIView+CYLTabBarControllerExtention.m */,
+ 5958B5A6FD4B1B4CDF113074B748C7C3 /* UIViewController+CYLNavigationControllerExtention.h */,
+ 98D64E9C2214926F7E0F441010A34DE8 /* UIViewController+CYLNavigationControllerExtention.m */,
+ 0BA3AA0EE2768FFB2A269561F5FF4135 /* UIViewController+CYLTabBarControllerExtention.h */,
+ E033DF6CE818B47EB34B9538B7ADC8A3 /* UIViewController+CYLTabBarControllerExtention.m */,
+ );
+ name = Core;
+ sourceTree = "";
+ };
+ F8C0EADFEABDE5ABF6A321194755CF31 /* SQLite.swift */ = {
+ isa = PBXGroup;
+ children = (
+ 7092F3DCB0CE84690AF97DCFF397297A /* standard */,
+ 6495F26BECAC4271C09990C3913E36AD /* Support Files */,
+ );
+ name = SQLite.swift;
+ path = SQLite.swift;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 95981AFF9C21EAD71122557A4A2C88BD /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B6E718AAE46278B59C05F24BCE97568E /* StoryView-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 96E96E7F98796026C6760BA3D13C69C9 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5F75157A5075DECD1D4512F9A6744CA6 /* fts3_tokenizer.h in Headers */,
+ B1D89872AC365C78155FF44EE9F28FEF /* SQLite.h in Headers */,
+ 18808F9C139BA0E9059E72980F0BF908 /* SQLite.swift-umbrella.h in Headers */,
+ EF5E32C13CFA779B953F8F81AE3C67D6 /* SQLiteObjc.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BDA1633D216DBDFFE64E1ACE1A72A668 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F87BDBFDCDCC27F1E58A944139D05391 /* Pods-beta-link-frontend-umbrella.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C0185ECB5F95402FA098028AD1D68086 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 936D6784CCCC36EFEE8CE92BF469A8C7 /* CAAnimation+CYLBadgeExtention.h in Headers */,
+ 7E548D92E0FB7C4DD6A5D99017938FE6 /* CYLBadgeProtocol.h in Headers */,
+ B2D62BF511E1858400ABBCB77FD9D934 /* CYLBaseNavigationController.h in Headers */,
+ F8AD3B4371962CA98F7F75B552A633C0 /* CYLBaseTableViewController.h in Headers */,
+ 5F0FEAC9AD3DC25D70597129AD0B3B89 /* CYLBaseViewController.h in Headers */,
+ 22EAB668FE5586C2F6CA752D5DA6F6E3 /* CYLConstants.h in Headers */,
+ 413CB0F828FF7A662E9B4A4A0352E19E /* CYLPlusButton.h in Headers */,
+ A7566895CD56B9ACDC99EACEAF133338 /* CYLTabBar+CYLTabBarControllerExtention.h in Headers */,
+ C0A2FF9D884B773A45F7A541C80DAFDC /* CYLTabBar.h in Headers */,
+ 9DA7D664608CACF877DF8FF5FF9E8F6F /* CYLTabBarController-umbrella.h in Headers */,
+ 667ADE28EE275FD80A4B25D9B2433EAC /* CYLTabBarController.h in Headers */,
+ 3652B4B9BB589867C8D67336338D3773 /* UIBarButtonItem+CYLBadgeExtention.h in Headers */,
+ 50927CD00CDD4831AD1C791D4D48EE29 /* UIControl+CYLTabBarControllerExtention.h in Headers */,
+ 65E7580551F2BAB73DFD24359872D3AA /* UIImage+CYLTabBarControllerExtention.h in Headers */,
+ 74EF61867DEF0770958224A78E1F8A50 /* UITabBarItem+CYLBadgeExtention.h in Headers */,
+ F32BE07372CCC6071A6B6CD6BCD4B36F /* UITabBarItem+CYLTabBarControllerExtention.h in Headers */,
+ 33C26096E41EB51DF5A5496913881FDE /* UIView+CYLBadgeExtention.h in Headers */,
+ D08F2F370D7B0B6FAC3D07F37108B81C /* UIView+CYLTabBarControllerExtention.h in Headers */,
+ CE7AE4C53CF3B0582938695B56A6A17B /* UIViewController+CYLNavigationControllerExtention.h in Headers */,
+ AB29531C3A4BF24C5ED7B5FBDA315FEF /* UIViewController+CYLTabBarControllerExtention.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5E1D3A8318F603D191D121F70943FF08 /* Build configuration list for PBXNativeTarget "SQLite.swift" */;
+ buildPhases = (
+ 96E96E7F98796026C6760BA3D13C69C9 /* Headers */,
+ B91BEE056ED605FA41420BC2F6F79D91 /* Sources */,
+ A1DC26BE8ED6BB3E57EC282209CB9866 /* Frameworks */,
+ 437C6008F3714B5A8E869C50746FC132 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = SQLite.swift;
+ productName = SQLite.swift;
+ productReference = F5FA45A44C42CC2CA3A324A3E914CE19 /* SQLite.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 8534B493C62D81C69516B0E9599CEF36 /* CYLTabBarController */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A0D358AF0D16BEB118E1514A064A3FF9 /* Build configuration list for PBXNativeTarget "CYLTabBarController" */;
+ buildPhases = (
+ C0185ECB5F95402FA098028AD1D68086 /* Headers */,
+ D110116AEC1376BD7421644B98DCBDF3 /* Sources */,
+ 487B77068732922B20DB8AD2EE44A09C /* Frameworks */,
+ A446DE49D31638F03FFC3A71410DDB20 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = CYLTabBarController;
+ productName = CYLTabBarController;
+ productReference = 906A19E93F2CFBE91C4D117B04626B12 /* CYLTabBarController.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ C784B52AB0EC92E2CCA71E8ACDA96F21 /* StoryView */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = BFB331403FE26DC4673C4C2E00442F8A /* Build configuration list for PBXNativeTarget "StoryView" */;
+ buildPhases = (
+ 95981AFF9C21EAD71122557A4A2C88BD /* Headers */,
+ EAC1B1182ED28B7B1F3BD5BD36D8538E /* Sources */,
+ 40FC351082C71FE378AFBEA19AA5237A /* Frameworks */,
+ 3E5FCADD56B946E4B4E701A6975F0DB2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StoryView;
+ productName = StoryView;
+ productReference = 8A2302AFFCD61213A6CE3CB46F2CAA30 /* StoryView.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ F385FE3E7C8F467E49360321FFB927E9 /* Pods-beta-link-frontend */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4F9EDE04F9C6EB8BA1C9F3D39DEABDE8 /* Build configuration list for PBXNativeTarget "Pods-beta-link-frontend" */;
+ buildPhases = (
+ BDA1633D216DBDFFE64E1ACE1A72A668 /* Headers */,
+ 04AE2D2526B375D821AC21E32C1F41BD /* Sources */,
+ EB3B44470BDA3A23139F17ED8B72621B /* Frameworks */,
+ 150E4CB8DFE3C5ACE909327F4FE4706C /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ ACD961E39A49B6605D252F58839FE12D /* PBXTargetDependency */,
+ E31E4AD534D7DBAB001A12873B349B8B /* PBXTargetDependency */,
+ 920C7E97328855B318288BA25916DBC9 /* PBXTargetDependency */,
+ );
+ name = "Pods-beta-link-frontend";
+ productName = "Pods-beta-link-frontend";
+ productReference = AFDB2273400E098CB15CF4A2B6B4205E /* Pods_beta_link_frontend.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 1100;
+ LastUpgradeCheck = 1100;
+ };
+ buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
+ compatibilityVersion = "Xcode 10.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = CF1408CF629C7361332E53B88F7BD30C;
+ productRefGroup = B7411A076FAB470E21DB2D6BF9BE7EAD /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8534B493C62D81C69516B0E9599CEF36 /* CYLTabBarController */,
+ F385FE3E7C8F467E49360321FFB927E9 /* Pods-beta-link-frontend */,
+ 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */,
+ C784B52AB0EC92E2CCA71E8ACDA96F21 /* StoryView */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 150E4CB8DFE3C5ACE909327F4FE4706C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3E5FCADD56B946E4B4E701A6975F0DB2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 437C6008F3714B5A8E869C50746FC132 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A446DE49D31638F03FFC3A71410DDB20 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 04AE2D2526B375D821AC21E32C1F41BD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B17DF670B69CF28B490DE111532217A0 /* Pods-beta-link-frontend-dummy.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B91BEE056ED605FA41420BC2F6F79D91 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9B3A040DEACD188FBA57F28AFAADB057 /* AggregateFunctions.swift in Sources */,
+ 2C4F38367FEF4F7C72224D9EB87B7F71 /* Blob.swift in Sources */,
+ 188E0D4F7200FED3C7A1245F9F913072 /* Coding.swift in Sources */,
+ EE966B1A61C1960A3BBC22A783C27272 /* Collation.swift in Sources */,
+ 16E32D96D226F5CA5ECE9021B4448A2C /* Connection.swift in Sources */,
+ 1B13B36FAC4CB8F57794A2B328FDA679 /* CoreFunctions.swift in Sources */,
+ C64E97D5FC0802B08D7CA36AEC74A422 /* CustomFunctions.swift in Sources */,
+ A966409E4EB7EB56CBE6C9DFA0FC5B94 /* DateAndTimeFunctions.swift in Sources */,
+ 5D1D42009E941070E4EDDE947A881181 /* Errors.swift in Sources */,
+ 13DC37325FD7C005D5757A7A24879CFB /* Expression.swift in Sources */,
+ 348B481DC980D7B5252368E2A54CFBF9 /* Foundation.swift in Sources */,
+ 03F6349BC7F1C0F3BDFD63082CCE32DB /* FTS4.swift in Sources */,
+ A42659683986F68D9D4F244F1DB71C2F /* FTS5.swift in Sources */,
+ 79E43357E56514CD6FE8A6F4B1D28C2E /* Helpers.swift in Sources */,
+ 5AB7AA2D47C8BD4ED779FB58ADD2EB19 /* Operators.swift in Sources */,
+ 444D048C8F52A4002F068AE6198AA5B7 /* Query.swift in Sources */,
+ 4E3EDCB1C27B3725FD8AEFD7E61B9E17 /* RTree.swift in Sources */,
+ F6BB6C198A2522FF0633261964EB2A24 /* Schema.swift in Sources */,
+ D6E6E2AA38E0E6B0B7D1E0891F4FD12D /* Setter.swift in Sources */,
+ 67F339D752FFF174485AB6F96EC6FA7E /* SQLite.swift-dummy.m in Sources */,
+ 4A50D35274D871E14260F93489F87E32 /* SQLiteObjc.m in Sources */,
+ 31AAD13A75FA67A504E265924E542827 /* Statement.swift in Sources */,
+ 5BA891FB2BE2492499DD30FAD3D2F399 /* Value.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D110116AEC1376BD7421644B98DCBDF3 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E0F6A6504206BEB29FEAFBBB223DFC5F /* CAAnimation+CYLBadgeExtention.m in Sources */,
+ 378F27964752FF09834A21DACBD15C55 /* CYLBaseNavigationController.m in Sources */,
+ 027649FBC9785D13847C7C274FC8EA23 /* CYLBaseTableViewController.m in Sources */,
+ 17C3477E8F6F11CA2C56F219BFAB3E0B /* CYLBaseViewController.m in Sources */,
+ BF8982E7EAEAD50BD5F6F55763F26395 /* CYLPlusButton.m in Sources */,
+ A986DA550E6FC3AE55589118CA6126A6 /* CYLTabBar+CYLTabBarControllerExtention.m in Sources */,
+ 99B444C65949A7CF85A8F1BE3462A156 /* CYLTabBar.m in Sources */,
+ F6831A92E9CCFEE7E0BDD5B010EFE8F0 /* CYLTabBarController-dummy.m in Sources */,
+ 63C5BBF2B620578B799B65A3ECCA7B64 /* CYLTabBarController.m in Sources */,
+ 99F9147E7A386B878E0C97B673C9ACCA /* UIBarButtonItem+CYLBadgeExtention.m in Sources */,
+ BCBC58B86314444FE44BEC4AAE807FBF /* UIControl+CYLTabBarControllerExtention.m in Sources */,
+ EF0AE7FC243DB75BE8F4EB6523512777 /* UIImage+CYLTabBarControllerExtention.m in Sources */,
+ 0EEC54AB7E430C883AE39D1C1B63FB11 /* UITabBarItem+CYLBadgeExtention.m in Sources */,
+ 6F11E3173F02C685EBEF2C0AF019919E /* UITabBarItem+CYLTabBarControllerExtention.m in Sources */,
+ C26CACB8540BF37A2C6EEAA3237ED9E3 /* UIView+CYLBadgeExtention.m in Sources */,
+ A90EA7375C096DD7019DD497D66E6ED1 /* UIView+CYLTabBarControllerExtention.m in Sources */,
+ F9273C5AEF959FFB0E89D2D02F6F926D /* UIViewController+CYLNavigationControllerExtention.m in Sources */,
+ 1D662E993CBC300751029AFA28119FAA /* UIViewController+CYLTabBarControllerExtention.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EAC1B1182ED28B7B1F3BD5BD36D8538E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 11E9A60E5488B2F144F7091C12A8AFC8 /* Bundle+Current.swift in Sources */,
+ C7501844CD1436F9FBDE9C24CEFCCC7B /* NSObject+ClassName.swift in Sources */,
+ C1297EC02CBA5F9058373D8309E06C7E /* Story.swift in Sources */,
+ 120FA66546BE31F009BCCE2FE4E4EF79 /* StoryView-dummy.m in Sources */,
+ 63A93F929559AAF0557A44781B1556F2 /* StoryView.swift in Sources */,
+ BD424D96C5C8F63C1309083E4E79F1B4 /* StoryView.xib in Sources */,
+ A1133BEA1323E593060910E2194A938E /* StoryViewCell.swift in Sources */,
+ 7599024DB59A664B43BF2FF798AEC13B /* StoryViewCell.xib in Sources */,
+ 3C60BB96C019A0810C4C4E56D254D4D5 /* UIImage+Circle.swift in Sources */,
+ 562C0EC24B01344973D5C5CF71B52248 /* UIImage+Path.swift in Sources */,
+ F65C88FF18F215BF14E96127767D6916 /* UIView+LoadXIB.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 920C7E97328855B318288BA25916DBC9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = StoryView;
+ target = C784B52AB0EC92E2CCA71E8ACDA96F21 /* StoryView */;
+ targetProxy = E26F4A752A23E4EE2D8DB8487B7F3708 /* PBXContainerItemProxy */;
+ };
+ ACD961E39A49B6605D252F58839FE12D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = CYLTabBarController;
+ target = 8534B493C62D81C69516B0E9599CEF36 /* CYLTabBarController */;
+ targetProxy = C2061AC6A1363CBBDEB23CA346F9E80B /* PBXContainerItemProxy */;
+ };
+ E31E4AD534D7DBAB001A12873B349B8B /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = SQLite.swift;
+ target = 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */;
+ targetProxy = A58E834F4C8DC89EE9B1294CAA43FDD3 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1B0066B9755902B1ED80B43760502FDF /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5E4686C2F81429976B5652681A9CB16A /* CYLTabBarController.debug.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/CYLTabBarController/CYLTabBarController-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/CYLTabBarController/CYLTabBarController-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/CYLTabBarController/CYLTabBarController.modulemap";
+ PRODUCT_MODULE_NAME = CYLTabBarController;
+ PRODUCT_NAME = CYLTabBarController;
+ 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;
+ };
+ 5478BFB6766398DC1919B0493C371755 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 093DA06E6E13A6853020F7D45A2FB20A /* Pods-beta-link-frontend.release.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ CODE_SIGN_IDENTITY = "";
+ "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-beta-link-frontend/Pods-beta-link-frontend-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.5;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/Pods-beta-link-frontend/Pods-beta-link-frontend.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;
+ };
+ 5B0E82402408AFEEF929828936E1F40A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 13C1D21B7FFC630FF2B88F57B2A643FC /* SQLite.swift.debug.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/SQLite.swift/SQLite.swift-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/SQLite.swift/SQLite.swift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap";
+ PRODUCT_MODULE_NAME = SQLite;
+ PRODUCT_NAME = SQLite;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 5;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 85870EA645B859B907701ED37D4EB189 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 793AC79303F670D40A7E8FC2CD00667B /* StoryView.release.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/StoryView/StoryView-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/StoryView/StoryView-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/StoryView/StoryView.modulemap";
+ PRODUCT_MODULE_NAME = StoryView;
+ PRODUCT_NAME = StoryView;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 4.1;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 967778F4E1A10BCCBF609F51173FC175 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7D849E55560EFB2C9D2A6174C5AA873D /* StoryView.debug.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/StoryView/StoryView-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/StoryView/StoryView-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/StoryView/StoryView.modulemap";
+ PRODUCT_MODULE_NAME = StoryView;
+ PRODUCT_NAME = StoryView;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 4.1;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 9746EF76AE8548FF46F6E9746E9E97F1 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 11379CD47AB7EF82906A00DC52ED52E5 /* SQLite.swift.release.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/SQLite.swift/SQLite.swift-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/SQLite.swift/SQLite.swift-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap";
+ PRODUCT_MODULE_NAME = SQLite;
+ PRODUCT_NAME = SQLite;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_VERSION = 5;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ DFD9D19FEEBF98DE271D7FBABCB845B5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ 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_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 = 13.5;
+ 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;
+ };
+ F3EE87BB9E9227BCD9682664632CEF40 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1020BEC1C9E959D5CE084404E9BA45DD /* CYLTabBarController.release.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "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/CYLTabBarController/CYLTabBarController-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/CYLTabBarController/CYLTabBarController-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MODULEMAP_FILE = "Target Support Files/CYLTabBarController/CYLTabBarController.modulemap";
+ PRODUCT_MODULE_NAME = CYLTabBarController;
+ PRODUCT_NAME = CYLTabBarController;
+ 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;
+ };
+ F5F04600F5626DC980F02790D1ED2C19 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ 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_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 = 13.5;
+ 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;
+ };
+ FCDE2814B5C2777E0679DB84E735A1A7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = A03DF007EC63E81180CCF47806BFCB35 /* Pods-beta-link-frontend.debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+ CLANG_ENABLE_OBJC_WEAK = NO;
+ CODE_SIGN_IDENTITY = "";
+ "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-beta-link-frontend/Pods-beta-link-frontend-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.5;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ MODULEMAP_FILE = "Target Support Files/Pods-beta-link-frontend/Pods-beta-link-frontend.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 */
+ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DFD9D19FEEBF98DE271D7FBABCB845B5 /* Debug */,
+ F5F04600F5626DC980F02790D1ED2C19 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4F9EDE04F9C6EB8BA1C9F3D39DEABDE8 /* Build configuration list for PBXNativeTarget "Pods-beta-link-frontend" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ FCDE2814B5C2777E0679DB84E735A1A7 /* Debug */,
+ 5478BFB6766398DC1919B0493C371755 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 5E1D3A8318F603D191D121F70943FF08 /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5B0E82402408AFEEF929828936E1F40A /* Debug */,
+ 9746EF76AE8548FF46F6E9746E9E97F1 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A0D358AF0D16BEB118E1514A064A3FF9 /* Build configuration list for PBXNativeTarget "CYLTabBarController" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1B0066B9755902B1ED80B43760502FDF /* Debug */,
+ F3EE87BB9E9227BCD9682664632CEF40 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ BFB331403FE26DC4673C4C2E00442F8A /* Build configuration list for PBXNativeTarget "StoryView" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 967778F4E1A10BCCBF609F51173FC175 /* Debug */,
+ 85870EA645B859B907701ED37D4EB189 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+}
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/CYLTabBarController.xcscheme b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/CYLTabBarController.xcscheme
new file mode 100644
index 0000000..ad9aa1a
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/CYLTabBarController.xcscheme
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/Pods-beta-link-frontend.xcscheme b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/Pods-beta-link-frontend.xcscheme
new file mode 100644
index 0000000..57b99c8
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/Pods-beta-link-frontend.xcscheme
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/SQLite.swift.xcscheme b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/SQLite.swift.xcscheme
new file mode 100644
index 0000000..5051727
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/SQLite.swift.xcscheme
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/StoryView.xcscheme b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/StoryView.xcscheme
new file mode 100644
index 0000000..8cc7432
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/StoryView.xcscheme
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/xcschememanagement.plist b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..88f4609
--- /dev/null
+++ b/beta-link-frontend/Pods/Pods.xcodeproj/xcuserdata/xuqianzhi.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+
+
+
+
+ SchemeUserState
+
+ CYLTabBarController.xcscheme
+
+ isShown
+
+
+ Pods-beta-link-frontend.xcscheme
+
+ isShown
+
+
+ SQLite.swift.xcscheme
+
+ isShown
+
+
+ StoryView.xcscheme
+
+ isShown
+
+
+
+ SuppressBuildableAutocreation
+
+
+
diff --git a/beta-link-frontend/Pods/SQLite.swift/LICENSE.txt b/beta-link-frontend/Pods/SQLite.swift/LICENSE.txt
new file mode 100644
index 0000000..13303c1
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/LICENSE.txt
@@ -0,0 +1,21 @@
+(The MIT License)
+
+Copyright (c) 2014-2015 Stephen Celis ()
+
+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/beta-link-frontend/Pods/SQLite.swift/README.md b/beta-link-frontend/Pods/SQLite.swift/README.md
new file mode 100644
index 0000000..b7a18e0
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/README.md
@@ -0,0 +1,293 @@
+# SQLite.swift
+
+[![Build Status][TravisBadge]][TravisLink] [![CocoaPods Version][CocoaPodsVersionBadge]][CocoaPodsVersionLink] [![Swift5 compatible][Swift5Badge]][Swift5Link] [![Platform][PlatformBadge]][PlatformLink] [![Carthage compatible][CartagheBadge]][CarthageLink] [![Join the chat at https://gitter.im/stephencelis/SQLite.swift][GitterBadge]][GitterLink]
+
+A type-safe, [Swift][]-language layer over [SQLite3][].
+
+[SQLite.swift][] provides compile-time confidence in SQL statement
+syntax _and_ intent.
+
+## Features
+
+ - A pure-Swift interface
+ - A type-safe, optional-aware SQL expression builder
+ - A flexible, chainable, lazy-executing query layer
+ - Automatically-typed data access
+ - A lightweight, uncomplicated query and parameter binding interface
+ - Developer-friendly error handling and debugging
+ - [Full-text search][] support
+ - [Well-documented][See Documentation]
+ - Extensively tested
+ - [SQLCipher][] support via CocoaPods
+ - Active support at
+ [StackOverflow](http://stackoverflow.com/questions/tagged/sqlite.swift),
+ and [Gitter Chat Room](https://gitter.im/stephencelis/SQLite.swift)
+ (_experimental_)
+
+[SQLCipher]: https://www.zetetic.net/sqlcipher/
+[Full-text search]: Documentation/Index.md#full-text-search
+[See Documentation]: Documentation/Index.md#sqliteswift-documentation
+
+
+## Usage
+
+```swift
+import SQLite
+
+let db = try Connection("path/to/db.sqlite3")
+
+let users = Table("users")
+let id = Expression("id")
+let name = Expression("name")
+let email = Expression("email")
+
+try db.run(users.create { t in
+ t.column(id, primaryKey: true)
+ t.column(name)
+ t.column(email, unique: true)
+})
+// CREATE TABLE "users" (
+// "id" INTEGER PRIMARY KEY NOT NULL,
+// "name" TEXT,
+// "email" TEXT NOT NULL UNIQUE
+// )
+
+let insert = users.insert(name <- "Alice", email <- "alice@mac.com")
+let rowid = try db.run(insert)
+// INSERT INTO "users" ("name", "email") VALUES ('Alice', 'alice@mac.com')
+
+for user in try db.prepare(users) {
+ print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
+ // id: 1, name: Optional("Alice"), email: alice@mac.com
+}
+// SELECT * FROM "users"
+
+let alice = users.filter(id == rowid)
+
+try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))
+// UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com')
+// WHERE ("id" = 1)
+
+try db.run(alice.delete())
+// DELETE FROM "users" WHERE ("id" = 1)
+
+try db.scalar(users.count) // 0
+// SELECT count(*) FROM "users"
+```
+
+SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C
+API.
+
+```swift
+let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
+for email in ["betty@icloud.com", "cathy@icloud.com"] {
+ try stmt.run(email)
+}
+
+db.totalChanges // 3
+db.changes // 1
+db.lastInsertRowid // 3
+
+for row in try db.prepare("SELECT id, email FROM users") {
+ print("id: \(row[0]), email: \(row[1])")
+ // id: Optional(2), email: Optional("betty@icloud.com")
+ // id: Optional(3), email: Optional("cathy@icloud.com")
+}
+
+try db.scalar("SELECT count(*) FROM users") // 2
+```
+
+[Read the documentation][See Documentation] or explore more,
+interactively, from the Xcode project’s playground.
+
+
+
+For a more comprehensive example, see
+[this article][Create a Data Access Layer with SQLite.swift and Swift 2]
+and the [companion repository][SQLiteDataAccessLayer2].
+
+
+[Create a Data Access Layer with SQLite.swift and Swift 2]: http://masteringswift.blogspot.com/2015/09/create-data-access-layer-with.html
+[SQLiteDataAccessLayer2]: https://github.com/hoffmanjon/SQLiteDataAccessLayer2/tree/master
+
+## Installation
+
+> _Note:_ Version 0.12 requires Swift 5 (and [Xcode](https://developer.apple.com/xcode/downloads/) 10.2) or greater. Version 0.11.6 requires Swift 4.2 (and [Xcode](https://developer.apple.com/xcode/downloads/) 10.1) or greater.
+
+### Carthage
+
+[Carthage][] is a simple, decentralized dependency manager for Cocoa. To
+install SQLite.swift with Carthage:
+
+ 1. Make sure Carthage is [installed][Carthage Installation].
+
+ 2. Update your Cartfile to include the following:
+
+ ```ruby
+ github "stephencelis/SQLite.swift" ~> 0.12.0
+ ```
+
+ 3. Run `carthage update` and
+ [add the appropriate framework][Carthage Usage].
+
+
+[Carthage]: https://github.com/Carthage/Carthage
+[Carthage Installation]: https://github.com/Carthage/Carthage#installing-carthage
+[Carthage Usage]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application
+
+
+### CocoaPods
+
+[CocoaPods][] is a dependency manager for Cocoa projects. To install
+SQLite.swift with CocoaPods:
+
+ 1. Make sure CocoaPods is [installed][CocoaPods Installation]. (SQLite.swift
+ requires version 1.6.1 or greater.)
+
+ ```sh
+ # Using the default Ruby install will require you to use sudo when
+ # installing and updating gems.
+ [sudo] gem install cocoapods
+ ```
+
+ 2. Update your Podfile to include the following:
+
+ ```ruby
+ use_frameworks!
+
+ target 'YourAppTargetName' do
+ pod 'SQLite.swift', '~> 0.12.0'
+ end
+ ```
+
+ 3. Run `pod install --repo-update`.
+
+[CocoaPods]: https://cocoapods.org
+[CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started
+
+### Swift Package Manager
+
+The [Swift Package Manager][] is a tool for managing the distribution of
+Swift code.
+
+1. Add the following to your `Package.swift` file:
+
+ ```swift
+ dependencies: [
+ .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.12.0")
+ ]
+ ```
+
+2. Build your project:
+
+ ```sh
+ $ swift build
+ ```
+
+[Swift Package Manager]: https://swift.org/package-manager
+
+### Manual
+
+To install SQLite.swift as an Xcode sub-project:
+
+ 1. Drag the **SQLite.xcodeproj** file into your own project.
+ ([Submodule][], clone, or [download][] the project first.)
+
+ 
+
+ 2. In your target’s **General** tab, click the **+** button under **Linked
+ Frameworks and Libraries**.
+
+ 3. Select the appropriate **SQLite.framework** for your platform.
+
+ 4. **Add**.
+
+Some additional steps are required to install the application on an actual
+device:
+
+ 5. In the **General** tab, click the **+** button under **Embedded
+ Binaries**.
+
+ 6. Select the appropriate **SQLite.framework** for your platform.
+
+ 7. **Add**.
+
+
+[Xcode]: https://developer.apple.com/xcode/downloads/
+[Submodule]: http://git-scm.com/book/en/Git-Tools-Submodules
+[download]: https://github.com/stephencelis/SQLite.swift/archive/master.zip
+
+
+## Communication
+
+[See the planning document] for a roadmap and existing feature requests.
+
+[Read the contributing guidelines][]. The _TL;DR_ (but please; _R_):
+
+ - Need **help** or have a **general question**? [Ask on Stack
+ Overflow][] (tag `sqlite.swift`).
+ - Found a **bug** or have a **feature request**? [Open an issue][].
+ - Want to **contribute**? [Submit a pull request][].
+
+[See the planning document]: /Documentation/Planning.md
+[Read the contributing guidelines]: ./CONTRIBUTING.md#contributing
+[Ask on Stack Overflow]: http://stackoverflow.com/questions/tagged/sqlite.swift
+[Open an issue]: https://github.com/stephencelis/SQLite.swift/issues/new
+[Submit a pull request]: https://github.com/stephencelis/SQLite.swift/fork
+
+
+## Author
+
+ - [Stephen Celis](mailto:stephen@stephencelis.com)
+ ([@stephencelis](https://twitter.com/stephencelis))
+
+
+## License
+
+SQLite.swift is available under the MIT license. See [the LICENSE
+file](./LICENSE.txt) for more information.
+
+## Related
+
+These projects enhance or use SQLite.swift:
+
+ - [SQLiteMigrationManager.swift][] (inspired by
+ [FMDBMigrationManager][])
+
+
+## Alternatives
+
+Looking for something else? Try another Swift wrapper (or [FMDB][]):
+
+ - [Camembert](https://github.com/remirobert/Camembert)
+ - [GRDB](https://github.com/groue/GRDB.swift)
+ - [SQLiteDB](https://github.com/FahimF/SQLiteDB)
+ - [Squeal](https://github.com/nerdyc/Squeal)
+ - [SwiftData](https://github.com/ryanfowler/SwiftData)
+ - [SwiftSQLite](https://github.com/chrismsimpson/SwiftSQLite)
+
+[Swift]: https://swift.org/
+[SQLite3]: http://www.sqlite.org
+[SQLite.swift]: https://github.com/stephencelis/SQLite.swift
+
+[TravisBadge]: https://img.shields.io/travis/stephencelis/SQLite.swift/master.svg?style=flat
+[TravisLink]: https://travis-ci.org/stephencelis/SQLite.swift
+
+[CocoaPodsVersionBadge]: https://cocoapod-badges.herokuapp.com/v/SQLite.swift/badge.png
+[CocoaPodsVersionLink]: http://cocoadocs.org/docsets/SQLite.swift
+
+[PlatformBadge]: https://cocoapod-badges.herokuapp.com/p/SQLite.swift/badge.png
+[PlatformLink]: http://cocoadocs.org/docsets/SQLite.swift
+
+[CartagheBadge]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat
+[CarthageLink]: https://github.com/Carthage/Carthage
+
+[GitterBadge]: https://badges.gitter.im/stephencelis/SQLite.swift.svg
+[GitterLink]: https://gitter.im/stephencelis/SQLite.swift
+
+[Swift5Badge]: https://img.shields.io/badge/swift-5-orange.svg?style=flat
+[Swift5Link]: https://developer.apple.com/swift/
+
+[SQLiteMigrationManager.swift]: https://github.com/garriguv/SQLiteMigrationManager.swift
+[FMDB]: https://github.com/ccgus/fmdb
+[FMDBMigrationManager]: https://github.com/layerhq/FMDBMigrationManager
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift
new file mode 100644
index 0000000..2f5d2a1
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift
@@ -0,0 +1,60 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+public struct Blob {
+
+ public let bytes: [UInt8]
+
+ public init(bytes: [UInt8]) {
+ self.bytes = bytes
+ }
+
+ public init(bytes: UnsafeRawPointer, length: Int) {
+ let i8bufptr = UnsafeBufferPointer(start: bytes.assumingMemoryBound(to: UInt8.self), count: length)
+ self.init(bytes: [UInt8](i8bufptr))
+ }
+
+ public func toHex() -> String {
+ return bytes.map {
+ ($0 < 16 ? "0" : "") + String($0, radix: 16, uppercase: false)
+ }.joined(separator: "")
+ }
+
+}
+
+extension Blob : CustomStringConvertible {
+
+ public var description: String {
+ return "x'\(toHex())'"
+ }
+
+}
+
+extension Blob : Equatable {
+
+}
+
+public func ==(lhs: Blob, rhs: Blob) -> Bool {
+ return lhs.bytes == rhs.bytes
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift
new file mode 100644
index 0000000..1bbf7f7
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift
@@ -0,0 +1,750 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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
+import Dispatch
+#if SQLITE_SWIFT_STANDALONE
+import sqlite3
+#elseif SQLITE_SWIFT_SQLCIPHER
+import SQLCipher
+#elseif os(Linux)
+import CSQLite
+#else
+import SQLite3
+#endif
+
+/// A connection to SQLite.
+public final class Connection {
+
+ /// The location of a SQLite database.
+ public enum Location {
+
+ /// An in-memory database (equivalent to `.uri(":memory:")`).
+ ///
+ /// See:
+ case inMemory
+
+ /// A temporary, file-backed database (equivalent to `.uri("")`).
+ ///
+ /// See:
+ case temporary
+
+ /// A database located at the given URI filename (or path).
+ ///
+ /// See:
+ ///
+ /// - Parameter filename: A URI filename
+ case uri(String)
+ }
+
+ /// An SQL operation passed to update callbacks.
+ public enum Operation {
+
+ /// An INSERT operation.
+ case insert
+
+ /// An UPDATE operation.
+ case update
+
+ /// A DELETE operation.
+ case delete
+
+ fileprivate init(rawValue:Int32) {
+ switch rawValue {
+ case SQLITE_INSERT:
+ self = .insert
+ case SQLITE_UPDATE:
+ self = .update
+ case SQLITE_DELETE:
+ self = .delete
+ default:
+ fatalError("unhandled operation code: \(rawValue)")
+ }
+ }
+ }
+
+ public var handle: OpaquePointer { return _handle! }
+
+ fileprivate var _handle: OpaquePointer? = nil
+
+ /// Initializes a new SQLite connection.
+ ///
+ /// - Parameters:
+ ///
+ /// - location: The location of the database. Creates a new database if it
+ /// doesn’t already exist (unless in read-only mode).
+ ///
+ /// Default: `.inMemory`.
+ ///
+ /// - readonly: Whether or not to open the database in a read-only state.
+ ///
+ /// Default: `false`.
+ ///
+ /// - Returns: A new database connection.
+ public init(_ location: Location = .inMemory, readonly: Bool = false) throws {
+ let flags = readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
+ try check(sqlite3_open_v2(location.description, &_handle, flags | SQLITE_OPEN_FULLMUTEX, nil))
+ queue.setSpecific(key: Connection.queueKey, value: queueContext)
+ }
+
+ /// Initializes a new connection to a database.
+ ///
+ /// - Parameters:
+ ///
+ /// - filename: The location of the database. Creates a new database if
+ /// it doesn’t already exist (unless in read-only mode).
+ ///
+ /// - readonly: Whether or not to open the database in a read-only state.
+ ///
+ /// Default: `false`.
+ ///
+ /// - Throws: `Result.Error` iff a connection cannot be established.
+ ///
+ /// - Returns: A new database connection.
+ public convenience init(_ filename: String, readonly: Bool = false) throws {
+ try self.init(.uri(filename), readonly: readonly)
+ }
+
+ deinit {
+ sqlite3_close(handle)
+ }
+
+ // MARK: -
+
+ /// Whether or not the database was opened in a read-only state.
+ public var readonly: Bool { return sqlite3_db_readonly(handle, nil) == 1 }
+
+ /// The last rowid inserted into the database via this connection.
+ public var lastInsertRowid: Int64 {
+ return sqlite3_last_insert_rowid(handle)
+ }
+
+ /// The last number of changes (inserts, updates, or deletes) made to the
+ /// database via this connection.
+ public var changes: Int {
+ return Int(sqlite3_changes(handle))
+ }
+
+ /// The total number of changes (inserts, updates, or deletes) made to the
+ /// database via this connection.
+ public var totalChanges: Int {
+ return Int(sqlite3_total_changes(handle))
+ }
+
+ // MARK: - Execute
+
+ /// Executes a batch of SQL statements.
+ ///
+ /// - Parameter SQL: A batch of zero or more semicolon-separated SQL
+ /// statements.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ public func execute(_ SQL: String) throws {
+ _ = try sync { try self.check(sqlite3_exec(self.handle, SQL, nil, nil, nil)) }
+ }
+
+ // MARK: - Prepare
+
+ /// Prepares a single SQL statement (with optional parameter bindings).
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: A prepared statement.
+ public func prepare(_ statement: String, _ bindings: Binding?...) throws -> Statement {
+ if !bindings.isEmpty { return try prepare(statement, bindings) }
+ return try Statement(self, statement)
+ }
+
+ /// Prepares a single SQL statement and binds parameters to it.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: A prepared statement.
+ public func prepare(_ statement: String, _ bindings: [Binding?]) throws -> Statement {
+ return try prepare(statement).bind(bindings)
+ }
+
+ /// Prepares a single SQL statement and binds parameters to it.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A dictionary of named parameters to bind to the statement.
+ ///
+ /// - Returns: A prepared statement.
+ public func prepare(_ statement: String, _ bindings: [String: Binding?]) throws -> Statement {
+ return try prepare(statement).bind(bindings)
+ }
+
+ // MARK: - Run
+
+ /// Runs a single SQL statement (with optional parameter bindings).
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement.
+ @discardableResult public func run(_ statement: String, _ bindings: Binding?...) throws -> Statement {
+ return try run(statement, bindings)
+ }
+
+ /// Prepares, binds, and runs a single SQL statement.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement.
+ @discardableResult public func run(_ statement: String, _ bindings: [Binding?]) throws -> Statement {
+ return try prepare(statement).run(bindings)
+ }
+
+ /// Prepares, binds, and runs a single SQL statement.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A dictionary of named parameters to bind to the statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement.
+ @discardableResult public func run(_ statement: String, _ bindings: [String: Binding?]) throws -> Statement {
+ return try prepare(statement).run(bindings)
+ }
+
+ // MARK: - Scalar
+
+ /// Runs a single SQL statement (with optional parameter bindings),
+ /// returning the first value of the first row.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ statement: String, _ bindings: Binding?...) throws -> Binding? {
+ return try scalar(statement, bindings)
+ }
+
+ /// Runs a single SQL statement (with optional parameter bindings),
+ /// returning the first value of the first row.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ statement: String, _ bindings: [Binding?]) throws -> Binding? {
+ return try prepare(statement).scalar(bindings)
+ }
+
+ /// Runs a single SQL statement (with optional parameter bindings),
+ /// returning the first value of the first row.
+ ///
+ /// - Parameters:
+ ///
+ /// - statement: A single SQL statement.
+ ///
+ /// - bindings: A dictionary of named parameters to bind to the statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ statement: String, _ bindings: [String: Binding?]) throws -> Binding? {
+ return try prepare(statement).scalar(bindings)
+ }
+
+ // MARK: - Transactions
+
+ /// The mode in which a transaction acquires a lock.
+ public enum TransactionMode : String {
+
+ /// Defers locking the database till the first read/write executes.
+ case deferred = "DEFERRED"
+
+ /// Immediately acquires a reserved lock on the database.
+ case immediate = "IMMEDIATE"
+
+ /// Immediately acquires an exclusive lock on all databases.
+ case exclusive = "EXCLUSIVE"
+
+ }
+
+ // TODO: Consider not requiring a throw to roll back?
+ /// Runs a transaction with the given mode.
+ ///
+ /// - Note: Transactions cannot be nested. To nest transactions, see
+ /// `savepoint()`, instead.
+ ///
+ /// - Parameters:
+ ///
+ /// - mode: The mode in which a transaction acquires a lock.
+ ///
+ /// Default: `.deferred`
+ ///
+ /// - block: A closure to run SQL statements within the transaction.
+ /// The transaction will be committed when the block returns. The block
+ /// must throw to roll the transaction back.
+ ///
+ /// - Throws: `Result.Error`, and rethrows.
+ public func transaction(_ mode: TransactionMode = .deferred, block: () throws -> Void) throws {
+ try transaction("BEGIN \(mode.rawValue) TRANSACTION", block, "COMMIT TRANSACTION", or: "ROLLBACK TRANSACTION")
+ }
+
+ // TODO: Consider not requiring a throw to roll back?
+ // TODO: Consider removing ability to set a name?
+ /// Runs a transaction with the given savepoint name (if omitted, it will
+ /// generate a UUID).
+ ///
+ /// - SeeAlso: `transaction()`.
+ ///
+ /// - Parameters:
+ ///
+ /// - savepointName: A unique identifier for the savepoint (optional).
+ ///
+ /// - block: A closure to run SQL statements within the transaction.
+ /// The savepoint will be released (committed) when the block returns.
+ /// The block must throw to roll the savepoint back.
+ ///
+ /// - Throws: `SQLite.Result.Error`, and rethrows.
+ public func savepoint(_ name: String = UUID().uuidString, block: () throws -> Void) throws {
+ let name = name.quote("'")
+ let savepoint = "SAVEPOINT \(name)"
+
+ try transaction(savepoint, block, "RELEASE \(savepoint)", or: "ROLLBACK TO \(savepoint)")
+ }
+
+ fileprivate func transaction(_ begin: String, _ block: () throws -> Void, _ commit: String, or rollback: String) throws {
+ return try sync {
+ try self.run(begin)
+ do {
+ try block()
+ try self.run(commit)
+ } catch {
+ try self.run(rollback)
+ throw error
+ }
+ }
+ }
+
+ /// Interrupts any long-running queries.
+ public func interrupt() {
+ sqlite3_interrupt(handle)
+ }
+
+ // MARK: - Handlers
+
+ /// The number of seconds a connection will attempt to retry a statement
+ /// after encountering a busy signal (lock).
+ public var busyTimeout: Double = 0 {
+ didSet {
+ sqlite3_busy_timeout(handle, Int32(busyTimeout * 1_000))
+ }
+ }
+
+ /// Sets a handler to call after encountering a busy signal (lock).
+ ///
+ /// - Parameter callback: This block is executed during a lock in which a
+ /// busy error would otherwise be returned. It’s passed the number of
+ /// times it’s been called for this lock. If it returns `true`, it will
+ /// try again. If it returns `false`, no further attempts will be made.
+ public func busyHandler(_ callback: ((_ tries: Int) -> Bool)?) {
+ guard let callback = callback else {
+ sqlite3_busy_handler(handle, nil, nil)
+ busyHandler = nil
+ return
+ }
+
+ let box: BusyHandler = { callback(Int($0)) ? 1 : 0 }
+ sqlite3_busy_handler(handle, { callback, tries in
+ unsafeBitCast(callback, to: BusyHandler.self)(tries)
+ }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self))
+ busyHandler = box
+ }
+ fileprivate typealias BusyHandler = @convention(block) (Int32) -> Int32
+ fileprivate var busyHandler: BusyHandler?
+
+ /// Sets a handler to call when a statement is executed with the compiled
+ /// SQL.
+ ///
+ /// - Parameter callback: This block is invoked when a statement is executed
+ /// with the compiled SQL as its argument.
+ ///
+ /// db.trace { SQL in print(SQL) }
+ public func trace(_ callback: ((String) -> Void)?) {
+ #if SQLITE_SWIFT_SQLCIPHER || os(Linux)
+ trace_v1(callback)
+ #else
+ if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
+ trace_v2(callback)
+ } else {
+ trace_v1(callback)
+ }
+ #endif
+ }
+
+ fileprivate func trace_v1(_ callback: ((String) -> Void)?) {
+ guard let callback = callback else {
+ sqlite3_trace(handle, nil /* xCallback */, nil /* pCtx */)
+ trace = nil
+ return
+ }
+ let box: Trace = { (pointer: UnsafeRawPointer) in
+ callback(String(cString: pointer.assumingMemoryBound(to: UInt8.self)))
+ }
+ sqlite3_trace(handle,
+ {
+ (C: UnsafeMutableRawPointer?, SQL: UnsafePointer?) in
+ if let C = C, let SQL = SQL {
+ unsafeBitCast(C, to: Trace.self)(SQL)
+ }
+ },
+ unsafeBitCast(box, to: UnsafeMutableRawPointer.self)
+ )
+ trace = box
+ }
+
+
+
+
+ fileprivate typealias Trace = @convention(block) (UnsafeRawPointer) -> Void
+ fileprivate var trace: Trace?
+
+ /// Registers a callback to be invoked whenever a row is inserted, updated,
+ /// or deleted in a rowid table.
+ ///
+ /// - Parameter callback: A callback invoked with the `Operation` (one of
+ /// `.Insert`, `.Update`, or `.Delete`), database name, table name, and
+ /// rowid.
+ public func updateHook(_ callback: ((_ operation: Operation, _ db: String, _ table: String, _ rowid: Int64) -> Void)?) {
+ guard let callback = callback else {
+ sqlite3_update_hook(handle, nil, nil)
+ updateHook = nil
+ return
+ }
+
+ let box: UpdateHook = {
+ callback(
+ Operation(rawValue: $0),
+ String(cString: $1),
+ String(cString: $2),
+ $3
+ )
+ }
+ sqlite3_update_hook(handle, { callback, operation, db, table, rowid in
+ unsafeBitCast(callback, to: UpdateHook.self)(operation, db!, table!, rowid)
+ }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self))
+ updateHook = box
+ }
+ fileprivate typealias UpdateHook = @convention(block) (Int32, UnsafePointer, UnsafePointer, Int64) -> Void
+ fileprivate var updateHook: UpdateHook?
+
+ /// Registers a callback to be invoked whenever a transaction is committed.
+ ///
+ /// - Parameter callback: A callback invoked whenever a transaction is
+ /// committed. If this callback throws, the transaction will be rolled
+ /// back.
+ public func commitHook(_ callback: (() throws -> Void)?) {
+ guard let callback = callback else {
+ sqlite3_commit_hook(handle, nil, nil)
+ commitHook = nil
+ return
+ }
+
+ let box: CommitHook = {
+ do {
+ try callback()
+ } catch {
+ return 1
+ }
+ return 0
+ }
+ sqlite3_commit_hook(handle, { callback in
+ unsafeBitCast(callback, to: CommitHook.self)()
+ }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self))
+ commitHook = box
+ }
+ fileprivate typealias CommitHook = @convention(block) () -> Int32
+ fileprivate var commitHook: CommitHook?
+
+ /// Registers a callback to be invoked whenever a transaction rolls back.
+ ///
+ /// - Parameter callback: A callback invoked when a transaction is rolled
+ /// back.
+ public func rollbackHook(_ callback: (() -> Void)?) {
+ guard let callback = callback else {
+ sqlite3_rollback_hook(handle, nil, nil)
+ rollbackHook = nil
+ return
+ }
+
+ let box: RollbackHook = { callback() }
+ sqlite3_rollback_hook(handle, { callback in
+ unsafeBitCast(callback, to: RollbackHook.self)()
+ }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self))
+ rollbackHook = box
+ }
+ fileprivate typealias RollbackHook = @convention(block) () -> Void
+ fileprivate var rollbackHook: RollbackHook?
+
+ /// Creates or redefines a custom SQL function.
+ ///
+ /// - Parameters:
+ ///
+ /// - function: The name of the function to create or redefine.
+ ///
+ /// - argumentCount: The number of arguments that the function takes. If
+ /// `nil`, the function may take any number of arguments.
+ ///
+ /// Default: `nil`
+ ///
+ /// - deterministic: Whether or not the function is deterministic (_i.e._
+ /// the function always returns the same result for a given input).
+ ///
+ /// Default: `false`
+ ///
+ /// - block: A block of code to run when the function is called. The block
+ /// is called with an array of raw SQL values mapped to the function’s
+ /// parameters and should return a raw SQL value (or nil).
+ public func createFunction(_ function: String, argumentCount: UInt? = nil, deterministic: Bool = false, _ block: @escaping (_ args: [Binding?]) -> Binding?) {
+ let argc = argumentCount.map { Int($0) } ?? -1
+ let box: Function = { context, argc, argv in
+ let arguments: [Binding?] = (0..?) -> Void
+ fileprivate var functions = [String: [Int: Function]]()
+
+ /// Defines a new collating sequence.
+ ///
+ /// - Parameters:
+ ///
+ /// - collation: The name of the collation added.
+ ///
+ /// - block: A collation function that takes two strings and returns the
+ /// comparison result.
+ public func createCollation(_ collation: String, _ block: @escaping (_ lhs: String, _ rhs: String) -> ComparisonResult) throws {
+ let box: Collation = { (lhs: UnsafeRawPointer, rhs: UnsafeRawPointer) in
+ let lstr = String(cString: lhs.assumingMemoryBound(to: UInt8.self))
+ let rstr = String(cString: rhs.assumingMemoryBound(to: UInt8.self))
+ return Int32(block(lstr, rstr).rawValue)
+ }
+ try check(sqlite3_create_collation_v2(handle, collation, SQLITE_UTF8,
+ unsafeBitCast(box, to: UnsafeMutableRawPointer.self),
+ { (callback: UnsafeMutableRawPointer?, _, lhs: UnsafeRawPointer?, _, rhs: UnsafeRawPointer?) in /* xCompare */
+ if let lhs = lhs, let rhs = rhs {
+ return unsafeBitCast(callback, to: Collation.self)(lhs, rhs)
+ } else {
+ fatalError("sqlite3_create_collation_v2 callback called with NULL pointer")
+ }
+ }, nil /* xDestroy */))
+ collations[collation] = box
+ }
+ fileprivate typealias Collation = @convention(block) (UnsafeRawPointer, UnsafeRawPointer) -> Int32
+ fileprivate var collations = [String: Collation]()
+
+ // MARK: - Error Handling
+
+ func sync(_ block: () throws -> T) rethrows -> T {
+ if DispatchQueue.getSpecific(key: Connection.queueKey) == queueContext {
+ return try block()
+ } else {
+ return try queue.sync(execute: block)
+ }
+ }
+
+ @discardableResult func check(_ resultCode: Int32, statement: Statement? = nil) throws -> Int32 {
+ guard let error = Result(errorCode: resultCode, connection: self, statement: statement) else {
+ return resultCode
+ }
+
+ throw error
+ }
+
+ fileprivate var queue = DispatchQueue(label: "SQLite.Database", attributes: [])
+
+ fileprivate static let queueKey = DispatchSpecificKey()
+
+ fileprivate lazy var queueContext: Int = unsafeBitCast(self, to: Int.self)
+
+}
+
+extension Connection : CustomStringConvertible {
+
+ public var description: String {
+ return String(cString: sqlite3_db_filename(handle, nil))
+ }
+
+}
+
+extension Connection.Location : CustomStringConvertible {
+
+ public var description: String {
+ switch self {
+ case .inMemory:
+ return ":memory:"
+ case .temporary:
+ return ""
+ case .uri(let URI):
+ return URI
+ }
+ }
+
+}
+
+public enum Result : Error {
+
+ fileprivate static let successCodes: Set = [SQLITE_OK, SQLITE_ROW, SQLITE_DONE]
+
+ /// Represents a SQLite specific [error code](https://sqlite.org/rescode.html)
+ ///
+ /// - message: English-language text that describes the error
+ ///
+ /// - code: SQLite [error code](https://sqlite.org/rescode.html#primary_result_code_list)
+ ///
+ /// - statement: the statement which produced the error
+ case error(message: String, code: Int32, statement: Statement?)
+
+ init?(errorCode: Int32, connection: Connection, statement: Statement? = nil) {
+ guard !Result.successCodes.contains(errorCode) else { return nil }
+
+ let message = String(cString: sqlite3_errmsg(connection.handle))
+ self = .error(message: message, code: errorCode, statement: statement)
+ }
+
+}
+
+extension Result : CustomStringConvertible {
+
+ public var description: String {
+ switch self {
+ case let .error(message, errorCode, statement):
+ if let statement = statement {
+ return "\(message) (\(statement)) (code: \(errorCode))"
+ } else {
+ return "\(message) (code: \(errorCode))"
+ }
+ }
+ }
+}
+
+#if !SQLITE_SWIFT_SQLCIPHER && !os(Linux)
+@available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *)
+extension Connection {
+ fileprivate func trace_v2(_ callback: ((String) -> Void)?) {
+ guard let callback = callback else {
+ // If the X callback is NULL or if the M mask is zero, then tracing is disabled.
+ sqlite3_trace_v2(handle, 0 /* mask */, nil /* xCallback */, nil /* pCtx */)
+ trace = nil
+ return
+ }
+
+ let box: Trace = { (pointer: UnsafeRawPointer) in
+ callback(String(cString: pointer.assumingMemoryBound(to: UInt8.self)))
+ }
+ sqlite3_trace_v2(handle,
+ UInt32(SQLITE_TRACE_STMT) /* mask */,
+ {
+ // A trace callback is invoked with four arguments: callback(T,C,P,X).
+ // The T argument is one of the SQLITE_TRACE constants to indicate why the
+ // callback was invoked. The C argument is a copy of the context pointer.
+ // The P and X arguments are pointers whose meanings depend on T.
+ (T: UInt32, C: UnsafeMutableRawPointer?, P: UnsafeMutableRawPointer?, X: UnsafeMutableRawPointer?) in
+ if let P = P,
+ let expandedSQL = sqlite3_expanded_sql(OpaquePointer(P)) {
+ unsafeBitCast(C, to: Trace.self)(expandedSQL)
+ sqlite3_free(expandedSQL)
+ }
+ return Int32(0) // currently ignored
+ },
+ unsafeBitCast(box, to: UnsafeMutableRawPointer.self) /* pCtx */
+ )
+ trace = box
+ }
+}
+#endif
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift
new file mode 100644
index 0000000..3cd7ae9
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift
@@ -0,0 +1,21 @@
+import Foundation
+
+public enum QueryError: Error, CustomStringConvertible {
+ case noSuchTable(name: String)
+ case noSuchColumn(name: String, columns: [String])
+ case ambiguousColumn(name: String, similar: [String])
+ case unexpectedNullValue(name: String)
+
+ public var description: String {
+ switch self {
+ case .noSuchTable(let name):
+ return "No such table: \(name)"
+ case .noSuchColumn(let name, let columns):
+ return "No such column `\(name)` in columns \(columns)"
+ case .ambiguousColumn(let name, let similar):
+ return "Ambiguous column `\(name)` (please disambiguate: \(similar))"
+ case .unexpectedNullValue(let name):
+ return "Unexpected null value for column `\(name)`"
+ }
+ }
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift
new file mode 100644
index 0000000..dc91d3d
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift
@@ -0,0 +1,317 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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 SQLITE_SWIFT_STANDALONE
+import sqlite3
+#elseif SQLITE_SWIFT_SQLCIPHER
+import SQLCipher
+#elseif os(Linux)
+import CSQLite
+#else
+import SQLite3
+#endif
+
+/// A single SQL statement.
+public final class Statement {
+
+ fileprivate var handle: OpaquePointer? = nil
+
+ fileprivate let connection: Connection
+
+ init(_ connection: Connection, _ SQL: String) throws {
+ self.connection = connection
+ try connection.check(sqlite3_prepare_v2(connection.handle, SQL, -1, &handle, nil))
+ }
+
+ deinit {
+ sqlite3_finalize(handle)
+ }
+
+ public lazy var columnCount: Int = Int(sqlite3_column_count(self.handle))
+
+ public lazy var columnNames: [String] = (0.. Statement {
+ return bind(values)
+ }
+
+ /// Binds a list of parameters to a statement.
+ ///
+ /// - Parameter values: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: The statement object (useful for chaining).
+ public func bind(_ values: [Binding?]) -> Statement {
+ if values.isEmpty { return self }
+ reset()
+ guard values.count == Int(sqlite3_bind_parameter_count(handle)) else {
+ fatalError("\(sqlite3_bind_parameter_count(handle)) values expected, \(values.count) passed")
+ }
+ for idx in 1...values.count { bind(values[idx - 1], atIndex: idx) }
+ return self
+ }
+
+ /// Binds a dictionary of named parameters to a statement.
+ ///
+ /// - Parameter values: A dictionary of named parameters to bind to the
+ /// statement.
+ ///
+ /// - Returns: The statement object (useful for chaining).
+ public func bind(_ values: [String: Binding?]) -> Statement {
+ reset()
+ for (name, value) in values {
+ let idx = sqlite3_bind_parameter_index(handle, name)
+ guard idx > 0 else {
+ fatalError("parameter not found: \(name)")
+ }
+ bind(value, atIndex: Int(idx))
+ }
+ return self
+ }
+
+ fileprivate func bind(_ value: Binding?, atIndex idx: Int) {
+ if value == nil {
+ sqlite3_bind_null(handle, Int32(idx))
+ } else if let value = value as? Blob {
+ sqlite3_bind_blob(handle, Int32(idx), value.bytes, Int32(value.bytes.count), SQLITE_TRANSIENT)
+ } else if let value = value as? Double {
+ sqlite3_bind_double(handle, Int32(idx), value)
+ } else if let value = value as? Int64 {
+ sqlite3_bind_int64(handle, Int32(idx), value)
+ } else if let value = value as? String {
+ sqlite3_bind_text(handle, Int32(idx), value, -1, SQLITE_TRANSIENT)
+ } else if let value = value as? Int {
+ self.bind(value.datatypeValue, atIndex: idx)
+ } else if let value = value as? Bool {
+ self.bind(value.datatypeValue, atIndex: idx)
+ } else if let value = value {
+ fatalError("tried to bind unexpected value \(value)")
+ }
+ }
+
+ /// - Parameter bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement object (useful for chaining).
+ @discardableResult public func run(_ bindings: Binding?...) throws -> Statement {
+ guard bindings.isEmpty else {
+ return try run(bindings)
+ }
+
+ reset(clearBindings: false)
+ repeat {} while try step()
+ return self
+ }
+
+ /// - Parameter bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement object (useful for chaining).
+ @discardableResult public func run(_ bindings: [Binding?]) throws -> Statement {
+ return try bind(bindings).run()
+ }
+
+ /// - Parameter bindings: A dictionary of named parameters to bind to the
+ /// statement.
+ ///
+ /// - Throws: `Result.Error` if query execution fails.
+ ///
+ /// - Returns: The statement object (useful for chaining).
+ @discardableResult public func run(_ bindings: [String: Binding?]) throws -> Statement {
+ return try bind(bindings).run()
+ }
+
+ /// - Parameter bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ bindings: Binding?...) throws -> Binding? {
+ guard bindings.isEmpty else {
+ return try scalar(bindings)
+ }
+
+ reset(clearBindings: false)
+ _ = try step()
+ return row[0]
+ }
+
+ /// - Parameter bindings: A list of parameters to bind to the statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ bindings: [Binding?]) throws -> Binding? {
+ return try bind(bindings).scalar()
+ }
+
+
+ /// - Parameter bindings: A dictionary of named parameters to bind to the
+ /// statement.
+ ///
+ /// - Returns: The first value of the first row returned.
+ public func scalar(_ bindings: [String: Binding?]) throws -> Binding? {
+ return try bind(bindings).scalar()
+ }
+
+ public func step() throws -> Bool {
+ return try connection.sync { try self.connection.check(sqlite3_step(self.handle)) == SQLITE_ROW }
+ }
+
+ fileprivate func reset(clearBindings shouldClear: Bool = true) {
+ sqlite3_reset(handle)
+ if (shouldClear) { sqlite3_clear_bindings(handle) }
+ }
+
+}
+
+extension Statement : Sequence {
+
+ public func makeIterator() -> Statement {
+ reset(clearBindings: false)
+ return self
+ }
+
+}
+
+public protocol FailableIterator : IteratorProtocol {
+ func failableNext() throws -> Self.Element?
+}
+
+extension FailableIterator {
+ public func next() -> Element? {
+ return try! failableNext()
+ }
+}
+
+extension Array {
+ public init(_ failableIterator: I) throws where I.Element == Element {
+ self.init()
+ while let row = try failableIterator.failableNext() {
+ append(row)
+ }
+ }
+}
+
+extension Statement : FailableIterator {
+ public typealias Element = [Binding?]
+ public func failableNext() throws -> [Binding?]? {
+ return try step() ? Array(row) : nil
+ }
+}
+
+extension Statement : CustomStringConvertible {
+
+ public var description: String {
+ return String(cString: sqlite3_sql(handle))
+ }
+
+}
+
+public struct Cursor {
+
+ fileprivate let handle: OpaquePointer
+
+ fileprivate let columnCount: Int
+
+ fileprivate init(_ statement: Statement) {
+ handle = statement.handle!
+ columnCount = statement.columnCount
+ }
+
+ public subscript(idx: Int) -> Double {
+ return sqlite3_column_double(handle, Int32(idx))
+ }
+
+ public subscript(idx: Int) -> Int64 {
+ return sqlite3_column_int64(handle, Int32(idx))
+ }
+
+ public subscript(idx: Int) -> String {
+ return String(cString: UnsafePointer(sqlite3_column_text(handle, Int32(idx))))
+ }
+
+ public subscript(idx: Int) -> Blob {
+ if let pointer = sqlite3_column_blob(handle, Int32(idx)) {
+ let length = Int(sqlite3_column_bytes(handle, Int32(idx)))
+ return Blob(bytes: pointer, length: length)
+ } else {
+ // The return value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
+ // https://www.sqlite.org/c3ref/column_blob.html
+ return Blob(bytes: [])
+ }
+ }
+
+ // MARK: -
+
+ public subscript(idx: Int) -> Bool {
+ return Bool.fromDatatypeValue(self[idx])
+ }
+
+ public subscript(idx: Int) -> Int {
+ return Int.fromDatatypeValue(self[idx])
+ }
+
+}
+
+/// Cursors provide direct access to a statement’s current row.
+extension Cursor : Sequence {
+
+ public subscript(idx: Int) -> Binding? {
+ switch sqlite3_column_type(handle, Int32(idx)) {
+ case SQLITE_BLOB:
+ return self[idx] as Blob
+ case SQLITE_FLOAT:
+ return self[idx] as Double
+ case SQLITE_INTEGER:
+ return self[idx] as Int64
+ case SQLITE_NULL:
+ return nil
+ case SQLITE_TEXT:
+ return self[idx] as String
+ case let type:
+ fatalError("unsupported column type: \(type)")
+ }
+ }
+
+ public func makeIterator() -> AnyIterator {
+ var idx = 0
+ return AnyIterator {
+ if idx >= self.columnCount {
+ return Optional.none
+ } else {
+ idx += 1
+ return self[idx - 1]
+ }
+ }
+ }
+
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift
new file mode 100644
index 0000000..608f0ce
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift
@@ -0,0 +1,132 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+/// - Warning: `Binding` is a protocol that SQLite.swift uses internally to
+/// directly map SQLite types to Swift types.
+///
+/// Do not conform custom types to the Binding protocol. See the `Value`
+/// protocol, instead.
+public protocol Binding {}
+
+public protocol Number : Binding {}
+
+public protocol Value : Expressible { // extensions cannot have inheritance clauses
+
+ associatedtype ValueType = Self
+
+ associatedtype Datatype : Binding
+
+ static var declaredDatatype: String { get }
+
+ static func fromDatatypeValue(_ datatypeValue: Datatype) -> ValueType
+
+ var datatypeValue: Datatype { get }
+
+}
+
+extension Double : Number, Value {
+
+ public static let declaredDatatype = "REAL"
+
+ public static func fromDatatypeValue(_ datatypeValue: Double) -> Double {
+ return datatypeValue
+ }
+
+ public var datatypeValue: Double {
+ return self
+ }
+
+}
+
+extension Int64 : Number, Value {
+
+ public static let declaredDatatype = "INTEGER"
+
+ public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int64 {
+ return datatypeValue
+ }
+
+ public var datatypeValue: Int64 {
+ return self
+ }
+
+}
+
+extension String : Binding, Value {
+
+ public static let declaredDatatype = "TEXT"
+
+ public static func fromDatatypeValue(_ datatypeValue: String) -> String {
+ return datatypeValue
+ }
+
+ public var datatypeValue: String {
+ return self
+ }
+
+}
+
+extension Blob : Binding, Value {
+
+ public static let declaredDatatype = "BLOB"
+
+ public static func fromDatatypeValue(_ datatypeValue: Blob) -> Blob {
+ return datatypeValue
+ }
+
+ public var datatypeValue: Blob {
+ return self
+ }
+
+}
+
+// MARK: -
+
+extension Bool : Binding, Value {
+
+ public static var declaredDatatype = Int64.declaredDatatype
+
+ public static func fromDatatypeValue(_ datatypeValue: Int64) -> Bool {
+ return datatypeValue != 0
+ }
+
+ public var datatypeValue: Int64 {
+ return self ? 1 : 0
+ }
+
+}
+
+extension Int : Number, Value {
+
+ public static var declaredDatatype = Int64.declaredDatatype
+
+ public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int {
+ return Int(datatypeValue)
+ }
+
+ public var datatypeValue: Int64 {
+ return Int64(self)
+ }
+
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift
new file mode 100644
index 0000000..5ef84dd
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift
@@ -0,0 +1,352 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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 SWIFT_PACKAGE
+import SQLiteObjc
+#endif
+
+extension Module {
+
+ public static func FTS4(_ column: Expressible, _ more: Expressible...) -> Module {
+ return FTS4([column] + more)
+ }
+
+ public static func FTS4(_ columns: [Expressible] = [], tokenize tokenizer: Tokenizer? = nil) -> Module {
+ return FTS4(FTS4Config().columns(columns).tokenizer(tokenizer))
+ }
+
+ public static func FTS4(_ config: FTS4Config) -> Module {
+ return Module(name: "fts4", arguments: config.arguments())
+ }
+}
+
+extension VirtualTable {
+
+ /// Builds an expression appended with a `MATCH` query against the given
+ /// pattern.
+ ///
+ /// let emails = VirtualTable("emails")
+ ///
+ /// emails.filter(emails.match("Hello"))
+ /// // SELECT * FROM "emails" WHERE "emails" MATCH 'Hello'
+ ///
+ /// - Parameter pattern: A pattern to match.
+ ///
+ /// - Returns: An expression appended with a `MATCH` query against the given
+ /// pattern.
+ public func match(_ pattern: String) -> Expression {
+ return "MATCH".infix(tableName(), pattern)
+ }
+
+ public func match(_ pattern: Expression) -> Expression {
+ return "MATCH".infix(tableName(), pattern)
+ }
+
+ public func match(_ pattern: Expression) -> Expression {
+ return "MATCH".infix(tableName(), pattern)
+ }
+
+ /// Builds a copy of the query with a `WHERE … MATCH` clause.
+ ///
+ /// let emails = VirtualTable("emails")
+ ///
+ /// emails.match("Hello")
+ /// // SELECT * FROM "emails" WHERE "emails" MATCH 'Hello'
+ ///
+ /// - Parameter pattern: A pattern to match.
+ ///
+ /// - Returns: A query with the given `WHERE … MATCH` clause applied.
+ public func match(_ pattern: String) -> QueryType {
+ return filter(match(pattern))
+ }
+
+ public func match(_ pattern: Expression) -> QueryType {
+ return filter(match(pattern))
+ }
+
+ public func match(_ pattern: Expression) -> QueryType {
+ return filter(match(pattern))
+ }
+
+}
+
+public struct Tokenizer {
+
+ public static let Simple = Tokenizer("simple")
+
+ public static let Porter = Tokenizer("porter")
+
+ public static func Unicode61(removeDiacritics: Bool? = nil, tokenchars: Set = [], separators: Set = []) -> Tokenizer {
+ var arguments = [String]()
+
+ if let removeDiacritics = removeDiacritics {
+ arguments.append("removeDiacritics=\(removeDiacritics ? 1 : 0)".quote())
+ }
+
+ if !tokenchars.isEmpty {
+ let joined = tokenchars.map { String($0) }.joined(separator: "")
+ arguments.append("tokenchars=\(joined)".quote())
+ }
+
+ if !separators.isEmpty {
+ let joined = separators.map { String($0) }.joined(separator: "")
+ arguments.append("separators=\(joined)".quote())
+ }
+
+ return Tokenizer("unicode61", arguments)
+ }
+
+ public static func Custom(_ name: String) -> Tokenizer {
+ return Tokenizer(Tokenizer.moduleName.quote(), [name.quote()])
+ }
+
+ public let name: String
+
+ public let arguments: [String]
+
+ fileprivate init(_ name: String, _ arguments: [String] = []) {
+ self.name = name
+ self.arguments = arguments
+ }
+
+ fileprivate static let moduleName = "SQLite.swift"
+
+}
+
+extension Tokenizer : CustomStringConvertible {
+
+ public var description: String {
+ return ([name] + arguments).joined(separator: " ")
+ }
+
+}
+
+extension Connection {
+
+ public func registerTokenizer(_ submoduleName: String, next: @escaping (String) -> (String, Range)?) throws {
+ try check(_SQLiteRegisterTokenizer(handle, Tokenizer.moduleName, submoduleName) { (
+ input: UnsafePointer, offset: UnsafeMutablePointer, length: UnsafeMutablePointer) in
+ let string = String(cString: input)
+
+ guard let (token, range) = next(string) else { return nil }
+
+ let view:String.UTF8View = string.utf8
+
+ if let from = range.lowerBound.samePosition(in: view),
+ let to = range.upperBound.samePosition(in: view) {
+ offset.pointee += Int32(string[string.startIndex.. Self {
+ self.columnDefinitions.append((column, options))
+ return self
+ }
+
+ @discardableResult open func columns(_ columns: [Expressible]) -> Self {
+ for column in columns {
+ self.column(column)
+ }
+ return self
+ }
+
+ /// [Tokenizers](https://www.sqlite.org/fts3.html#tokenizer)
+ open func tokenizer(_ tokenizer: Tokenizer?) -> Self {
+ self.tokenizer = tokenizer
+ return self
+ }
+
+ /// [The prefix= option](https://www.sqlite.org/fts3.html#section_6_6)
+ open func prefix(_ prefix: [Int]) -> Self {
+ self.prefixes += prefix
+ return self
+ }
+
+ /// [The content= option](https://www.sqlite.org/fts3.html#section_6_2)
+ open func externalContent(_ schema: SchemaType) -> Self {
+ self.externalContentSchema = schema
+ return self
+ }
+
+ /// [Contentless FTS4 Tables](https://www.sqlite.org/fts3.html#section_6_2_1)
+ open func contentless() -> Self {
+ self.isContentless = true
+ return self
+ }
+
+ func formatColumnDefinitions() -> [Expressible] {
+ return columnDefinitions.map { $0.0 }
+ }
+
+ func arguments() -> [Expressible] {
+ return options().arguments
+ }
+
+ func options() -> Options {
+ var options = Options()
+ options.append(formatColumnDefinitions())
+ if let tokenizer = tokenizer {
+ options.append("tokenize", value: Expression(literal: tokenizer.description))
+ }
+ options.appendCommaSeparated("prefix", values:prefixes.sorted().map { String($0) })
+ if isContentless {
+ options.append("content", value: "")
+ } else if let externalContentSchema = externalContentSchema {
+ options.append("content", value: externalContentSchema.tableName())
+ }
+ return options
+ }
+
+ struct Options {
+ var arguments = [Expressible]()
+
+ @discardableResult mutating func append(_ columns: [Expressible]) -> Options {
+ arguments.append(contentsOf: columns)
+ return self
+ }
+
+ @discardableResult mutating func appendCommaSeparated(_ key: String, values: [String]) -> Options {
+ if values.isEmpty {
+ return self
+ } else {
+ return append(key, value: values.joined(separator: ","))
+ }
+ }
+
+ @discardableResult mutating func append(_ key: String, value: CustomStringConvertible?) -> Options {
+ return append(key, value: value?.description)
+ }
+
+ @discardableResult mutating func append(_ key: String, value: String?) -> Options {
+ return append(key, value: value.map { Expression($0) })
+ }
+
+ @discardableResult mutating func append(_ key: String, value: Expressible?) -> Options {
+ if let value = value {
+ arguments.append("=".join([Expression(literal: key), value]))
+ }
+ return self
+ }
+ }
+}
+
+/// Configuration for the [FTS4](https://www.sqlite.org/fts3.html) extension.
+open class FTS4Config : FTSConfig {
+ /// [The matchinfo= option](https://www.sqlite.org/fts3.html#section_6_4)
+ public enum MatchInfo : CustomStringConvertible {
+ case fts3
+ public var description: String {
+ return "fts3"
+ }
+ }
+
+ /// [FTS4 options](https://www.sqlite.org/fts3.html#fts4_options)
+ public enum Order : CustomStringConvertible {
+ /// Data structures are optimized for returning results in ascending order by docid (default)
+ case asc
+ /// FTS4 stores its data in such a way as to optimize returning results in descending order by docid.
+ case desc
+
+ public var description: String {
+ switch self {
+ case .asc: return "asc"
+ case .desc: return "desc"
+ }
+ }
+ }
+
+ var compressFunction: String?
+ var uncompressFunction: String?
+ var languageId: String?
+ var matchInfo: MatchInfo?
+ var order: Order?
+
+ override public init() {
+ }
+
+ /// [The compress= and uncompress= options](https://www.sqlite.org/fts3.html#section_6_1)
+ open func compress(_ functionName: String) -> Self {
+ self.compressFunction = functionName
+ return self
+ }
+
+ /// [The compress= and uncompress= options](https://www.sqlite.org/fts3.html#section_6_1)
+ open func uncompress(_ functionName: String) -> Self {
+ self.uncompressFunction = functionName
+ return self
+ }
+
+ /// [The languageid= option](https://www.sqlite.org/fts3.html#section_6_3)
+ open func languageId(_ columnName: String) -> Self {
+ self.languageId = columnName
+ return self
+ }
+
+ /// [The matchinfo= option](https://www.sqlite.org/fts3.html#section_6_4)
+ open func matchInfo(_ matchInfo: MatchInfo) -> Self {
+ self.matchInfo = matchInfo
+ return self
+ }
+
+ /// [FTS4 options](https://www.sqlite.org/fts3.html#fts4_options)
+ open func order(_ order: Order) -> Self {
+ self.order = order
+ return self
+ }
+
+ override func options() -> Options {
+ var options = super.options()
+ for (column, _) in (columnDefinitions.filter { $0.options.contains(.unindexed) }) {
+ options.append("notindexed", value: column)
+ }
+ options.append("languageid", value: languageId)
+ options.append("compress", value: compressFunction)
+ options.append("uncompress", value: uncompressFunction)
+ options.append("matchinfo", value: matchInfo)
+ options.append("order", value: order)
+ return options
+ }
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift
new file mode 100644
index 0000000..763927f
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift
@@ -0,0 +1,97 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+extension Module {
+ public static func FTS5(_ config: FTS5Config) -> Module {
+ return Module(name: "fts5", arguments: config.arguments())
+ }
+}
+
+/// Configuration for the [FTS5](https://www.sqlite.org/fts5.html) extension.
+///
+/// **Note:** this is currently only applicable when using SQLite.swift together with a FTS5-enabled version
+/// of SQLite.
+open class FTS5Config : FTSConfig {
+ public enum Detail : CustomStringConvertible {
+ /// store rowid, column number, term offset
+ case full
+ /// store rowid, column number
+ case column
+ /// store rowid
+ case none
+
+ public var description: String {
+ switch self {
+ case .full: return "full"
+ case .column: return "column"
+ case .none: return "none"
+ }
+ }
+ }
+
+ var detail: Detail?
+ var contentRowId: Expressible?
+ var columnSize: Int?
+
+ override public init() {
+ }
+
+ /// [External Content Tables](https://www.sqlite.org/fts5.html#section_4_4_2)
+ open func contentRowId(_ column: Expressible) -> Self {
+ self.contentRowId = column
+ return self
+ }
+
+ /// [The Columnsize Option](https://www.sqlite.org/fts5.html#section_4_5)
+ open func columnSize(_ size: Int) -> Self {
+ self.columnSize = size
+ return self
+ }
+
+ /// [The Detail Option](https://www.sqlite.org/fts5.html#section_4_6)
+ open func detail(_ detail: Detail) -> Self {
+ self.detail = detail
+ return self
+ }
+
+ override func options() -> Options {
+ var options = super.options()
+ options.append("content_rowid", value: contentRowId)
+ if let columnSize = columnSize {
+ options.append("columnsize", value: Expression(value: columnSize))
+ }
+ options.append("detail", value: detail)
+ return options
+ }
+
+ override func formatColumnDefinitions() -> [Expressible] {
+ return columnDefinitions.map { definition in
+ if definition.options.contains(.unindexed) {
+ return " ".join([definition.0, Expression(literal: "UNINDEXED")])
+ } else {
+ return definition.0
+ }
+ }
+ }
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift
new file mode 100644
index 0000000..4fc1a23
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift
@@ -0,0 +1,37 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+extension Module {
+
+ public static func RTree(_ primaryKey: Expression, _ pairs: (Expression, Expression)...) -> Module where T.Datatype == Int64, U.Datatype == Double {
+ var arguments: [Expressible] = [primaryKey]
+
+ for pair in pairs {
+ arguments.append(contentsOf: [pair.0, pair.1] as [Expressible])
+ }
+
+ return Module(name: "rtree", arguments: arguments)
+ }
+
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Foundation.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Foundation.swift
new file mode 100644
index 0000000..cfb79be
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Foundation.swift
@@ -0,0 +1,70 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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
+
+extension Data : Value {
+
+ public static var declaredDatatype: String {
+ return Blob.declaredDatatype
+ }
+
+ public static func fromDatatypeValue(_ dataValue: Blob) -> Data {
+ return Data(dataValue.bytes)
+ }
+
+ public var datatypeValue: Blob {
+ return withUnsafeBytes { (pointer: UnsafeRawBufferPointer) -> Blob in
+ return Blob(bytes: pointer.baseAddress!, length: count)
+ }
+ }
+
+}
+
+extension Date : Value {
+
+ public static var declaredDatatype: String {
+ return String.declaredDatatype
+ }
+
+ public static func fromDatatypeValue(_ stringValue: String) -> Date {
+ return dateFormatter.date(from: stringValue)!
+ }
+
+ public var datatypeValue: String {
+ return dateFormatter.string(from: self)
+ }
+
+}
+
+/// A global date formatter used to serialize and deserialize `NSDate` objects.
+/// If multiple date formats are used in an application’s database(s), use a
+/// custom `Value` type per additional format.
+public var dateFormatter: DateFormatter = {
+ let formatter = DateFormatter()
+ formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
+ formatter.locale = Locale(identifier: "en_US_POSIX")
+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
+ return formatter
+}()
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Helpers.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Helpers.swift
new file mode 100644
index 0000000..115ea5c
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Helpers.swift
@@ -0,0 +1,120 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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 SQLITE_SWIFT_STANDALONE
+import sqlite3
+#elseif SQLITE_SWIFT_SQLCIPHER
+import SQLCipher
+#elseif os(Linux)
+import CSQLite
+#else
+import SQLite3
+#endif
+
+public typealias Star = (Expression?, Expression?) -> Expression
+
+public func *(_: Expression?, _: Expression?) -> Expression {
+ return Expression(literal: "*")
+}
+
+public protocol _OptionalType {
+
+ associatedtype WrappedType
+
+}
+
+extension Optional : _OptionalType {
+
+ public typealias WrappedType = Wrapped
+
+}
+
+// let SQLITE_STATIC = unsafeBitCast(0, sqlite3_destructor_type.self)
+let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
+
+extension String {
+
+ func quote(_ mark: Character = "\"") -> String {
+ let escaped = reduce("") { string, character in
+ string + (character == mark ? "\(mark)\(mark)" : "\(character)")
+ }
+ return "\(mark)\(escaped)\(mark)"
+ }
+
+ func join(_ expressions: [Expressible]) -> Expressible {
+ var (template, bindings) = ([String](), [Binding?]())
+ for expressible in expressions {
+ let expression = expressible.expression
+ template.append(expression.template)
+ bindings.append(contentsOf: expression.bindings)
+ }
+ return Expression(template.joined(separator: self), bindings)
+ }
+
+ func infix(_ lhs: Expressible, _ rhs: Expressible, wrap: Bool = true) -> Expression {
+ let expression = Expression(" \(self) ".join([lhs, rhs]).expression)
+ guard wrap else {
+ return expression
+ }
+ return "".wrap(expression)
+ }
+
+ func prefix(_ expressions: Expressible) -> Expressible {
+ return "\(self) ".wrap(expressions) as Expression
+ }
+
+ func prefix(_ expressions: [Expressible]) -> Expressible {
+ return "\(self) ".wrap(expressions) as Expression
+ }
+
+ func wrap(_ expression: Expressible) -> Expression {
+ return Expression("\(self)(\(expression.expression.template))", expression.expression.bindings)
+ }
+
+ func wrap(_ expressions: [Expressible]) -> Expression {
+ return wrap(", ".join(expressions))
+ }
+
+}
+
+func transcode(_ literal: Binding?) -> String {
+ guard let literal = literal else { return "NULL" }
+
+ switch literal {
+ case let blob as Blob:
+ return blob.description
+ case let string as String:
+ return string.quote("'")
+ case let binding:
+ return "\(binding)"
+ }
+}
+
+func value(_ v: Binding) -> A {
+ return A.fromDatatypeValue(v as! A.Datatype) as! A
+}
+
+func value(_ v: Binding?) -> A {
+ return value(v!)
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/SQLite.h b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/SQLite.h
new file mode 100644
index 0000000..fe1e3df
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/SQLite.h
@@ -0,0 +1,6 @@
+@import Foundation;
+
+FOUNDATION_EXPORT double SQLiteVersionNumber;
+FOUNDATION_EXPORT const unsigned char SQLiteVersionString[];
+
+#import "SQLiteObjc.h"
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift
new file mode 100644
index 0000000..2ec2828
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift
@@ -0,0 +1,264 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+private enum Function: String {
+ case count
+ case max
+ case min
+ case avg
+ case sum
+ case total
+
+ func wrap(_ expression: Expressible) -> Expression {
+ return self.rawValue.wrap(expression)
+ }
+}
+
+extension ExpressionType where UnderlyingType : Value {
+
+ /// Builds a copy of the expression prefixed with the `DISTINCT` keyword.
+ ///
+ /// let name = Expression("name")
+ /// name.distinct
+ /// // DISTINCT "name"
+ ///
+ /// - Returns: A copy of the expression prefixed with the `DISTINCT`
+ /// keyword.
+ public var distinct: Expression {
+ return Expression("DISTINCT \(template)", bindings)
+ }
+
+ /// Builds a copy of the expression wrapped with the `count` aggregate
+ /// function.
+ ///
+ /// let name = Expression("name")
+ /// name.count
+ /// // count("name")
+ /// name.distinct.count
+ /// // count(DISTINCT "name")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `count` aggregate
+ /// function.
+ public var count: Expression {
+ return Function.count.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value {
+
+ /// Builds a copy of the expression prefixed with the `DISTINCT` keyword.
+ ///
+ /// let name = Expression("name")
+ /// name.distinct
+ /// // DISTINCT "name"
+ ///
+ /// - Returns: A copy of the expression prefixed with the `DISTINCT`
+ /// keyword.
+ public var distinct: Expression {
+ return Expression("DISTINCT \(template)", bindings)
+ }
+
+ /// Builds a copy of the expression wrapped with the `count` aggregate
+ /// function.
+ ///
+ /// let name = Expression("name")
+ /// name.count
+ /// // count("name")
+ /// name.distinct.count
+ /// // count(DISTINCT "name")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `count` aggregate
+ /// function.
+ public var count: Expression {
+ return Function.count.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype : Comparable {
+
+ /// Builds a copy of the expression wrapped with the `max` aggregate
+ /// function.
+ ///
+ /// let age = Expression("age")
+ /// age.max
+ /// // max("age")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `max` aggregate
+ /// function.
+ public var max: Expression {
+ return Function.max.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `min` aggregate
+ /// function.
+ ///
+ /// let age = Expression("age")
+ /// age.min
+ /// // min("age")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var min: Expression {
+ return Function.min.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value, UnderlyingType.WrappedType.Datatype : Comparable {
+
+ /// Builds a copy of the expression wrapped with the `max` aggregate
+ /// function.
+ ///
+ /// let age = Expression("age")
+ /// age.max
+ /// // max("age")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `max` aggregate
+ /// function.
+ public var max: Expression {
+ return Function.max.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `min` aggregate
+ /// function.
+ ///
+ /// let age = Expression("age")
+ /// age.min
+ /// // min("age")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var min: Expression {
+ return Function.min.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype : Number {
+
+ /// Builds a copy of the expression wrapped with the `avg` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.average
+ /// // avg("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var average: Expression {
+ return Function.avg.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `sum` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.sum
+ /// // sum("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var sum: Expression {
+ return Function.sum.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `total` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.total
+ /// // total("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var total: Expression {
+ return Function.total.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value, UnderlyingType.WrappedType.Datatype : Number {
+
+ /// Builds a copy of the expression wrapped with the `avg` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.average
+ /// // avg("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var average: Expression {
+ return Function.avg.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `sum` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.sum
+ /// // sum("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var sum: Expression {
+ return Function.sum.wrap(self)
+ }
+
+ /// Builds a copy of the expression wrapped with the `total` aggregate
+ /// function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.total
+ /// // total("salary")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `min` aggregate
+ /// function.
+ public var total: Expression {
+ return Function.total.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType == Int {
+
+ static func count(_ star: Star) -> Expression {
+ return Function.count.wrap(star(nil, nil))
+ }
+
+}
+
+/// Builds an expression representing `count(*)` (when called with the `*`
+/// function literal).
+///
+/// count(*)
+/// // count(*)
+///
+/// - Returns: An expression returning `count(*)` (when called with the `*`
+/// function literal).
+public func count(_ star: Star) -> Expression {
+ return Expression.count(star)
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift
new file mode 100644
index 0000000..c3fb931
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift
@@ -0,0 +1,340 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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
+
+extension QueryType {
+ /// Creates an `INSERT` statement by encoding the given object
+ /// This method converts any custom nested types to JSON data and does not handle any sort
+ /// of object relationships. If you want to support relationships between objects you will
+ /// have to provide your own Encodable implementations that encode the correct ids.
+ ///
+ /// - Parameters:
+ ///
+ /// - encodable: An encodable object to insert
+ ///
+ /// - userInfo: User info to be passed to encoder
+ ///
+ /// - otherSetters: Any other setters to include in the insert
+ ///
+ /// - Returns: An `INSERT` statement fort the encodable object
+ public func insert(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Insert {
+ let encoder = SQLiteEncoder(userInfo: userInfo)
+ try encodable.encode(to: encoder)
+ return self.insert(encoder.setters + otherSetters)
+ }
+
+ /// Creates an `UPDATE` statement by encoding the given object
+ /// This method converts any custom nested types to JSON data and does not handle any sort
+ /// of object relationships. If you want to support relationships between objects you will
+ /// have to provide your own Encodable implementations that encode the correct ids.
+ ///
+ /// - Parameters:
+ ///
+ /// - encodable: An encodable object to insert
+ ///
+ /// - userInfo: User info to be passed to encoder
+ ///
+ /// - otherSetters: Any other setters to include in the insert
+ ///
+ /// - Returns: An `UPDATE` statement fort the encodable object
+ public func update(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Update {
+ let encoder = SQLiteEncoder(userInfo: userInfo)
+ try encodable.encode(to: encoder)
+ return self.update(encoder.setters + otherSetters)
+ }
+}
+
+extension Row {
+ /// Decode an object from this row
+ /// This method expects any custom nested types to be in the form of JSON data and does not handle
+ /// any sort of object relationships. If you want to support relationships between objects you will
+ /// have to provide your own Decodable implementations that decodes the correct columns.
+ ///
+ /// - Parameter: userInfo
+ ///
+ /// - Returns: a decoded object from this row
+ public func decode(userInfo: [CodingUserInfoKey: Any] = [:]) throws -> V {
+ return try V(from: self.decoder(userInfo: userInfo))
+ }
+
+ public func decoder(userInfo: [CodingUserInfoKey: Any] = [:]) -> Decoder {
+ return SQLiteDecoder(row: self, userInfo: userInfo)
+ }
+}
+
+/// Generates a list of settings for an Encodable object
+fileprivate class SQLiteEncoder: Encoder {
+ class SQLiteKeyedEncodingContainer: KeyedEncodingContainerProtocol {
+ typealias Key = MyKey
+
+ let encoder: SQLiteEncoder
+ let codingPath: [CodingKey] = []
+
+ init(encoder: SQLiteEncoder) {
+ self.encoder = encoder
+ }
+
+ func superEncoder() -> Swift.Encoder {
+ fatalError("SQLiteEncoding does not support super encoders")
+ }
+
+ func superEncoder(forKey key: Key) -> Swift.Encoder {
+ fatalError("SQLiteEncoding does not support super encoders")
+ }
+
+ func encodeNil(forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- nil)
+ }
+
+ func encode(_ value: Int, forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- value)
+ }
+
+ func encode(_ value: Bool, forKey key: Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- value)
+ }
+
+ func encode(_ value: Float, forKey key: Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- Double(value))
+ }
+
+ func encode(_ value: Double, forKey key: Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- value)
+ }
+
+ func encode(_ value: String, forKey key: Key) throws {
+ self.encoder.setters.append(Expression(key.stringValue) <- value)
+ }
+
+ func encode(_ value: T, forKey key: Key) throws where T : Swift.Encodable {
+ if let data = value as? Data {
+ self.encoder.setters.append(Expression(key.stringValue) <- data)
+ }
+ else {
+ let encoded = try JSONEncoder().encode(value)
+ let string = String(data: encoded, encoding: .utf8)
+ self.encoder.setters.append(Expression(key.stringValue) <- string)
+ }
+ }
+
+ func encode(_ value: Int8, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int8 is not supported"))
+ }
+
+ func encode(_ value: Int16, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int16 is not supported"))
+ }
+
+ func encode(_ value: Int32, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int32 is not supported"))
+ }
+
+ func encode(_ value: Int64, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int64 is not supported"))
+ }
+
+ func encode(_ value: UInt, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt is not supported"))
+ }
+
+ func encode(_ value: UInt8, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt8 is not supported"))
+ }
+
+ func encode(_ value: UInt16, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt16 is not supported"))
+ }
+
+ func encode(_ value: UInt32, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt32 is not supported"))
+ }
+
+ func encode(_ value: UInt64, forKey key: Key) throws {
+ throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt64 is not supported"))
+ }
+
+ func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer where NestedKey : CodingKey {
+ fatalError("encoding a nested container is not supported")
+ }
+
+ func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer {
+ fatalError("encoding nested values is not supported")
+ }
+ }
+
+ fileprivate var setters: [Setter] = []
+ let codingPath: [CodingKey] = []
+ let userInfo: [CodingUserInfoKey: Any]
+
+ init(userInfo: [CodingUserInfoKey: Any]) {
+ self.userInfo = userInfo
+ }
+
+ func singleValueContainer() -> SingleValueEncodingContainer {
+ fatalError("not supported")
+ }
+
+ func unkeyedContainer() -> UnkeyedEncodingContainer {
+ fatalError("not supported")
+ }
+
+ func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key : CodingKey {
+ return KeyedEncodingContainer(SQLiteKeyedEncodingContainer(encoder: self))
+ }
+}
+
+fileprivate class SQLiteDecoder : Decoder {
+ class SQLiteKeyedDecodingContainer : KeyedDecodingContainerProtocol {
+ typealias Key = MyKey
+
+ let codingPath: [CodingKey] = []
+ let row: Row
+
+ init(row: Row) {
+ self.row = row
+ }
+
+ var allKeys: [Key] {
+ return self.row.columnNames.keys.compactMap({Key(stringValue: $0)})
+ }
+
+ func contains(_ key: Key) -> Bool {
+ return self.row.hasValue(for: key.stringValue)
+ }
+
+ func decodeNil(forKey key: Key) throws -> Bool {
+ return !self.contains(key)
+ }
+
+ func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool {
+ return try self.row.get(Expression(key.stringValue))
+ }
+
+ func decode(_ type: Int.Type, forKey key: Key) throws -> Int {
+ return try self.row.get(Expression(key.stringValue))
+ }
+
+ func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int8 is not supported"))
+ }
+
+ func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int16 is not supported"))
+ }
+
+ func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int32 is not supported"))
+ }
+
+ func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported"))
+ }
+
+ func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt is not supported"))
+
+ }
+
+ func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt8 is not supported"))
+ }
+
+ func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt16 is not supported"))
+ }
+
+ func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt32 is not supported"))
+ }
+
+ func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported"))
+ }
+
+ func decode(_ type: Float.Type, forKey key: Key) throws -> Float {
+ return Float(try self.row.get(Expression(key.stringValue)))
+ }
+
+ func decode(_ type: Double.Type, forKey key: Key) throws -> Double {
+ return try self.row.get(Expression(key.stringValue))
+ }
+
+ func decode(_ type: String.Type, forKey key: Key) throws -> String {
+ return try self.row.get(Expression(key.stringValue))
+ }
+
+ func decode(_ type: T.Type, forKey key: Key) throws -> T where T: Swift.Decodable {
+ if type == Data.self {
+ let data = try self.row.get(Expression(key.stringValue))
+ return data as! T
+ }
+ guard let JSONString = try self.row.get(Expression(key.stringValue)) else {
+ throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "an unsupported type was found"))
+ }
+ guard let data = JSONString.data(using: .utf8) else {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "invalid utf8 data found"))
+ }
+ return try JSONDecoder().decode(type, from: data)
+ }
+
+ func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer where NestedKey : CodingKey {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding nested containers is not supported"))
+ }
+
+ func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding unkeyed containers is not supported"))
+ }
+
+ func superDecoder() throws -> Swift.Decoder {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super encoders containers is not supported"))
+ }
+
+ func superDecoder(forKey key: Key) throws -> Swift.Decoder {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super decoders is not supported"))
+ }
+ }
+
+ let row: Row
+ let codingPath: [CodingKey] = []
+ let userInfo: [CodingUserInfoKey: Any]
+
+ init(row: Row, userInfo: [CodingUserInfoKey: Any]) {
+ self.row = row
+ self.userInfo = userInfo
+ }
+
+ func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer where Key : CodingKey {
+ return KeyedDecodingContainer(SQLiteKeyedDecodingContainer(row: self.row))
+ }
+
+ func unkeyedContainer() throws -> UnkeyedDecodingContainer {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an unkeyed container is not supported"))
+ }
+
+ func singleValueContainer() throws -> SingleValueDecodingContainer {
+ throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding a single value container is not supported"))
+ }
+}
+
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift
new file mode 100644
index 0000000..e2ff9d1
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift
@@ -0,0 +1,69 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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.
+//
+
+/// A collating function used to compare to strings.
+///
+/// - SeeAlso:
+public enum Collation {
+
+ /// Compares string by raw data.
+ case binary
+
+ /// Like binary, but folds uppercase ASCII letters into their lowercase
+ /// equivalents.
+ case nocase
+
+ /// Like binary, but strips trailing space.
+ case rtrim
+
+ /// A custom collating sequence identified by the given string, registered
+ /// using `Database.create(collation:…)`
+ case custom(String)
+
+}
+
+extension Collation : Expressible {
+
+ public var expression: Expression {
+ return Expression(literal: description)
+ }
+
+}
+
+extension Collation : CustomStringConvertible {
+
+ public var description : String {
+ switch self {
+ case .binary:
+ return "BINARY"
+ case .nocase:
+ return "NOCASE"
+ case .rtrim:
+ return "RTRIM"
+ case .custom(let collation):
+ return collation.quote()
+ }
+ }
+
+}
diff --git a/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift
new file mode 100644
index 0000000..068dcf0
--- /dev/null
+++ b/beta-link-frontend/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift
@@ -0,0 +1,796 @@
+//
+// SQLite.swift
+// https://github.com/stephencelis/SQLite.swift
+// Copyright © 2014-2015 Stephen Celis.
+//
+// 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
+
+private enum Function: String {
+ case abs
+ case round
+ case random
+ case randomblob
+ case zeroblob
+ case length
+ case lower
+ case upper
+ case ltrim
+ case rtrim
+ case trim
+ case replace
+ case substr
+ case like = "LIKE"
+ case `in` = "IN"
+ case glob = "GLOB"
+ case match = "MATCH"
+ case regexp = "REGEXP"
+ case collate = "COLLATE"
+ case ifnull
+
+ func infix(_ lhs: Expressible, _ rhs: Expressible, wrap: Bool = true) -> Expression {
+ return self.rawValue.infix(lhs, rhs, wrap: wrap)
+ }
+
+ func wrap(_ expression: Expressible) -> Expression {
+ return self.rawValue.wrap(expression)
+ }
+
+ func wrap(_ expressions: [Expressible]) -> Expression {
+ return self.rawValue.wrap(", ".join(expressions))
+ }
+}
+
+extension ExpressionType where UnderlyingType : Number {
+
+ /// Builds a copy of the expression wrapped with the `abs` function.
+ ///
+ /// let x = Expression("x")
+ /// x.absoluteValue
+ /// // abs("x")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `abs` function.
+ public var absoluteValue : Expression {
+ return Function.abs.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Number {
+
+ /// Builds a copy of the expression wrapped with the `abs` function.
+ ///
+ /// let x = Expression("x")
+ /// x.absoluteValue
+ /// // abs("x")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `abs` function.
+ public var absoluteValue : Expression {
+ return Function.abs.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType == Double {
+
+ /// Builds a copy of the expression wrapped with the `round` function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.round()
+ /// // round("salary")
+ /// salary.round(2)
+ /// // round("salary", 2)
+ ///
+ /// - Returns: A copy of the expression wrapped with the `round` function.
+ public func round(_ precision: Int? = nil) -> Expression {
+ guard let precision = precision else {
+ return Function.round.wrap([self])
+ }
+ return Function.round.wrap([self, Int(precision)])
+ }
+
+}
+
+extension ExpressionType where UnderlyingType == Double? {
+
+ /// Builds a copy of the expression wrapped with the `round` function.
+ ///
+ /// let salary = Expression("salary")
+ /// salary.round()
+ /// // round("salary")
+ /// salary.round(2)
+ /// // round("salary", 2)
+ ///
+ /// - Returns: A copy of the expression wrapped with the `round` function.
+ public func round(_ precision: Int? = nil) -> Expression {
+ guard let precision = precision else {
+ return Function.round.wrap(self)
+ }
+ return Function.round.wrap([self, Int(precision)])
+ }
+
+}
+
+extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype == Int64 {
+
+ /// Builds an expression representing the `random` function.
+ ///
+ /// Expression.random()
+ /// // random()
+ ///
+ /// - Returns: An expression calling the `random` function.
+ public static func random() -> Expression {
+ return Function.random.wrap([])
+ }
+
+}
+
+extension ExpressionType where UnderlyingType == Data {
+
+ /// Builds an expression representing the `randomblob` function.
+ ///
+ /// Expression.random(16)
+ /// // randomblob(16)
+ ///
+ /// - Parameter length: Length in bytes.
+ ///
+ /// - Returns: An expression calling the `randomblob` function.
+ public static func random(_ length: Int) -> Expression {
+ return Function.randomblob.wrap([])
+ }
+
+ /// Builds an expression representing the `zeroblob` function.
+ ///
+ /// Expression.allZeros(16)
+ /// // zeroblob(16)
+ ///
+ /// - Parameter length: Length in bytes.
+ ///
+ /// - Returns: An expression calling the `zeroblob` function.
+ public static func allZeros(_ length: Int) -> Expression {
+ return Function.zeroblob.wrap([])
+ }
+
+ /// Builds a copy of the expression wrapped with the `length` function.
+ ///
+ /// let data = Expression("data")
+ /// data.length
+ /// // length("data")
+ ///
+ /// - Returns: A copy of the expression wrapped with the `length` function.
+ public var length: Expression {
+ return Function.length.wrap(self)
+ }
+
+}
+
+extension ExpressionType where UnderlyingType == Data? {
+
+ /// Builds a copy of the expression wrapped with the `length` function.
+ ///
+ /// let data = Expression