Explorar el Código

add prebuilt framework for those who want to use it manually without a jailbreak

Kevin Bradley hace 5 años
padre
commit
aa3650e839
Se han modificado 100 ficheros con 4099 adiciones y 2 borrados
  1. 1 2
      README.md
  2. BIN
      layout/Library/Frameworks/FLEX.framework/Cursor.png
  3. BIN
      layout/Library/Frameworks/FLEX.framework/FLEX
  4. 15 0
      layout/Library/Frameworks/FLEX.framework/Headers/CALayer+FLEX.h
  5. 27 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Categories.h
  6. 23 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Core.h
  7. 30 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEX-ObjectExploring.h
  8. 25 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Runtime.h
  9. 25 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEX.h
  10. 81 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXAlert.h
  11. 58 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXBlockDescription.h
  12. 19 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXBlockShortcuts.h
  13. 18 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXBundleShortcuts.h
  14. 80 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXClassBuilder.h
  15. 17 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXClassShortcuts.h
  16. 17 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXCodeFontCell.h
  17. 93 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXCollectionContentSection.h
  18. 16 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXColorPreviewSection.h
  19. 27 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXDefaultsContentSection.h
  20. 58 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXExplorerToolbar.h
  21. 44 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXExplorerToolbarItem.h
  22. 89 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXFilteringTableViewController.h
  23. 105 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXGlobalsEntry.h
  24. 16 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXImageShortcuts.h
  25. 47 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXIvar.h
  26. 13 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXKeyValueTableViewCell.h
  27. 15 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXLayerShortcuts.h
  28. 93 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMacros.h
  29. 67 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager+Extensibility.h
  30. 40 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager+Networking.h
  31. 43 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager.h
  32. 37 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMetadataSection.h
  33. 96 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMethod.h
  34. 43 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMethodBase.h
  35. 60 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMirror.h
  36. 24 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMultilineTableViewCell.h
  37. 58 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXMutableListSection.h
  38. 19 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXNavigationController.h
  39. 73 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjcInternal.h
  40. 73 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorer.h
  41. 30 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorerFactory.h
  42. 54 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorerViewController.h
  43. 19 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectInfoSection.h
  44. 134 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXProperty.h
  45. 110 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXPropertyAttributes.h
  46. 69 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXProtocol.h
  47. 41 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXProtocolBuilder.h
  48. 59 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXResources.h
  49. 29 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntime+Compare.h
  50. 94 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntime+UIKitHelpers.h
  51. 79 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntimeConstants.h
  52. 56 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntimeSafety.h
  53. 20 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXScopeCarousel.h
  54. 71 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcut.h
  55. 27 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcutsFactory+Defaults.h
  56. 125 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcutsSection.h
  57. 28 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXSingleRowSection.h
  58. 14 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXSubtitleTableViewCell.h
  59. 48 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableView.h
  60. 23 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewCell.h
  61. 149 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewController.h
  62. 149 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewSection.h
  63. 46 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXTypeEncodingParser.h
  64. 15 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXViewControllerShortcuts.h
  65. 14 0
      layout/Library/Frameworks/FLEX.framework/Headers/FLEXViewShortcuts.h
  66. 32 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSArray+FLEX.h
  67. 21 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSDictionary+ObjcRuntime.h
  68. 20 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSMapTable+FLEX_Subscripting.h
  69. 240 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSObject+FLEX_Reflection.h
  70. 33 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSString+FLEX.h
  71. 23 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSString+ObjcRuntime.h
  72. 19 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSTimer+FLEX.h
  73. 44 0
      layout/Library/Frameworks/FLEX.framework/Headers/NSUserDefaults+FLEX.h
  74. 38 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIBarButtonItem+FLEX.h
  75. 17 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIFont+FLEX.h
  76. 21 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIGestureRecognizer+Blocks.h
  77. 19 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIMenu+FLEX.h
  78. 16 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIPasteboard+FLEX.h
  79. 14 0
      layout/Library/Frameworks/FLEX.framework/Headers/UITextField+Range.h
  80. 27 0
      layout/Library/Frameworks/FLEX.framework/Headers/UIView+FLEX_Layout.h
  81. BIN
      layout/Library/Frameworks/FLEX.framework/Info.plist
  82. 21 0
      layout/Library/Frameworks/FLEX.framework/LICENSE
  83. 6 0
      layout/Library/Frameworks/FLEX.framework/Modules/module.modulemap
  84. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputColorView.h
  85. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputDateView.h
  86. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputFontView.h
  87. 12 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputFontsPickerView.h
  88. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputNotSupportedView.h
  89. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputNumberView.h
  90. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputObjectView.h
  91. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputStringView.h
  92. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputStructView.h
  93. 13 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputSwitchView.h
  94. 24 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputTextView.h
  95. 64 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputView.h
  96. 24 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputViewFactory.h
  97. 21 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXDefaultEditorViewController.h
  98. 20 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFieldEditorView.h
  99. 18 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFileBrowserController.h
  100. 0 0
      layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFileBrowserSearchOperation.h

+ 1 - 2
README.md

@@ -12,8 +12,7 @@
 - When in selection mode double tap on play/pause will bring up an alert with useful options (show views, details and move view are available there)
 - When in selection mode double tap on play/pause will bring up an alert with useful options (show views, details and move view are available there)
 
 
 ### Missing features - on support road map
 ### Missing features - on support road map
-- anything with a slider or switch view will appear empty in the places those elements appear
-- any view with a UIPickerView or date picker will either crash / render strangely (i stubbed those elements out with fake elements to get it building.)
+- anything with a slider variable will not work properly yet
 
 
 ### Patch notes
 ### Patch notes
 
 

BIN
layout/Library/Frameworks/FLEX.framework/Cursor.png


BIN
layout/Library/Frameworks/FLEX.framework/FLEX


+ 15 - 0
layout/Library/Frameworks/FLEX.framework/Headers/CALayer+FLEX.h

@@ -0,0 +1,15 @@
+//
+//  CALayer+FLEX.h
+//  FLEX
+//
+//  Created by Tanner on 2/28/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <QuartzCore/QuartzCore.h>
+
+@interface CALayer (FLEX)
+
+@property (nonatomic) BOOL flex_continuousCorners;
+
+@end

+ 27 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Categories.h

@@ -0,0 +1,27 @@
+//
+//  FLEX-Categories.h
+//  FLEX
+//
+//  Created by Tanner on 3/12/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+
+
+#import <FLEX/UIBarButtonItem+FLEX.h>
+#import <FLEX/CALayer+FLEX.h>
+#import <FLEX/UIFont+FLEX.h>
+#import <FLEX/UIGestureRecognizer+Blocks.h>
+#import <FLEX/UIView+FLEX_Layout.h>
+#import <FLEX/UIPasteboard+FLEX.h>
+#import <FLEX/UIMenu+FLEX.h>
+#import <FLEX/UITextField+Range.h>
+
+#import <FLEX/NSObject+FLEX_Reflection.h>
+#import <FLEX/NSArray+FLEX.h>
+#import <FLEX/NSDictionary+ObjcRuntime.h>
+#import <FLEX/NSString+ObjcRuntime.h>
+#import <FLEX/NSString+FLEX.h>
+#import <FLEX/NSUserDefaults+FLEX.h>
+#import <FLEX/NSMapTable+FLEX_Subscripting.h>
+#import <FLEX/NSTimer+FLEX.h>

+ 23 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Core.h

@@ -0,0 +1,23 @@
+//
+//  FLEX-Core.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <FLEX/FLEXFilteringTableViewController.h>
+#import <FLEX/FLEXNavigationController.h>
+#import <FLEX/FLEXTableViewController.h>
+#import <FLEX/FLEXTableView.h>
+
+#import <FLEX/FLEXSingleRowSection.h>
+#import <FLEX/FLEXTableViewSection.h>
+
+#import <FLEX/FLEXCodeFontCell.h>
+#import <FLEX/FLEXSubtitleTableViewCell.h>
+#import <FLEX/FLEXTableViewCell.h>
+#import <FLEX/FLEXMultilineTableViewCell.h>
+#import <FLEX/FLEXKeyValueTableViewCell.h>
+
+#import <FLEX/FLEXScopeCarousel.h>

+ 30 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEX-ObjectExploring.h

@@ -0,0 +1,30 @@
+//
+//  FLEX-ObjectExploring.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <FLEX/FLEXObjectExplorerFactory.h>
+#import <FLEX/FLEXObjectExplorerViewController.h>
+
+#import <FLEX/FLEXObjectExplorer.h>
+
+#import <FLEX/FLEXShortcut.h>
+#import <FLEX/FLEXShortcutsFactory+Defaults.h>
+#import <FLEX/FLEXShortcutsSection.h>
+#import <FLEX/FLEXBlockShortcuts.h>
+#import <FLEX/FLEXBundleShortcuts.h>
+#import <FLEX/FLEXClassShortcuts.h>
+#import <FLEX/FLEXImageShortcuts.h>
+#import <FLEX/FLEXLayerShortcuts.h>
+#import <FLEX/FLEXViewControllerShortcuts.h>
+#import <FLEX/FLEXViewShortcuts.h>
+
+#import <FLEX/FLEXCollectionContentSection.h>
+#import <FLEX/FLEXColorPreviewSection.h>
+#import <FLEX/FLEXDefaultsContentSection.h>
+#import <FLEX/FLEXMetadataSection.h>
+#import <FLEX/FLEXMutableListSection.h>
+#import <FLEX/FLEXObjectInfoSection.h>

+ 25 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEX-Runtime.h

@@ -0,0 +1,25 @@
+//
+//  FLEX-Runtime.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <FLEX/FLEXObjcInternal.h>
+#import <FLEX/FLEXRuntimeSafety.h>
+#import <FLEX/FLEXBlockDescription.h>
+#import <FLEX/FLEXTypeEncodingParser.h>
+
+#import <FLEX/FLEXMirror.h>
+#import <FLEX/FLEXProtocol.h>
+#import <FLEX/FLEXProperty.h>
+#import <FLEX/FLEXIvar.h>
+#import <FLEX/FLEXMethodBase.h>
+#import <FLEX/FLEXMethod.h>
+#import <FLEX/FLEXPropertyAttributes.h>
+#import <FLEX/FLEXRuntime+Compare.h>
+#import <FLEX/FLEXRuntime+UIKitHelpers.h>
+
+#import <FLEX/FLEXProtocolBuilder.h>
+#import <FLEX/FLEXClassBuilder.h>

+ 25 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEX.h

@@ -0,0 +1,25 @@
+//
+//  FLEX.h
+//  FLEX
+//
+//  Created by Eric Horacek on 7/18/15.
+//  Modified by Tanner Bennett on 3/12/20.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <FLEX/FLEXManager.h>
+#import <FLEX/FLEXManager+Extensibility.h>
+#import <FLEX/FLEXManager+Networking.h>
+
+#import <FLEX/FLEXExplorerToolbar.h>
+#import <FLEX/FLEXExplorerToolbarItem.h>
+#import <FLEX/FLEXGlobalsEntry.h>
+
+#import <FLEX/FLEX-Core.h>
+#import <FLEX/FLEX-Runtime.h>
+#import <FLEX/FLEX-Categories.h>
+#import <FLEX/FLEX-ObjectExploring.h>
+
+#import <FLEX/FLEXMacros.h>
+#import <FLEX/FLEXAlert.h>
+#import <FLEX/FLEXResources.h>

+ 81 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXAlert.h

@@ -0,0 +1,81 @@
+//
+//  FLEXAlert.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/20/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class FLEXAlert, FLEXAlertAction;
+
+typedef void (^FLEXAlertReveal)(void);
+typedef void (^FLEXAlertBuilder)(FLEXAlert *make);
+typedef FLEXAlert *(^FLEXAlertStringProperty)(NSString *);
+typedef FLEXAlert *(^FLEXAlertStringArg)(NSString *);
+typedef FLEXAlert *(^FLEXAlertTextField)(void(^configurationHandler)(UITextField *textField));
+typedef FLEXAlertAction *(^FLEXAlertAddAction)(NSString *title);
+typedef FLEXAlertAction *(^FLEXAlertActionStringProperty)(NSString *);
+typedef FLEXAlertAction *(^FLEXAlertActionProperty)(void);
+typedef FLEXAlertAction *(^FLEXAlertActionBOOLProperty)(BOOL);
+typedef FLEXAlertAction *(^FLEXAlertActionHandler)(void(^handler)(NSArray<NSString *> *strings));
+
+@interface FLEXAlert : NSObject
+
+/// Shows a simple alert with one button which says "Dismiss"
++ (void)showAlert:(NSString *)title message:(NSString *)message from:(UIViewController *)viewController;
+
+/// Construct and display an alert
++ (void)makeAlert:(FLEXAlertBuilder)block showFrom:(UIViewController *)viewController;
+/// Construct and display an action sheet-style alert
++ (void)makeSheet:(FLEXAlertBuilder)block
+         showFrom:(UIViewController *)viewController
+           source:(id)viewOrBarItem;
+
+/// Construct an alert
++ (UIAlertController *)makeAlert:(FLEXAlertBuilder)block;
+/// Construct an action sheet-style alert
++ (UIAlertController *)makeSheet:(FLEXAlertBuilder)block;
+
+/// Set the alert's title.
+///
+/// Call in succession to append strings to the title.
+@property (nonatomic, readonly) FLEXAlertStringProperty title;
+/// Set the alert's message.
+///
+/// Call in succession to append strings to the message.
+@property (nonatomic, readonly) FLEXAlertStringProperty message;
+/// Add a button with a given title with the default style and no action.
+@property (nonatomic, readonly) FLEXAlertAddAction button;
+/// Add a text field with the given (optional) placeholder text.
+@property (nonatomic, readonly) FLEXAlertStringArg textField;
+/// Add and configure the given text field.
+///
+/// Use this if you need to more than set the placeholder, such as
+/// supply a delegate, make it secure entry, or change other attributes.
+@property (nonatomic, readonly) FLEXAlertTextField configuredTextField;
+
+@end
+
+@interface FLEXAlertAction : NSObject
+
+/// Set the action's title.
+///
+/// Call in succession to append strings to the title.
+@property (nonatomic, readonly) FLEXAlertActionStringProperty title;
+/// Make the action destructive. It appears with red text.
+@property (nonatomic, readonly) FLEXAlertActionProperty destructiveStyle;
+/// Make the action cancel-style. It appears with a bolder font.
+@property (nonatomic, readonly) FLEXAlertActionProperty cancelStyle;
+/// Enable or disable the action. Enabled by default.
+@property (nonatomic, readonly) FLEXAlertActionBOOLProperty enabled;
+/// Give the button an action. The action takes an array of text field strings.
+@property (nonatomic, readonly) FLEXAlertActionHandler handler;
+/// Access the underlying UIAlertAction, should you need to change it while
+/// the encompassing alert is being displayed. For example, you may want to
+/// enable or disable a button based on the input of some text fields in the alert.
+/// Do not call this more than once per instance.
+@property (nonatomic, readonly) UIAlertAction *action;
+
+@end

+ 58 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXBlockDescription.h

@@ -0,0 +1,58 @@
+//
+//  FLEXBlockDescription.h
+//  FLEX
+//
+//  Created by Oliver Letterer on 2012-09-01
+//  Forked from CTObjectiveCRuntimeAdditions (MIT License)
+//  https://github.com/ebf/CTObjectiveCRuntimeAdditions
+//
+//  Copyright (c) 2020 FLEX Team-EDV Beratung Föllmer GmbH
+//  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/Foundation.h>
+
+typedef NS_OPTIONS(NSUInteger, FLEXBlockOptions) {
+   FLEXBlockOptionHasCopyDispose = (1 << 25),
+   FLEXBlockOptionHasCtor        = (1 << 26), // helpers have C++ code
+   FLEXBlockOptionIsGlobal       = (1 << 28),
+   FLEXBlockOptionHasStret       = (1 << 29), // IFF BLOCK_HAS_SIGNATURE
+   FLEXBlockOptionHasSignature   = (1 << 30),
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark -
+@interface FLEXBlockDescription : NSObject
+
++ (instancetype)describing:(id)block;
+
+@property (nonatomic, readonly, nullable) NSMethodSignature *signature;
+@property (nonatomic, readonly, nullable) NSString *signatureString;
+@property (nonatomic, readonly, nullable) NSString *sourceDeclaration;
+@property (nonatomic, readonly) FLEXBlockOptions flags;
+@property (nonatomic, readonly) NSUInteger size;
+@property (nonatomic, readonly) NSString *summary;
+@property (nonatomic, readonly) id block;
+
+- (BOOL)isCompatibleForBlockSwizzlingWithMethodSignature:(NSMethodSignature *)methodSignature;
+
+@end
+
+#pragma mark -
+@interface NSBlock : NSObject
+- (void)invoke;
+@end
+
+NS_ASSUME_NONNULL_END

+ 19 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXBlockShortcuts.h

@@ -0,0 +1,19 @@
+//
+// FLEXBlockShortcuts.h
+//  FLEX
+//
+//  Created by Tanner on 1/30/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provides a description of the block's signature
+/// and access to an NSMethodSignature of the block
+@interface FLEXBlockShortcuts : FLEXShortcutsSection
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXBundleShortcuts.h

@@ -0,0 +1,18 @@
+//
+//  FLEXBundleShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/12/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provides a "Browse Bundle Directory" action
+@interface FLEXBundleShortcuts : FLEXShortcutsSection
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 80 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXClassBuilder.h

@@ -0,0 +1,80 @@
+//
+//  FLEXClassBuilder.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/3/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class FLEXIvarBuilder, FLEXMethodBase, FLEXProperty, FLEXProtocol;
+
+
+#pragma mark FLEXClassBuilder
+@interface FLEXClassBuilder : NSObject
+
+@property (nonatomic, readonly) Class workingClass;
+
+/// Begins constructing a class with the given name.
+///
+/// This new class will implicitly inherits from \c NSObject with \c 0 extra bytes.
+/// Classes created this way must be registered with \c -registerClass before being used.
++ (instancetype)allocateClass:(NSString *)name;
+/// Begins constructing a class with the given name and superclass.
+/// @discussion Calls \c -allocateClass:superclass:extraBytes: with \c 0 extra bytes.
+/// Classes created this way must be registered with \c -registerClass before being used.
++ (instancetype)allocateClass:(NSString *)name superclass:(Class)superclass;
+/// Begins constructing a new class object with the given name and superclass.
+/// @discussion Pass \c nil to \e superclass to create a new root class.
+/// Classes created this way must be registered with \c -registerClass before being used.
++ (instancetype)allocateClass:(NSString *)name superclass:(Class)superclass extraBytes:(size_t)bytes;
+/// Begins constructing a new root class object with the given name and \c 0 extra bytes.
+/// @discussion Classes created this way must be registered with \c -registerClass before being used.
++ (instancetype)allocateRootClass:(NSString *)name;
+/// Use this to modify existing classes. @warning You cannot add instance variables to existing classes.
++ (instancetype)builderForClass:(Class)cls;
+
+/// @return Any methods that failed to be added.
+- (NSArray<FLEXMethodBase *> *)addMethods:(NSArray<FLEXMethodBase *> *)methods;
+/// @return Any properties that failed to be added.
+- (NSArray<FLEXProperty *> *)addProperties:(NSArray<FLEXProperty *> *)properties;
+/// @return Any protocols that failed to be added.
+- (NSArray<FLEXProtocol *> *)addProtocols:(NSArray<FLEXProtocol *> *)protocols;
+/// @warning Adding Ivars to existing classes is not supported and will always fail.
+- (NSArray<FLEXIvarBuilder *> *)addIvars:(NSArray<FLEXIvarBuilder *> *)ivars;
+
+/// Finalizes construction of a new class.
+/// @discussion Once a class is registered, instance variables cannot be added.
+/// @note Raises an exception if called on a previously registered class.
+- (Class)registerClass;
+/// Uses \c objc_lookupClass to determine if the working class is registered.
+@property (nonatomic, readonly) BOOL isRegistered;
+
+@end
+
+
+#pragma mark FLEXIvarBuilder
+@interface FLEXIvarBuilder : NSObject
+
+/// Consider using the \c FLEXIvarBuilderWithNameAndType() macro below. 
+/// @param name The name of the Ivar, such as \c \@"_value".
+/// @param size The size of the Ivar. Usually \c sizeof(type). For objects, this is \c sizeof(id).
+/// @param alignment The alignment of the Ivar. Usually \c log2(sizeof(type)).
+/// @param encoding The type encoding of the Ivar. For objects, this is \c \@(\@encode(id)), and for others it is \c \@(\@encode(type)).
++ (instancetype)name:(NSString *)name size:(size_t)size alignment:(uint8_t)alignment typeEncoding:(NSString *)encoding;
+
+@property (nonatomic, readonly) NSString *name;
+@property (nonatomic, readonly) NSString *encoding;
+@property (nonatomic, readonly) size_t   size;
+@property (nonatomic, readonly) uint8_t  alignment;
+
+@end
+
+
+#define FLEXIvarBuilderWithNameAndType(nameString, type) [FLEXIvarBuilder \
+    name:nameString \
+    size:sizeof(type) \
+    alignment:log2(sizeof(type)) \
+    typeEncoding:@(@encode(type)) \
+]

+ 17 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXClassShortcuts.h

@@ -0,0 +1,17 @@
+//
+//  FLEXClassShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 11/22/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+/// Provides handy shortcuts for class objects.
+/// This is the default section used for all class objects.
+@interface FLEXClassShortcuts : FLEXShortcutsSection
+
++ (instancetype)forObject:(Class)cls;
+
+@end

+ 17 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXCodeFontCell.h

@@ -0,0 +1,17 @@
+//
+//  FLEXCodeFontCell.h
+//  FLEX
+//
+//  Created by Tanner on 12/27/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXMultilineTableViewCell.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXCodeFontCell : FLEXMultilineDetailTableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 93 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXCollectionContentSection.h

@@ -0,0 +1,93 @@
+//
+//  FLEXCollectionContentSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/28/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewSection.h"
+#import "FLEXObjectInfoSection.h"
+@class FLEXCollectionContentSection, FLEXTableViewCell;
+@protocol FLEXCollection, FLEXMutableCollection;
+
+/// Any foundation collection implicitly conforms to FLEXCollection.
+/// This future should return one. We don't explicitly put FLEXCollection
+/// here because making generic collections conform to FLEXCollection breaks
+/// compile-time features of generic arrays, such as \c someArray[0].property
+typedef id<NSObject, NSFastEnumeration /* FLEXCollection */>(^FLEXCollectionContentFuture)(__kindof FLEXCollectionContentSection *section);
+
+#pragma mark Collection
+/// A protocol that enables \c FLEXCollectionContentSection to operate on any arbitrary collection.
+/// \c NSArray, \c NSDictionary, \c NSSet, and \c NSOrderedSet all conform to this protocol.
+@protocol FLEXCollection <NSObject, NSFastEnumeration>
+
+@property (nonatomic, readonly) NSUInteger count;
+
+- (id)copy;
+- (id)mutableCopy;
+
+@optional
+
+/// Unordered, unkeyed collections must implement this
+@property (nonatomic, readonly) NSArray *allObjects;
+/// Keyed collections must implement this and \c objectForKeyedSubscript:
+@property (nonatomic, readonly) NSArray *allKeys;
+
+/// Ordered, indexed collections must implement this.
+- (id)objectAtIndexedSubscript:(NSUInteger)idx;
+/// Keyed, unordered collections must implement this and \c allKeys
+- (id)objectForKeyedSubscript:(id)idx;
+
+@end
+
+@protocol FLEXMutableCollection <FLEXCollection>
+- (void)filterUsingPredicate:(NSPredicate *)predicate;
+@end
+
+
+#pragma mark - FLEXCollectionContentSection
+/// A custom section for viewing collection elements.
+///
+/// Tapping on a row pushes an object explorer for that element.
+@interface FLEXCollectionContentSection<__covariant ObjectType> : FLEXTableViewSection <FLEXObjectInfoSection> {
+    @protected
+    /// Unused if initialized with a future
+    id<FLEXCollection> _collection;
+    /// Unused if initialized with a collection
+    FLEXCollectionContentFuture _collectionFuture;
+    /// The filtered collection from \c _collection or \c _collectionFuture
+    id<FLEXCollection> _cachedCollection;
+}
+
++ (instancetype)forCollection:(id)collection;
+/// The future given should be safe to call more than once.
+/// The result of calling this future multiple times may yield
+/// different results each time if the data is changing by nature.
++ (instancetype)forReusableFuture:(FLEXCollectionContentFuture)collectionFuture;
+
+/// Defaults to \c NO
+@property (nonatomic) BOOL hideSectionTitle;
+/// Defaults to \c nil
+@property (nonatomic, copy) NSString *customTitle;
+/// Defaults to \c NO
+///
+/// Settings this to \c NO will not display the element index for ordered collections.
+/// This property only applies to \c NSArray or \c NSOrderedSet and their subclasses.
+@property (nonatomic) BOOL hideOrderIndexes;
+
+/// Set this property to provide a custom filter matcher.
+///
+/// By default, the collection will filter on the title and subtitle of the row.
+/// So if you don't ever call \c configureCell: for example, you will need to set
+/// this property so that your filter logic will match how you're setting up the cell. 
+@property (nonatomic) BOOL (^customFilter)(NSString *filterText, ObjectType element);
+
+/// Get the object in the collection associated with the given row.
+/// For dictionaries, this returns the value, not the key.
+- (ObjectType)objectForRow:(NSInteger)row;
+
+/// Subclasses may override.
+- (UITableViewCellAccessoryType)accessoryTypeForRow:(NSInteger)row;
+
+@end

+ 16 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXColorPreviewSection.h

@@ -0,0 +1,16 @@
+//
+//  FLEXColorPreviewSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/12/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXSingleRowSection.h"
+#import "FLEXObjectInfoSection.h"
+
+@interface FLEXColorPreviewSection : FLEXSingleRowSection <FLEXObjectInfoSection>
+
++ (instancetype)forObject:(UIColor *)color;
+
+@end

+ 27 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXDefaultsContentSection.h

@@ -0,0 +1,27 @@
+//
+//  FLEXDefaultsContentSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/28/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXCollectionContentSection.h"
+#import "FLEXObjectInfoSection.h"
+
+@interface FLEXDefaultsContentSection : FLEXCollectionContentSection <FLEXObjectInfoSection>
+
+/// Uses \c NSUserDefaults.standardUserDefaults
++ (instancetype)standard;
++ (instancetype)forDefaults:(NSUserDefaults *)userDefaults;
+
+/// Whether or not to filter out keys not present in the app's user defaults file.
+///
+/// This is useful for filtering out some useless keys that seem to appear
+/// in every app's defaults but are never actually used or touched by the app.
+/// Only applies to instances using \c NSUserDefaults.standardUserDefaults.
+/// This is the default for any instance using \c standardUserDefaults, so
+/// you must opt-out in those instances if you don't want this behavior.
+@property (nonatomic) BOOL onlyShowKeysForAppPrefs;
+
+@end

+ 58 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXExplorerToolbar.h

@@ -0,0 +1,58 @@
+//
+//  FLEXExplorerToolbar.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 4/4/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class FLEXExplorerToolbarItem;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Users of the toolbar can configure the enabled state
+/// and event target/actions for each item.
+@interface FLEXExplorerToolbar : UIView
+
+/// The items to be displayed in the toolbar. Defaults to:
+/// globalsItem, hierarchyItem, selectItem, moveItem, closeItem
+@property (nonatomic, copy) NSArray<FLEXExplorerToolbarItem *> *toolbarItems;
+
+/// Toolbar item for selecting views.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *selectItem;
+
+/// Toolbar item for presenting a list with the view hierarchy.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *hierarchyItem;
+
+/// Toolbar item for moving views.
+/// Its \c sibling is the \c lastTabItem
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *moveItem;
+
+/// Toolbar item for presenting the currently active tab.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *recentItem;
+
+/// Toolbar item for presenting a screen with various tools for inspecting the app.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *globalsItem;
+
+/// Toolbar item for hiding the explorer.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *closeItem;
+
+/// A view for moving the entire toolbar.
+/// Users of the toolbar can attach a pan gesture recognizer to decide how to reposition the toolbar.
+@property (nonatomic, readonly) UIView *dragHandle;
+
+/// A color matching the overlay on color on the selected view.
+@property (nonatomic) UIColor *selectedViewOverlayColor;
+
+/// Description text for the selected view displayed below the toolbar items.
+@property (nonatomic, copy) NSString *selectedViewDescription;
+
+/// Area where details of the selected view are shown
+/// Users of the toolbar can attach a tap gesture recognizer to show additional details.
+@property (nonatomic, readonly) UIView *selectedViewDescriptionContainer;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 44 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXExplorerToolbarItem.h

@@ -0,0 +1,44 @@
+//
+//  FLEXExplorerToolbarItem.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 4/4/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXExplorerToolbarItem : UIButton
+
++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image;
+
+/// @param backupItem a toolbar item to use in place of this item when it becomes disabled.
+/// Items without a sibling item exhibit expected behavior when they become disabled, and are greyed out.
++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(nullable FLEXExplorerToolbarItem *)backupItem;
+
+/// If a toolbar item has a sibling, the item will replace itself with its
+/// sibling when it becomes disabled, and vice versa when it becomes enabled again.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *sibling;
+
+/// When a toolbar item has a sibling and it becomes disabled, the sibling is the view
+/// that should be added to or removed from a new or existing toolbar. This property
+/// alleviates the programmer from determining whether to use \c item or \c item.sibling
+/// or \c item.sibling.sibling and so on. Yes, sibling items can also have siblings so
+/// that each item which becomes disabled may present another item in its place, creating
+/// a "stack" of toolbar items. This behavior is useful for making buttons which occupy
+/// the same space under different states.
+///
+/// With this in mind, you should never access a stored toolbar item's view properties
+/// such as \c frame or \c superview directly; you should access them on \c currentItem.
+/// If you are trying to modify the frame of an item, and the item itself is not currently
+/// displayed but instead its sibling is being displayed, then your changes could be ignored.
+///
+/// @return the result of the item's sibling's \c currentItem,
+/// if this item has a sibling and this item is disabled, otherwise this item.
+@property (nonatomic, readonly) FLEXExplorerToolbarItem *currentItem;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 89 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXFilteringTableViewController.h

@@ -0,0 +1,89 @@
+//
+//  FLEXFilteringTableViewController.h
+//  FLEX
+//
+//  Created by Tanner on 3/9/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewController.h"
+
+#pragma mark - FLEXTableViewFiltering
+@protocol FLEXTableViewFiltering <FLEXSearchResultsUpdating>
+
+/// An array of visible, "filtered" sections. For example,
+/// if you have 3 sections in \c allSections and the user searches
+/// for something that matches rows in only one section, then
+/// this property would only contain that on matching section.
+@property (nonatomic, copy) NSArray<FLEXTableViewSection *> *sections;
+/// An array of all possible sections. Empty sections are to be removed
+/// and the resulting array stored in the \c section property. Setting
+/// this property should immediately set \c sections to \c nonemptySections 
+///
+/// Do not manually initialize this property, it will be
+/// initialized for you using the result of \c makeSections.
+@property (nonatomic, copy) NSArray<FLEXTableViewSection *> *allSections;
+
+/// This computed property should filter \c allSections for assignment to \c sections
+@property (nonatomic, readonly, copy) NSArray<FLEXTableViewSection *> *nonemptySections;
+
+/// This should be able to re-initialize \c allSections
+- (NSArray<FLEXTableViewSection *> *)makeSections;
+
+@end
+
+
+#pragma mark - FLEXFilteringTableViewController
+/// A table view which implements \c UITableView* methods using arrays of
+/// \c FLEXTableViewSection objects provied by a special delegate.
+@interface FLEXFilteringTableViewController : FLEXTableViewController <FLEXTableViewFiltering>
+
+/// Stores the current search query.
+@property (nonatomic, copy) NSString *filterText;
+
+/// This property is set to \c self by default.
+///
+/// This property is used to power almost all of the table view's data source
+/// and delegate methods automatically, including row and section filtering
+/// when the user searches, 3D Touch context menus, row selection, etc.
+///
+/// Setting this property will also set \c searchDelegate to that object.
+@property (nonatomic, weak) id<FLEXTableViewFiltering> filterDelegate;
+
+/// Defaults to \c NO. If enabled, all filtering will be done by calling
+/// \c onBackgroundQueue:thenOnMainQueue: with the UI updated on the main queue.
+@property (nonatomic) BOOL filterInBackground;
+
+/// Defaults to \c NO. If enabled, one • will be supplied as an index title for each section.
+@property (nonatomic) BOOL wantsSectionIndexTitles;
+
+/// Recalculates the non-empty sections and reloads the table view.
+///
+/// Subclasses may override to perform additional reloading logic,
+/// such as calling \c -reloadSections if needed. Be sure to call
+/// \c super after any logic that would affect the appearance of 
+/// the table view, since the table view is reloaded last.
+///
+/// Called at the end of this class's implementation of \c updateSearchResults:
+- (void)reloadData;
+
+/// Invoke this method to call \c -reloadData on each section
+/// in \c self.filterDelegate.allSections.
+- (void)reloadSections;
+
+#pragma mark FLEXTableViewFiltering
+
+@property (nonatomic, copy) NSArray<FLEXTableViewSection *> *sections;
+@property (nonatomic, copy) NSArray<FLEXTableViewSection *> *allSections;
+
+/// Subclasses can override to hide specific sections under certain conditions
+/// if using \c self as the \c filterDelegate, as is the default.
+///
+/// For example, the object explorer hides the description section when searching.
+@property (nonatomic, readonly, copy) NSArray<FLEXTableViewSection *> *nonemptySections;
+
+/// If using \c self as the \c filterDelegate, as is the default,
+/// subclasses should override to provide the sections for the table view.
+- (NSArray<FLEXTableViewSection *> *)makeSections;
+
+@end

+ 105 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXGlobalsEntry.h

@@ -0,0 +1,105 @@
+//
+//  FLEXGlobalsEntry.h
+//  FLEX
+//
+//  Created by Javier Soto on 7/26/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) {
+    FLEXGlobalsRowProcessInfo,
+    FLEXGlobalsRowNetworkHistory,
+    FLEXGlobalsRowSystemLog,
+    FLEXGlobalsRowLiveObjects,
+    FLEXGlobalsRowAddressInspector,
+    FLEXGlobalsRowCookies,
+    FLEXGlobalsRowBrowseRuntime,
+    FLEXGlobalsRowAppKeychainItems,
+    FLEXGlobalsRowAppDelegate,
+    FLEXGlobalsRowRootViewController,
+    FLEXGlobalsRowUserDefaults,
+    FLEXGlobalsRowMainBundle,
+    FLEXGlobalsRowBrowseBundle,
+    FLEXGlobalsRowBrowseContainer,
+    FLEXGlobalsRowApplication,
+    FLEXGlobalsRowKeyWindow,
+    FLEXGlobalsRowMainScreen,
+    FLEXGlobalsRowCurrentDevice,
+    FLEXGlobalsRowPasteboard,
+    FLEXGlobalsRowURLSession,
+    FLEXGlobalsRowURLCache,
+    FLEXGlobalsRowNotificationCenter,
+    FLEXGlobalsRowMenuController,
+    FLEXGlobalsRowFileManager,
+    FLEXGlobalsRowTimeZone,
+    FLEXGlobalsRowLocale,
+    FLEXGlobalsRowCalendar,
+    FLEXGlobalsRowMainRunLoop,
+    FLEXGlobalsRowMainThread,
+    FLEXGlobalsRowOperationQueue,
+    FLEXGlobalsRowCount
+};
+
+typedef NSString * _Nonnull (^FLEXGlobalsEntryNameFuture)(void);
+/// Simply return a view controller to be pushed on the navigation stack
+typedef UIViewController * _Nullable (^FLEXGlobalsEntryViewControllerFuture)(void);
+/// Do something like present an alert, then use the host
+/// view controller to present or push another view controller.
+typedef void (^FLEXGlobalsEntryRowAction)(__kindof UITableViewController * _Nonnull host);
+
+/// For view controllers to conform to to indicate they support being used
+/// in the globals table view controller. These methods help create concrete entries.
+///
+/// Previously, the concrete entries relied on "futures" for the view controller and title.
+/// With this protocol, the conforming class itself can act as a future, since the methods
+/// will not be invoked until the title and view controller / row action are needed.
+///
+/// Entries can implement \c globalsEntryViewController: to unconditionally provide a
+/// view controller, or \c globalsEntryRowAction: to conditionally provide one and
+/// perform some action (such as present an alert) if no view controller is available,
+/// or both if there is a mix of rows where some are guaranteed to work and some are not.
+/// Where both are implemented, \c globalsEntryRowAction: takes precedence; if it returns
+/// an action for the requested row, that will be used instead of \c globalsEntryViewController:
+@protocol FLEXGlobalsEntry <NSObject>
+
++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row;
+
+// Must respond to at least one of the below.
+// globalsEntryRowAction: takes precedence if both are implemented.
+@optional
+
++ (nullable UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row;
++ (nullable FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row;
+
+@end
+
+@interface FLEXGlobalsEntry : NSObject
+
+@property (nonatomic, readonly, nonnull)  FLEXGlobalsEntryNameFuture entryNameFuture;
+@property (nonatomic, readonly, nullable) FLEXGlobalsEntryViewControllerFuture viewControllerFuture;
+@property (nonatomic, readonly, nullable) FLEXGlobalsEntryRowAction rowAction;
+
++ (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry row:(FLEXGlobalsRow)row;
+
++ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
+               viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture;
+
++ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
+                             action:(FLEXGlobalsEntryRowAction)rowSelectedAction;
+
+@end
+
+
+@interface NSObject (FLEXGlobalsEntry)
+
+/// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:]
+/// if the class conforms to FLEXGlobalsEntry, else, nil.
++ (nullable FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 16 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXImageShortcuts.h

@@ -0,0 +1,16 @@
+//
+//  FLEXImageShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/29/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+/// Provides "view image" and "save image" shortcuts for UIImage objects
+@interface FLEXImageShortcuts : FLEXShortcutsSection
+
++ (instancetype)forObject:(UIImage *)image;
+
+@end

+ 47 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXIvar.h

@@ -0,0 +1,47 @@
+//
+//  FLEXIvar.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/30/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+
+@interface FLEXIvar : NSObject
+
++ (instancetype)ivar:(Ivar)ivar;
++ (instancetype)named:(NSString *)name onClass:(Class)cls;
+
+/// The underlying \c Ivar data structure.
+@property (nonatomic, readonly) Ivar             objc_ivar;
+
+/// The name of the instance variable.
+@property (nonatomic, readonly) NSString         *name;
+/// The type of the instance variable.
+@property (nonatomic, readonly) FLEXTypeEncoding type;
+/// The type encoding string of the instance variable.
+@property (nonatomic, readonly) NSString         *typeEncoding;
+/// The offset of the instance variable.
+@property (nonatomic, readonly) NSInteger        offset;
+/// The size of the instance variable. 0 if unknown.
+@property (nonatomic, readonly) NSUInteger       size;
+/// Describes the type encoding, size, offset, and objc_ivar
+@property (nonatomic, readonly) NSString        *details;
+/// The full path of the image that contains this ivar definition,
+/// or \c nil if this ivar was probably defined at runtime.
+@property (nonatomic, readonly) NSString        *imagePath;
+
+/// For internal use
+@property (nonatomic) id tag;
+
+- (id)getValue:(id)target;
+- (void)setValue:(id)value onObject:(id)target;
+
+/// Calls into -getValue: and passes that value into
+/// -[FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:type:]
+/// and returns the result
+- (id)getPotentiallyUnboxedValue:(id)target;
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXKeyValueTableViewCell.h

@@ -0,0 +1,13 @@
+//
+//  FLEXKeyValueTableViewCell.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 1/23/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewCell.h"
+
+@interface FLEXKeyValueTableViewCell : FLEXTableViewCell
+
+@end

+ 15 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXLayerShortcuts.h

@@ -0,0 +1,15 @@
+//
+//  FLEXLayerShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/12/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+@interface FLEXLayerShortcuts : FLEXShortcutsSection
+
++ (instancetype)forObject:(CALayer *)layer;
+
+@end

+ 93 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMacros.h

@@ -0,0 +1,93 @@
+//
+//  FLEXMacros.h
+//  FLEX
+//
+//  Created by Tanner on 3/12/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#ifndef FLEXMacros_h
+#define FLEXMacros_h
+
+#define flex_keywordify class NSObject;
+#define ctor flex_keywordify __attribute__((constructor)) void __flex_ctor_##__LINE__()
+#define dtor flex_keywordify __attribute__((destructor)) void __flex_dtor_##__LINE__()
+
+// A macro to check if we are running in a test environment
+#define FLEX_IS_TESTING() (NSClassFromString(@"XCTest") != nil)
+
+/// Whether we want the majority of constructors to run upon load or not.
+extern BOOL FLEXConstructorsShouldRun(void);
+
+/// A macro to return from the current procedure if we don't want to run constructors
+#define FLEX_EXIT_IF_NO_CTORS() if (!FLEXConstructorsShouldRun()) return;
+
+/// Rounds down to the nearest "point" coordinate
+NS_INLINE CGFloat FLEXFloor(CGFloat x) {
+    return floor(UIScreen.mainScreen.scale * (x)) / UIScreen.mainScreen.scale;
+}
+
+/// Returns the given number of points in pixels
+NS_INLINE CGFloat FLEXPointsToPixels(CGFloat points) {
+    return points / UIScreen.mainScreen.scale;
+}
+
+/// Creates a CGRect with all members rounded down to the nearest "point" coordinate
+NS_INLINE CGRect FLEXRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) {
+    return CGRectMake(FLEXFloor(x), FLEXFloor(y), FLEXFloor(width), FLEXFloor(height));
+}
+
+/// Adjusts the origin of an existing rect
+NS_INLINE CGRect FLEXRectSetOrigin(CGRect r, CGPoint origin) {
+    r.origin = origin; return r;
+}
+
+/// Adjusts the size of an existing rect
+NS_INLINE CGRect FLEXRectSetSize(CGRect r, CGSize size) {
+    r.size = size; return r;
+}
+
+/// Adjusts the origin.x of an existing rect
+NS_INLINE CGRect FLEXRectSetX(CGRect r, CGFloat x) {
+    r.origin.x = x; return r;
+}
+
+/// Adjusts the origin.y of an existing rect
+NS_INLINE CGRect FLEXRectSetY(CGRect r, CGFloat y) {
+    r.origin.y = y ; return r;
+}
+
+/// Adjusts the size.width of an existing rect
+NS_INLINE CGRect FLEXRectSetWidth(CGRect r, CGFloat width) {
+    r.size.width = width; return r;
+}
+
+/// Adjusts the size.height of an existing rect
+NS_INLINE CGRect FLEXRectSetHeight(CGRect r, CGFloat height) {
+    r.size.height = height; return r;
+}
+
+#ifdef __IPHONE_13_0
+#define FLEX_AT_LEAST_IOS13_SDK (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0)
+#else
+#define FLEX_AT_LEAST_IOS13_SDK NO
+#endif
+
+#define FLEXPluralString(count, plural, singular) [NSString \
+    stringWithFormat:@"%@ %@", @(count), (count == 1 ? singular : plural) \
+]
+
+#define FLEXPluralFormatString(count, pluralFormat, singularFormat) [NSString \
+    stringWithFormat:(count == 1 ? singularFormat : pluralFormat), @(count)  \
+]
+
+#define flex_dispatch_after(nSeconds, onQueue, block) \
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, \
+    (int64_t)(nSeconds * NSEC_PER_SEC)), onQueue, block)
+
+#define DLog(format, ...) CFShow((__bridge CFStringRef)[NSString stringWithFormat:format, ## __VA_ARGS__]);
+#define LOG_SELF        NSLog(@"[FLEXLog] %@ %@", self, NSStringFromSelector(_cmd))
+#define FXLog(format, ...) NSLog(@"[FLEXLog] %@",[NSString stringWithFormat:format, ## __VA_ARGS__]);
+#define DLOG_SELF DLog(@"%@ %@", self, NSStringFromSelector(_cmd))
+
+#endif /* FLEXMacros_h */

+ 67 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager+Extensibility.h

@@ -0,0 +1,67 @@
+//
+//  FLEXManager+Extensibility.h
+//  FLEX
+//
+//  Created by Tanner on 2/2/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXManager (Extensibility)
+
+#pragma mark - Globals Screen Entries
+
+/// Adds an entry at the bottom of the list of Global State items.
+/// Call this method before this view controller is displayed.
+/// @param entryName The string to be displayed in the cell.
+/// @param objectFutureBlock When you tap on the row, information about the object returned
+/// by this block will be displayed. Passing a block that returns an object allows you to display
+/// information about an object whose actual pointer may change at runtime (e.g. +currentUser)
+/// @note This method must be called from the main thread.
+/// The objectFutureBlock will be invoked from the main thread and may return nil.
+/// @note The passed block will be copied and retain for the duration of the application,
+/// you may want to use __weak references.
+- (void)registerGlobalEntryWithName:(NSString *)entryName objectFutureBlock:(id (^)(void))objectFutureBlock;
+
+/// Adds an entry at the bottom of the list of Global State items.
+/// Call this method before this view controller is displayed.
+/// @param entryName The string to be displayed in the cell.
+/// @param viewControllerFutureBlock When you tap on the row, view controller returned
+/// by this block will be pushed on the navigation controller stack.
+/// @note This method must be called from the main thread.
+/// The viewControllerFutureBlock will be invoked from the main thread and may not return nil.
+/// @note The passed block will be copied and retain for the duration of the application,
+/// you may want to use __weak references.
+- (void)registerGlobalEntryWithName:(NSString *)entryName
+          viewControllerFutureBlock:(UIViewController * (^)(void))viewControllerFutureBlock;
+
+/// Removes all registered global entries.
+- (void)clearGlobalEntries;
+
+#pragma mark - Simulator Shortcuts
+
+/// Simulator keyboard shortcuts are enabled by default.
+/// The shortcuts will not fire when there is an active text field, text view, or other responder
+/// accepting key input. You can disable keyboard shortcuts if you have existing keyboard shortcuts
+/// that conflict with FLEX, or if you like doing things the hard way ;)
+/// Keyboard shortcuts are always disabled (and support is #if'd out) in non-simulator builds
+@property (nonatomic) BOOL simulatorShortcutsEnabled;
+
+/// Adds an action to run when the specified key & modifier combination is pressed
+/// @param key A single character string matching a key on the keyboard
+/// @param modifiers Modifier keys such as shift, command, or alt/option
+/// @param action The block to run on the main thread when the key & modifier combination is recognized.
+/// @param description Shown the the keyboard shortcut help menu, which is accessed via the '?' key.
+/// @note The action block will be retained for the duration of the application. You may want to use weak references.
+/// @note FLEX registers several default keyboard shortcuts. Use the '?' key to see a list of shortcuts.
+- (void)registerSimulatorShortcutWithKey:(NSString *)key
+                               modifiers:(UIKeyModifierFlags)modifiers
+                                  action:(dispatch_block_t)action
+                             description:(NSString *)description;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 40 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager+Networking.h

@@ -0,0 +1,40 @@
+//
+//  FLEXManager+Networking.h
+//  FLEX
+//
+//  Created by Tanner on 2/1/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXManager (Networking)
+
+/// If this property is set to YES, FLEX will swizzle NSURLConnection*Delegate and NSURLSession*Delegate methods
+/// on classes that conform to the protocols. This allows you to view network activity history from the main FLEX menu.
+/// Full responses are kept temporarily in a size-limited cache and may be pruned under memory pressure.
+@property (nonatomic, getter=isNetworkDebuggingEnabled) BOOL networkDebuggingEnabled;
+
+/// Defaults to 25 MB if never set. Values set here are persisted across launches of the app.
+/// The response cache uses an NSCache, so it may purge prior to hitting the limit when the app is under memory pressure.
+@property (nonatomic) NSUInteger networkResponseCacheByteLimit;
+
+/// Requests whose host ends with one of the blacklisted entries in this array will be not be recorded (eg. google.com).
+/// Wildcard or subdomain entries are not required (eg. google.com will match any subdomain under google.com).
+/// Useful to remove requests that are typically noisy, such as analytics requests that you aren't interested in tracking.
+@property (nonatomic) NSMutableArray<NSString *> *networkRequestHostBlacklist;
+
+/// Sets custom viewer for specific content type.
+/// @param contentType Mime type like application/json
+/// @param viewControllerFutureBlock Viewer (view controller) creation block
+/// @note This method must be called from the main thread.
+/// The viewControllerFutureBlock will be invoked from the main thread and may not return nil.
+/// @note The passed block will be copied and retain for the duration of the application, you may want to use __weak references.
+- (void)setCustomViewerForContentType:(NSString *)contentType
+            viewControllerFutureBlock:(FLEXCustomContentViewerFuture)viewControllerFutureBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXManager.h

@@ -0,0 +1,43 @@
+//
+//  FLEXManager.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 4/4/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXExplorerToolbar.h"
+
+#if !FLEX_AT_LEAST_IOS13_SDK
+@class UIWindowScene;
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXManager : NSObject
+
+@property (nonatomic, readonly, class) FLEXManager *sharedManager;
+
+@property (nonatomic, readonly) BOOL isHidden;
+@property (nonatomic, readonly) FLEXExplorerToolbar *toolbar;
+
+- (void)showExplorer;
+- (void)hideExplorer;
+- (void)toggleExplorer;
+
+/// Use this to present the explorer in a specific scene when the one
+/// it chooses by default is not the one you wish to display it in.
+- (void)showExplorerFromScene:(UIWindowScene *)scene API_AVAILABLE(ios(13.0));
+
+#pragma mark - Misc
+
+/// Default database password is @c nil by default.
+/// Set this to the password you want the databases to open with.
+@property (copy, nonatomic) NSString *defaultSqliteDatabasePassword;
+
+@end
+
+
+typedef UIViewController * _Nullable(^FLEXCustomContentViewerFuture)(NSData *data);
+
+NS_ASSUME_NONNULL_END

+ 37 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMetadataSection.h

@@ -0,0 +1,37 @@
+//
+//  FLEXMetadataSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 9/19/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewSection.h"
+#import "FLEXObjectExplorer.h"
+
+typedef NS_ENUM(NSUInteger, FLEXMetadataKind) {
+    FLEXMetadataKindProperties = 1,
+    FLEXMetadataKindClassProperties,
+    FLEXMetadataKindIvars,
+    FLEXMetadataKindMethods,
+    FLEXMetadataKindClassMethods,
+    FLEXMetadataKindClassHierarchy,
+    FLEXMetadataKindProtocols,
+    FLEXMetadataKindOther
+};
+
+/// This section is used for displaying ObjC runtime metadata
+/// about a class or object, such as listing methods, properties, etc.
+@interface FLEXMetadataSection : FLEXTableViewSection
+
++ (instancetype)explorer:(FLEXObjectExplorer *)explorer kind:(FLEXMetadataKind)metadataKind;
+
+@property (nonatomic, readonly) FLEXMetadataKind metadataKind;
+
+/// The names of metadata to exclude. Useful if you wish to group specific
+/// properties or methods together in their own section outside of this one.
+///
+/// Setting this property calls \c reloadData on this section.
+@property (nonatomic) NSSet<NSString *> *excludedMetadata;
+
+@end

+ 96 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMethod.h

@@ -0,0 +1,96 @@
+//
+//  FLEXMethod.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/30/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+#import "FLEXMethodBase.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A class representing a concrete method which already exists in a class.
+/// This class contains helper methods for swizzling or invoking the method.
+///
+/// Any of the initializers will return nil if the type encoding
+/// of the method is unsupported by `NSMethodSignature`. In general,
+/// any method whose return type or parameters involve a struct with
+/// bitfields or arrays is unsupported.
+///
+/// I do not remember why I didn't include \c signature in the base class
+/// when I originally wrote this, but I probably had a good reason. We can
+/// always go back and move it to \c FLEXMethodBase if we find we need to.
+@interface FLEXMethod : FLEXMethodBase
+
+/// Defaults to instance method
++ (nullable instancetype)method:(Method)method;
++ (nullable instancetype)method:(Method)method isInstanceMethod:(BOOL)isInstanceMethod;
+
+/// Constructs an \c FLEXMethod for the given method on the given class.
+/// @param cls the class, or metaclass if this is a class method
+/// @return The newly constructed \c FLEXMethod object, or \c nil if the
+/// specified class or its superclasses do not contain a method with the specified selector.
++ (nullable instancetype)selector:(SEL)selector class:(Class)cls;
+/// Constructs an \c FLEXMethod for the given method on the given class,
+/// only if the given class itself defines or overrides the desired method.
+/// @param cls the class, or metaclass if this is a class method
+/// @return The newly constructed \c FLEXMethod object, or \c nil \e if the
+/// specified class does not define or override, or if the specified class
+/// or its superclasses do not contain, a method with the specified selector.
++ (nullable instancetype)selector:(SEL)selector implementedInClass:(Class)cls;
+
+@property (nonatomic, readonly) Method            objc_method;
+/// The implementation of the method.
+/// @discussion Setting \c implementation will change the implementation of this method
+/// for the entire class which implements said method. It will also not modify the selector of said method.
+@property (nonatomic          ) IMP               implementation;
+/// Whether the method is an instance method or not.
+@property (nonatomic, readonly) BOOL              isInstanceMethod;
+/// The number of arguments to the method.
+@property (nonatomic, readonly) NSUInteger        numberOfArguments;
+/// The \c NSMethodSignature object corresponding to the method's type encoding.
+@property (nonatomic, readonly) NSMethodSignature *signature;
+/// Same as \e typeEncoding but with parameter sizes up front and offsets after the types.
+@property (nonatomic, readonly) NSString          *signatureString;
+/// The return type of the method.
+@property (nonatomic, readonly) FLEXTypeEncoding  *returnType;
+/// The return size of the method.
+@property (nonatomic, readonly) NSUInteger        returnSize;
+/// The full path of the image that contains this method definition,
+/// or \c nil if this ivar was probably defined at runtime.
+@property (nonatomic, readonly) NSString          *imagePath;
+
+/// Like @code - (void)foo:(int)bar @endcode
+@property (nonatomic, readonly) NSString *description;
+/// Like @code -[Class foo:] @endcode
+- (NSString *)debugNameGivenClassName:(NSString *)name;
+
+/// Swizzles the recieving method with the given method.
+- (void)swapImplementations:(FLEXMethod *)method;
+
+#define FLEXMagicNumber 0xdeadbeef
+#define FLEXArg(expr) FLEXMagicNumber,/// @encode(__typeof__(expr)), (__typeof__(expr) []){ expr }
+
+/// Sends a message to \e target, and returns it's value, or \c nil if not applicable.
+/// @discussion You may send any message with this method. Primitive return values will be wrapped
+/// in instances of \c NSNumber and \c NSValue. \c void and bitfield returning methods return \c nil.
+/// \c SEL return types are converted to strings using \c NSStringFromSelector.
+/// @return The object returned by this method, or an instance of \c NSValue or \c NSNumber containing
+/// the primitive return type, or a string for \c SEL return types.
+- (id)sendMessage:(id)target, ...;
+/// Used internally by \c sendMessage:target,. Pass \c NULL to the first parameter for void methods.
+- (void)getReturnValue:(void *)retPtr forMessageSend:(id)target, ...;
+
+@end
+
+
+@interface FLEXMethod (Comparison)
+
+- (NSComparisonResult)compare:(FLEXMethod *)method;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMethodBase.h

@@ -0,0 +1,43 @@
+//
+//  FLEXMethodBase.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/5/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+/// A base class for methods which encompasses those that may not
+/// have been added to a class yet. Useful on it's own for adding
+/// methods to a class, or building a new class from the ground up.
+@interface FLEXMethodBase : NSObject {
+@protected
+    SEL      _selector;
+    NSString *_name;
+    NSString *_typeEncoding;
+    IMP      _implementation;
+    
+    NSString *_flex_description;
+}
+
+/// Constructs and returns an \c FLEXSimpleMethod instance with the given name, type encoding, and implementation.
++ (instancetype)buildMethodNamed:(NSString *)name withTypes:(NSString *)typeEncoding implementation:(IMP)implementation;
+
+/// The selector of the method.
+@property (nonatomic, readonly) SEL      selector;
+/// The selector string of the method.
+@property (nonatomic, readonly) NSString *selectorString;
+/// Same as selectorString.
+@property (nonatomic, readonly) NSString *name;
+/// The type encoding of the method.
+@property (nonatomic, readonly) NSString *typeEncoding;
+/// The implementation of the method.
+@property (nonatomic, readonly) IMP      implementation;
+
+/// For internal use
+@property (nonatomic) id tag;
+
+@end

+ 60 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMirror.h

@@ -0,0 +1,60 @@
+//
+//  FLEXMirror.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/29/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class FLEXMethod, FLEXProperty, FLEXIvar, FLEXProtocol;
+#import <objc/runtime.h>
+
+
+#pragma mark FLEXMirror
+@interface FLEXMirror : NSObject
+
+/// Reflects an instance of an object or \c Class.
+/// @discussion \c FLEXMirror will immediately gather all useful information. Consider using the
+/// \c NSObject categories provided if your code will only use a few pieces of information,
+/// or if your code needs to run faster.
+///
+/// If you reflect an instance of a class then \c methods and \c properties will be populated
+/// with instance methods and properties. If you reflect a class itself, then \c methods
+/// and \c properties will be populated with class methods and properties as you'd expect.
+///
+/// @param objectOrClass An instance of an objct or a \c Class object.
+/// @return An instance of \c FLEXMirror.
++ (instancetype)reflect:(id)objectOrClass;
+
+/// The underlying object or \c Class used to create this \c FLEXMirror instance.
+@property (nonatomic, readonly) id   value;
+/// Whether the reflected thing was a class or a class instance.
+@property (nonatomic, readonly) BOOL isClass;
+/// The name of the \c Class of the \c value property.
+@property (nonatomic, readonly) NSString *className;
+
+@property (nonatomic, readonly) NSArray<FLEXProperty *> *properties;
+@property (nonatomic, readonly) NSArray<FLEXIvar *>     *ivars;
+@property (nonatomic, readonly) NSArray<FLEXMethod *>   *methods;
+@property (nonatomic, readonly) NSArray<FLEXProtocol *> *protocols;
+
+/// @return A reflection of \c value.superClass.
+@property (nonatomic, readonly) FLEXMirror *superMirror;
+
+@end
+
+
+@interface FLEXMirror (ExtendedMirror)
+
+/// @return The method with the given name, or \c nil if one does not exist.
+- (FLEXMethod *)methodNamed:(NSString *)name;
+/// @return The property with the given name, or \c nil if one does not exist.
+- (FLEXProperty *)propertyNamed:(NSString *)name;
+/// @return The instance variable with the given name, or \c nil if one does not exist.
+- (FLEXIvar *)ivarNamed:(NSString *)name;
+/// @return The protocol with the given name, or \c nil if one does not exist.
+- (FLEXProtocol *)protocolNamed:(NSString *)name;
+
+@end

+ 24 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMultilineTableViewCell.h

@@ -0,0 +1,24 @@
+//
+//  FLEXMultilineTableViewCell.h
+//  FLEX
+//
+//  Created by Ryan Olson on 2/13/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewCell.h"
+
+/// A cell with both labels set to be multi-line capable.
+@interface FLEXMultilineTableViewCell : FLEXTableViewCell
+
++ (CGFloat)preferredHeightWithAttributedText:(NSAttributedString *)attributedText
+                                    maxWidth:(CGFloat)contentViewWidth
+                                       style:(UITableViewStyle)style
+                              showsAccessory:(BOOL)showsAccessory;
+
+@end
+
+/// A \c FLEXMultilineTableViewCell initialized with \c UITableViewCellStyleSubtitle
+@interface FLEXMultilineDetailTableViewCell : FLEXMultilineTableViewCell
+
+@end

+ 58 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXMutableListSection.h

@@ -0,0 +1,58 @@
+//
+//  FLEXMutableListSection.h
+//  FLEX
+//
+//  Created by Tanner on 3/9/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXCollectionContentSection.h"
+
+typedef void (^FLEXMutableListCellForElement)(__kindof UITableViewCell *cell, id element, NSInteger row);
+
+/// A section aimed at meeting the needs of table views with one section
+/// (or, a section that shouldn't warrant the code duplication that comes
+/// with creating a new section just for some specific table view)
+///
+/// Use this section if you want to display a growing list of rows,
+/// or even if you want to display a static list of rows.
+///
+/// To support editing or inserting, implement the appropriate
+/// table view delegate methods in your table view delegate class
+/// and call \c mutate: (or \c setList: ) before updating the table view.
+///
+/// By default, no section title is shown. Assign one to \c customTitle
+///
+/// By default, \c kFLEXDetailCell is the reuse identifier used. If you need
+/// to support multiple reuse identifiers in a single section, implement the
+/// \c cellForRowAtIndexPath: method, dequeue the cell yourself and call
+/// \c -configureCell: on the appropriate section object, passing in the cell
+@interface FLEXMutableListSection<__covariant ObjectType> : FLEXCollectionContentSection
+
+/// Initializes a section with an empty list.
++ (instancetype)list:(NSArray<ObjectType> *)list
+   cellConfiguration:(FLEXMutableListCellForElement)configurationBlock
+       filterMatcher:(BOOL(^)(NSString *filterText, id element))filterBlock;
+
+/// By default, rows are not selectable. If you want rows
+/// to be selectable, provide a selection handler here.
+@property (nonatomic, copy) void (^selectionHandler)(__kindof UIViewController *host, id element);
+
+/// The objects representing all possible rows in the section.
+@property (nonatomic) NSArray<ObjectType> *list;
+/// The objects representing the currently unfiltered rows in the section.
+@property (nonatomic, readonly) NSArray<ObjectType> *filteredList;
+
+/// A readwrite version of the same property in \c FLEXTableViewSection.h
+///
+/// This property expects one entry. An exception is thrown if more than one
+/// entry is supplied. If you need more than one reuse identifier within a single
+/// section, your view probably has more complexity than this class can handle.
+@property (nonatomic, readwrite) NSDictionary<NSString *, Class> *cellRegistrationMapping;
+
+/// Call this method to mutate the full, unfiltered list.
+/// This ensures that \c filteredList is updated after any mutations.
+- (void)mutate:(void(^)(NSMutableArray *list))block;
+
+@end
+

+ 19 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXNavigationController.h

@@ -0,0 +1,19 @@
+//
+//  FLEXNavigationController.h
+//  FLEX
+//
+//  Created by Tanner on 1/30/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXNavigationController : UINavigationController
+
++ (instancetype)withRootViewController:(UIViewController *)rootVC;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 73 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjcInternal.h

@@ -0,0 +1,73 @@
+//
+//  FLEXObjcInternal.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 11/1/18.
+//
+
+#import <Foundation/Foundation.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// The macros below are copied straight from
+// objc-internal.h, objc-private.h, objc-object.h, and objc-config.h with
+// as few modifications as possible. Changes are noted in boxed comments.
+// https://opensource.apple.com/source/objc4/objc4-723/
+// https://opensource.apple.com/source/objc4/objc4-723/runtime/objc-internal.h.auto.html
+// https://opensource.apple.com/source/objc4/objc4-723/runtime/objc-object.h.auto.html
+
+/////////////////////
+// objc-internal.h //
+/////////////////////
+
+#if __LP64__
+#define OBJC_HAVE_TAGGED_POINTERS 1
+#endif
+
+#if OBJC_HAVE_TAGGED_POINTERS
+
+#if TARGET_OS_OSX && __x86_64__
+// 64-bit Mac - tag bit is LSB
+#   define OBJC_MSB_TAGGED_POINTERS 0
+#else
+// Everything else - tag bit is MSB
+#   define OBJC_MSB_TAGGED_POINTERS 1
+#endif
+
+#if OBJC_MSB_TAGGED_POINTERS
+#   define _OBJC_TAG_MASK (1UL<<63)
+#   define _OBJC_TAG_EXT_MASK (0xfUL<<60)
+#else
+#   define _OBJC_TAG_MASK 1UL
+#   define _OBJC_TAG_EXT_MASK 0xfUL
+#endif
+
+#endif // OBJC_HAVE_TAGGED_POINTERS
+
+//////////////////////////////////////
+// originally _objc_isTaggedPointer //
+//////////////////////////////////////
+NS_INLINE BOOL flex_isTaggedPointer(const void *ptr)  {
+    #if OBJC_HAVE_TAGGED_POINTERS
+        return ((uintptr_t)ptr & _OBJC_TAG_MASK) == _OBJC_TAG_MASK;
+    #else
+        return NO;
+    #endif
+}
+
+#define FLEXPointerIsTaggedPointer(obj) flex_isTaggedPointer((__bridge void *)obj)
+
+BOOL FLEXPointerIsReadable(const void * ptr);
+
+/// @brief Assumes memory is valid and readable.
+/// @discussion objc-internal.h, objc-private.h, and objc-config.h
+/// https://blog.timac.org/2016/1124-testing-if-an-arbitrary-pointer-is-a-valid-objective-c-object/
+/// https://llvm.org/svn/llvm-project/lldb/trunk/examples/summaries/cocoa/objc_runtime.py
+/// https://blog.timac.org/2016/1124-testing-if-an-arbitrary-pointer-is-a-valid-objective-c-object/
+BOOL FLEXPointerIsValidObjcObject(const void * ptr);
+
+#ifdef __cplusplus
+}
+#endif

+ 73 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorer.h

@@ -0,0 +1,73 @@
+//
+//  FLEXObjectExplorer.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/28/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXRuntime+UIKitHelpers.h"
+
+/// Carries state about the current user defaults settings
+@interface FLEXObjectExplorerDefaults : NSObject
++ (instancetype)canEdit:(BOOL)editable wantsPreviews:(BOOL)showPreviews;
+
+/// Only \c YES for properties and ivars
+@property (nonatomic, readonly) BOOL isEditable;
+/// Only affects properties and ivars
+@property (nonatomic, readonly) BOOL wantsDynamicPreviews;
+@end
+
+@interface FLEXObjectExplorer : NSObject
+
++ (instancetype)forObject:(id)objectOrClass;
+
++ (void)configureDefaultsForItems:(NSArray<id<FLEXObjectExplorerItem>> *)items;
+
+@property (nonatomic, readonly) id object;
+/// Subclasses can override to provide a more useful description
+@property (nonatomic, readonly) NSString *objectDescription;
+
+/// @return \c YES if \c object is an instance of a class,
+/// or \c NO if \c object is a class itself.
+@property (nonatomic, readonly) BOOL objectIsInstance;
+
+/// An index into the `classHierarchy` array.
+///
+/// This property determines which set of data comes out of the metadata arrays below
+/// For example, \c properties contains the properties of the selected class scope,
+/// while \c allProperties is an array of arrays where each array is a set of
+/// properties for a class in the class hierarchy of the current object.
+@property (nonatomic) NSInteger classScope;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXProperty *> *> *allProperties;
+@property (nonatomic, readonly) NSArray<FLEXProperty *> *properties;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXProperty *> *> *allClassProperties;
+@property (nonatomic, readonly) NSArray<FLEXProperty *> *classProperties;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXIvar *> *> *allIvars;
+@property (nonatomic, readonly) NSArray<FLEXIvar *> *ivars;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXMethod *> *> *allMethods;
+@property (nonatomic, readonly) NSArray<FLEXMethod *> *methods;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXMethod *> *> *allClassMethods;
+@property (nonatomic, readonly) NSArray<FLEXMethod *> *classMethods;
+
+@property (nonatomic, readonly) NSArray<Class> *classHierarchyClasses;
+@property (nonatomic, readonly) NSArray<FLEXStaticMetadata *> *classHierarchy;
+
+@property (nonatomic, readonly) NSArray<NSArray<FLEXProtocol *> *> *allConformedProtocols;
+@property (nonatomic, readonly) NSArray<FLEXProtocol *> *conformedProtocols;
+
+@property (nonatomic, readonly) NSArray<FLEXStaticMetadata *> *allInstanceSizes;
+@property (nonatomic, readonly) FLEXStaticMetadata *instanceSize;
+
+@property (nonatomic, readonly) NSArray<FLEXStaticMetadata *> *allImageNames;
+@property (nonatomic, readonly) FLEXStaticMetadata *imageName;
+
+- (void)reloadMetadata;
+- (void)reloadClassHierarchy;
+
+@end

+ 30 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorerFactory.h

@@ -0,0 +1,30 @@
+//
+//  FLEXObjectExplorerFactory.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 5/15/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXGlobalsEntry.h"
+
+#ifndef _FLEXObjectExplorerViewController_h
+#import "FLEXObjectExplorerViewController.h"
+#else
+@class FLEXObjectExplorerViewController;
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXObjectExplorerFactory : NSObject <FLEXGlobalsEntry>
+
++ (nullable FLEXObjectExplorerViewController *)explorerViewControllerForObject:(nullable id)object;
+
+/// Register a specific explorer view controller class to be used when exploring
+/// an object of a specific class. Calls will overwrite existing registrations.
+/// Sections must be initialized using \c forObject: like
++ (void)registerExplorerSection:(Class)sectionClass forClass:(Class)objectClass;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 54 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectExplorerViewController.h

@@ -0,0 +1,54 @@
+//
+//  FLEXObjectExplorerViewController.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 2014-05-03.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#ifndef _FLEXObjectExplorerViewController_h
+#define _FLEXObjectExplorerViewController_h
+#endif
+
+#import "FLEXFilteringTableViewController.h"
+#import "FLEXObjectExplorer.h"
+@class FLEXTableViewSection;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A class that displays information about an object or class.
+///
+/// The explorer view controller uses \c FLEXObjectExplorer to provide a description
+/// of the object and list it's properties, ivars, methods, and it's superclasses.
+/// Below the description and before properties, some shortcuts will be displayed
+/// for certain classes like UIViews. At very bottom, there is an option to view
+/// a list of other objects found to be referencing the object being explored.
+@interface FLEXObjectExplorerViewController : FLEXFilteringTableViewController
+
+/// Uses the default \c FLEXShortcutsSection for this object as a custom section.
++ (instancetype)exploringObject:(id)objectOrClass;
+/// No custom section unless you provide one.
++ (instancetype)exploringObject:(id)objectOrClass customSection:(nullable FLEXTableViewSection *)customSection;
+
+/// The object being explored, which may be an instance of a class or a class itself.
+@property (nonatomic, readonly) id object;
+/// This object provides the object's metadata for the explorer view controller.
+@property (nonatomic, readonly) FLEXObjectExplorer *explorer;
+
+/// Called once to initialize the list of section objects.
+///
+/// Subclasses can override this to add, remove, or rearrange sections of the explorer.
+- (NSArray<FLEXTableViewSection *> *)makeSections;
+
+/// Whether to allow showing/drilling in to current values for ivars and properties. Default is YES.
+@property (nonatomic, readonly) BOOL canHaveInstanceState;
+
+/// Whether to allow drilling in to method calling interfaces for instance methods. Default is YES.
+@property (nonatomic, readonly) BOOL canCallInstanceMethods;
+
+/// If the custom section data makes the description redundant, subclasses can choose to hide it. Default is YES.
+@property (nonatomic, readonly) BOOL shouldShowDescription;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 19 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXObjectInfoSection.h

@@ -0,0 +1,19 @@
+//
+//  FLEXObjectInfoSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/28/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// \c FLEXTableViewSection itself doesn't know about the object being explored.
+/// Subclasses might need this info to provide useful information about the object. Instead
+/// of adding an abstract class to the class hierarchy, subclasses can conform to this protocol
+/// to indicate that the only info they need to be initialized is the object being explored.
+@protocol FLEXObjectInfoSection <NSObject>
+
++ (instancetype)forObject:(id)object;
+
+@end

+ 134 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXProperty.h

@@ -0,0 +1,134 @@
+//
+//  FLEXProperty.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/30/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+@class FLEXPropertyAttributes, FLEXMethodBase;
+
+
+#pragma mark FLEXProperty
+@interface FLEXProperty : NSObject
+
+/// You may use this initializer instead of \c property:onClass: if you don't need
+/// to know anything about the uniqueness of this property or where it comes from.
++ (instancetype)property:(objc_property_t)property;
+/// This initializer can be used to access additional information
+/// in an efficient manner. That information being whether this property
+/// is certainly not unique and the name of the binary image which declares it.
+/// @param cls the class, or metaclass if this is a class property.
++ (instancetype)property:(objc_property_t)property onClass:(Class)cls;
+/// @param cls the class, or metaclass if this is a class property
++ (instancetype)named:(NSString *)name onClass:(Class)cls;
+/// Constructs a new property with the given name and attributes.
++ (instancetype)propertyWithName:(NSString *)name attributes:(FLEXPropertyAttributes *)attributes;
+
+/// \c 0 if the instance was created via \c +propertyWithName:attributes,
+/// otherwise this is the first property in \c objc_properties
+@property (nonatomic, readonly) objc_property_t  objc_property;
+@property (nonatomic, readonly) objc_property_t  *objc_properties;
+@property (nonatomic, readonly) NSInteger        objc_propertyCount;
+@property (nonatomic, readonly) BOOL             isClassProperty;
+
+/// The name of the property.
+@property (nonatomic, readonly) NSString         *name;
+/// The type of the property. Get the full type from the attributes.
+@property (nonatomic, readonly) FLEXTypeEncoding type;
+/// The property's attributes.
+@property (nonatomic          ) FLEXPropertyAttributes *attributes;
+/// The (likely) setter, regardless of whether the property is readonly.
+/// For example, this might be the custom setter.
+@property (nonatomic, readonly) SEL likelySetter;
+@property (nonatomic, readonly) NSString *likelySetterString;
+/// Not valid unless initialized with the owning class.
+@property (nonatomic, readonly) BOOL likelySetterExists;
+/// The (likely) getter. For example, this might be the custom getter.
+@property (nonatomic, readonly) SEL likelyGetter;
+@property (nonatomic, readonly) NSString *likelyGetterString;
+/// Not valid unless initialized with the owning class.
+@property (nonatomic, readonly) BOOL likelyGetterExists;
+
+/// Whether there are certainly multiple definitions of this property,
+/// such as in categories in other binary images or something.
+/// @return Whether \c objc_property matches the return value of \c class_getProperty,
+/// or \c NO if this property was not created with \c property:onClass
+@property (nonatomic, readonly) BOOL multiple;
+/// @return The bundle of the image that contains this property definition,
+/// or \c nil if this property was not created with \c property:onClass or
+/// if this property was probably defined at runtime.
+@property (nonatomic, readonly) NSString *imageName;
+/// The full path of the image that contains this property definition,
+/// or \c nil if this property was not created with \c property:onClass or
+/// if this property was probably defined at runtime.
+@property (nonatomic, readonly) NSString *imagePath;
+
+/// For internal use
+@property (nonatomic) id tag;
+
+/// @return The value of this property on \c target as given by \c -valueForKey:
+/// A source-like description of the property, with all of its attributes.
+@property (nonatomic, readonly) NSString *fullDescription;
+
+/// If this is a class property, you must class the class object.
+- (id)getValue:(id)target;
+/// Calls into -getValue: and passes that value into
+/// -[FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:type:]
+/// and returns the result.
+///
+/// If this is a class property, you must class the class object.
+- (id)getPotentiallyUnboxedValue:(id)target;
+
+/// Safe to use regardless of how the \c FLEXProperty instance was initialized.
+///
+/// This uses \c self.objc_property if it exists, otherwise it uses \c self.attributes
+- (objc_property_attribute_t *)copyAttributesList:(unsigned int *)attributesCount;
+
+/// Replace the attributes of the current property in the given class,
+/// using the attributes in \c self.attributes
+///
+/// What happens when the property does not exist is undocumented.
+- (void)replacePropertyOnClass:(Class)cls;
+
+#pragma mark Convenience getters and setters
+/// @return A getter for the property with the given implementation.
+/// @discussion Consider using the \c FLEXPropertyGetter macros.
+- (FLEXMethodBase *)getterWithImplementation:(IMP)implementation;
+/// @return A setter for the property with the given implementation.
+/// @discussion Consider using the \c FLEXPropertySetter macros.
+- (FLEXMethodBase *)setterWithImplementation:(IMP)implementation;
+
+#pragma mark FLEXMethod property getter / setter macros
+// Easier than using the above methods yourself in most cases
+
+/// Takes a \c FLEXProperty and a type (ie \c NSUInteger or \c id) and
+/// uses the \c FLEXProperty's \c attribute's \c backingIvarName to get the Ivar.
+#define FLEXPropertyGetter(FLEXProperty, type) [FLEXProperty \
+    getterWithImplementation:imp_implementationWithBlock(^(id self) { \
+        return *(type *)[self getIvarAddressByName:FLEXProperty.attributes.backingIvar]; \
+    }) \
+];
+/// Takes a \c FLEXProperty and a type (ie \c NSUInteger or \c id) and
+/// uses the \c FLEXProperty's \c attribute's \c backingIvarName to set the Ivar.
+#define FLEXPropertySetter(FLEXProperty, type) [FLEXProperty \
+    setterWithImplementation:imp_implementationWithBlock(^(id self, type value) { \
+        [self setIvarByName:FLEXProperty.attributes.backingIvar value:&value size:sizeof(type)]; \
+    }) \
+];
+/// Takes a \c FLEXProperty and a type (ie \c NSUInteger or \c id) and an Ivar name string to get the Ivar.
+#define FLEXPropertyGetterWithIvar(FLEXProperty, ivarName, type) [FLEXProperty \
+    getterWithImplementation:imp_implementationWithBlock(^(id self) { \
+        return *(type *)[self getIvarAddressByName:ivarName]; \
+    }) \
+];
+/// Takes a \c FLEXProperty and a type (ie \c NSUInteger or \c id) and an Ivar name string to set the Ivar.
+#define FLEXPropertySetterWithIvar(FLEXProperty, ivarName, type) [FLEXProperty \
+    setterWithImplementation:imp_implementationWithBlock(^(id self, type value) { \
+        [self setIvarByName:ivarName value:&value size:sizeof(type)]; \
+    }) \
+];
+
+@end

+ 110 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXPropertyAttributes.h

@@ -0,0 +1,110 @@
+//
+//  FLEXPropertyAttributes.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/5/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <objc/runtime.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark FLEXPropertyAttributes
+
+/// See \e FLEXRuntimeUtilitiy.h for valid string tokens.
+/// See this link on how to construct a proper attributes string:
+/// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html
+@interface FLEXPropertyAttributes : NSObject <NSCopying, NSMutableCopying> {
+// These are necessary for the mutable subclass to function
+@protected
+    NSUInteger _count;
+    NSString *_string, *_backingIvar, *_typeEncoding, *_oldTypeEncoding, *_fullDeclaration;
+    NSDictionary *_dictionary;
+    objc_property_attribute_t *_list;
+    SEL _customGetter, _customSetter;
+    BOOL _isReadOnly, _isCopy, _isRetained, _isNonatomic, _isDynamic, _isWeak, _isGarbageCollectable;
+}
+
++ (instancetype)attributesForProperty:(objc_property_t)property;
+/// @warning Raises an exception if \e attributes is invalid, \c nil, or contains unsupported keys.
++ (instancetype)attributesFromDictionary:(NSDictionary *)attributes;
+
+/// Copies the attributes list to a buffer you must \c free() yourself.
+/// Use \c list instead if you do not need more control over the lifetime of the list.
+/// @param attributesCountOut the number of attributes is returned in this parameter.
+- (objc_property_attribute_t *)copyAttributesList:(nullable unsigned int *)attributesCountOut;
+
+/// The number of property attributes.
+@property (nonatomic, readonly) NSUInteger count;
+/// For use with \c class_replaceProperty and the like.
+@property (nonatomic, readonly) objc_property_attribute_t *list;
+/// The string value of the property attributes.
+@property (nonatomic, readonly) NSString *string;
+/// A human-readable version of the property attributes.
+@property (nonatomic, readonly) NSString *fullDeclaration;
+/// A dictionary of the property attributes.
+/// Values are either a string or \c YES. Boolean attributes
+/// which are false will not be present in the dictionary.
+@property (nonatomic, readonly) NSDictionary *dictionary;
+
+/// The name of the instance variable backing the property.
+@property (nonatomic, readonly, nullable) NSString *backingIvar;
+/// The type encoding of the property.
+@property (nonatomic, readonly, nullable) NSString *typeEncoding;
+/// The \e old type encoding of the property.
+@property (nonatomic, readonly, nullable) NSString *oldTypeEncoding;
+/// The property's custom getter, if any.
+@property (nonatomic, readonly, nullable) SEL customGetter;
+/// The property's custom setter, if any.
+@property (nonatomic, readonly, nullable) SEL customSetter;
+/// The property's custom getter as a string, if any.
+@property (nonatomic, readonly, nullable) NSString *customGetterString;
+/// The property's custom setter as a string, if any.
+@property (nonatomic, readonly, nullable) NSString *customSetterString;
+
+@property (nonatomic, readonly) BOOL isReadOnly;
+@property (nonatomic, readonly) BOOL isCopy;
+@property (nonatomic, readonly) BOOL isRetained;
+@property (nonatomic, readonly) BOOL isNonatomic;
+@property (nonatomic, readonly) BOOL isDynamic;
+@property (nonatomic, readonly) BOOL isWeak;
+@property (nonatomic, readonly) BOOL isGarbageCollectable;
+
+@end
+
+
+#pragma mark FLEXPropertyAttributes
+@interface FLEXMutablePropertyAttributes : FLEXPropertyAttributes
+
+/// Creates and returns an empty property attributes object.
++ (instancetype)attributes;
+
+/// The name of the instance variable backing the property.
+@property (nonatomic, nullable) NSString *backingIvar;
+/// The type encoding of the property.
+@property (nonatomic, nullable) NSString *typeEncoding;
+/// The \e old type encoding of the property.
+@property (nonatomic, nullable) NSString *oldTypeEncoding;
+/// The property's custom getter, if any.
+@property (nonatomic, nullable) SEL customGetter;
+/// The property's custom setter, if any.
+@property (nonatomic, nullable) SEL customSetter;
+
+@property (nonatomic) BOOL isReadOnly;
+@property (nonatomic) BOOL isCopy;
+@property (nonatomic) BOOL isRetained;
+@property (nonatomic) BOOL isNonatomic;
+@property (nonatomic) BOOL isDynamic;
+@property (nonatomic) BOOL isWeak;
+@property (nonatomic) BOOL isGarbageCollectable;
+
+/// A more convenient method of setting the \c typeEncoding property.
+/// @discussion This will not work for complex types like structs and primitive pointers.
+- (void)setTypeEncodingChar:(char)type;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 69 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXProtocol.h

@@ -0,0 +1,69 @@
+//
+//  FLEXProtocol.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/30/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+@class FLEXProperty, FLEXMethodDescription;
+
+#pragma mark FLEXProtocol
+@interface FLEXProtocol : NSObject
+
+/// Every protocol registered with the runtime.
++ (NSArray<FLEXProtocol *> *)allProtocols;
++ (instancetype)protocol:(Protocol *)protocol;
+
+/// The underlying protocol data structure.
+@property (nonatomic, readonly) Protocol *objc_protocol;
+
+/// The name of the protocol.
+@property (nonatomic, readonly) NSString *name;
+/// The required methods of the protocol, if any. This includes property getters and setters.
+@property (nonatomic, readonly) NSArray<FLEXMethodDescription *>  *requiredMethods;
+/// The optional methods of the protocol, if any. This includes property getters and setters.
+@property (nonatomic, readonly) NSArray<FLEXMethodDescription *>  *optionalMethods;
+/// All protocols that this protocol conforms to, if any.
+@property (nonatomic, readonly) NSArray<FLEXProtocol *>  *protocols;
+/// The full path of the image that contains this protocol definition,
+/// or \c nil if this protocol was probably defined at runtime.
+@property (nonatomic, readonly) NSString *imagePath;
+
+/// The properties in the protocol, if any. \c nil on iOS 10+ 
+@property (nonatomic, readonly) NSArray<FLEXProperty *>  *properties API_DEPRECATED("Use the more specific accessors below", ios(2.0, 10.0));
+
+/// The required properties in the protocol, if any.
+@property (nonatomic, readonly) NSArray<FLEXProperty *>  *requiredProperties API_AVAILABLE(ios(10.0));
+/// The optional properties in the protocol, if any.
+@property (nonatomic, readonly) NSArray<FLEXProperty *>  *optionalProperties API_AVAILABLE(ios(10.0));
+
+/// For internal use
+@property (nonatomic) id tag;
+
+/// Not to be confused with \c -conformsToProtocol:, which refers to the current
+/// \c FLEXProtocol instance and not the underlying \c Protocol object.
+- (BOOL)conformsTo:(Protocol *)protocol;
+
+@end
+
+
+#pragma mark Method descriptions
+@interface FLEXMethodDescription : NSObject
+
++ (instancetype)description:(struct objc_method_description)description;
++ (instancetype)description:(struct objc_method_description)description instance:(BOOL)isInstance;
+
+/// The underlying method description data structure.
+@property (nonatomic, readonly) struct objc_method_description objc_description;
+/// The method's selector.
+@property (nonatomic, readonly) SEL selector;
+/// The method's type encoding.
+@property (nonatomic, readonly) NSString *typeEncoding;
+/// The method's return type.
+@property (nonatomic, readonly) FLEXTypeEncoding returnType;
+/// \c YES if this is an instance method, \c NO if it is a class method, or \c nil if unspecified
+@property (nonatomic, readonly) NSNumber *instance;
+@end

+ 41 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXProtocolBuilder.h

@@ -0,0 +1,41 @@
+//
+//  FLEXProtocolBuilder.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/4/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class FLEXProperty, FLEXProtocol, Protocol;
+
+@interface FLEXProtocolBuilder : NSObject
+
+/// Begins to construct a new protocol with the given name.
+/// @discussion You must register the protocol with the
+/// \c registerProtocol method before you can use it.
++ (instancetype)allocateProtocol:(NSString *)name;
+
+/// Adds a property to a protocol.
+/// @param property The property to add.
+/// @param isRequired Whether the property is required to implement the protocol.
+- (void)addProperty:(FLEXProperty *)property isRequired:(BOOL)isRequired;
+/// Adds a property to a protocol.
+/// @param selector The selector of the method to add.
+/// @param typeEncoding The type encoding of the method to add.
+/// @param isRequired Whether the method is required to implement the protocol.
+/// @param isInstanceMethod \c YES if the method is an instance method, \c NO if it is a class method.
+- (void)addMethod:(SEL)selector
+     typeEncoding:(NSString *)typeEncoding
+       isRequired:(BOOL)isRequired
+ isInstanceMethod:(BOOL)isInstanceMethod;
+/// Makes the recieving protocol conform to the given protocol.
+- (void)addProtocol:(Protocol *)protocol;
+
+/// Registers and returns the recieving protocol, which was previously under construction.
+- (FLEXProtocol *)registerProtocol;
+/// Whether the protocol is still under construction or already registered.
+@property (nonatomic, readonly) BOOL isRegistered;
+
+@end

+ 59 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXResources.h

@@ -0,0 +1,59 @@
+//
+//  FLEXResources.h
+//  FLEX
+//
+//  Created by Ryan Olson on 6/8/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface FLEXResources : NSObject
+
+#pragma mark - FLEX Toolbar Icons
+
+@property (readonly, class) UIImage *closeIcon;
+@property (readonly, class) UIImage *dragHandle;
+@property (readonly, class) UIImage *globalsIcon;
+@property (readonly, class) UIImage *hierarchyIcon;
+@property (readonly, class) UIImage *recentIcon;
+@property (readonly, class) UIImage *moveIcon;
+@property (readonly, class) UIImage *selectIcon;
+
+#pragma mark - Toolbar Icons
+
+@property (readonly, class) UIImage *bookmarksIcon;
+@property (readonly, class) UIImage *openTabsIcon;
+@property (readonly, class) UIImage *moreIcon;
+@property (readonly, class) UIImage *gearIcon;
+@property (readonly, class) UIImage *scrollToBottomIcon;
+
+#pragma mark - Content Type Icons
+
+@property (readonly, class) UIImage *jsonIcon;
+@property (readonly, class) UIImage *textPlainIcon;
+@property (readonly, class) UIImage *htmlIcon;
+@property (readonly, class) UIImage *audioIcon;
+@property (readonly, class) UIImage *jsIcon;
+@property (readonly, class) UIImage *plistIcon;
+@property (readonly, class) UIImage *textIcon;
+@property (readonly, class) UIImage *videoIcon;
+@property (readonly, class) UIImage *xmlIcon;
+@property (readonly, class) UIImage *binaryIcon;
+
+#pragma mark - 3D Explorer Icons
+
+@property (readonly, class) UIImage *toggle2DIcon;
+@property (readonly, class) UIImage *toggle3DIcon;
+@property (readonly, class) UIImage *rangeSliderLeftHandle;
+@property (readonly, class) UIImage *rangeSliderRightHandle;
+@property (readonly, class) UIImage *rangeSliderTrack;
+@property (readonly, class) UIImage *rangeSliderFill;
+
+#pragma mark - Misc Icons
+
+@property (readonly, class) UIImage *checkerPattern;
+@property (readonly, class) UIColor *checkerPatternColor;
+@property (readonly, class) UIImage *hierarchyIndentPattern;
+@property (readonly, class) UIImage *cursorImage;
+@end

+ 29 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntime+Compare.h

@@ -0,0 +1,29 @@
+//
+//  FLEXRuntime+Compare.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/28/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "FLEXProperty.h"
+#import "FLEXIvar.h"
+#import "FLEXMethodBase.h"
+#import "FLEXProtocol.h"
+
+@interface FLEXProperty (Compare)
+- (NSComparisonResult)compare:(FLEXProperty *)other;
+@end
+
+@interface FLEXIvar (Compare)
+- (NSComparisonResult)compare:(FLEXIvar *)other;
+@end
+
+@interface FLEXMethodBase (Compare)
+- (NSComparisonResult)compare:(FLEXMethodBase *)other;
+@end
+
+@interface FLEXProtocol (Compare)
+- (NSComparisonResult)compare:(FLEXProtocol *)other;
+@end

+ 94 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntime+UIKitHelpers.h

@@ -0,0 +1,94 @@
+//
+//  FLEXRuntime+UIKitHelpers.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/16/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "FLEXProperty.h"
+#import "FLEXIvar.h"
+#import "FLEXMethod.h"
+#import "FLEXProtocol.h"
+#import "FLEXTableViewSection.h"
+
+@class FLEXObjectExplorerDefaults;
+
+/// Model objects of an object explorer screen adopt this
+/// protocol in order respond to user defaults changes 
+@protocol FLEXObjectExplorerItem <NSObject>
+/// Current explorer settings. Set when settings change.
+@property (nonatomic) FLEXObjectExplorerDefaults *defaults;
+
+/// YES for properties and ivars which surely support editing, NO for all methods.
+@property (nonatomic, readonly) BOOL isEditable;
+/// NO for ivars, YES for supported methods and properties
+@property (nonatomic, readonly) BOOL isCallable;
+@end
+
+@protocol FLEXRuntimeMetadata <FLEXObjectExplorerItem>
+/// Used as the main title of the row
+- (NSString *)description;
+/// Used to compare metadata objects for uniqueness
+@property (nonatomic, readonly) NSString *name;
+
+/// For internal use
+@property (nonatomic) id tag;
+
+/// Should return \c nil if not applicable
+- (id)currentValueWithTarget:(id)object;
+/// Used as the subtitle or description of a property, ivar, or method
+- (NSString *)previewWithTarget:(id)object;
+/// For methods, a method calling screen. For all else, an object explorer.
+- (UIViewController *)viewerWithTarget:(id)object;
+/// For methods and protocols, nil. For all else, an a field editor screen.
+/// The given section is reloaded on commit of any changes.
+- (UIViewController *)editorWithTarget:(id)object section:(FLEXTableViewSection *)section;
+/// Used to determine present which interactions are possible to the user
+- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object;
+/// Return nil to use the default reuse identifier
+- (NSString *)reuseIdentifierWithTarget:(id)object;
+
+#if FLEX_AT_LEAST_IOS13_SDK
+
+/// An array of actions to place in the first section of the context menu.
+- (NSArray<UIAction *> *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender API_AVAILABLE(ios(13.0));
+/// An array where every 2 elements are a key-value pair. The key is a description
+/// of what to copy like "Name" and the values are what will be copied.
+- (NSArray<NSString *> *)copiableMetadataWithTarget:(id)object;
+/// Properties and ivars return the address of an object, if they hold one.
+- (NSString *)contextualSubtitleWithTarget:(id)object;
+
+#endif
+
+@end
+
+// Even if a property is readonly, it still may be editable
+// via a setter. Checking isEditable will not reflect that
+// unless the property was initialized with a class.
+@interface FLEXProperty (UIKitHelpers) <FLEXRuntimeMetadata> @end
+@interface FLEXIvar (UIKitHelpers) <FLEXRuntimeMetadata> @end
+@interface FLEXMethodBase (UIKitHelpers) <FLEXRuntimeMetadata> @end
+@interface FLEXMethod (UIKitHelpers) <FLEXRuntimeMetadata> @end
+@interface FLEXProtocol (UIKitHelpers) <FLEXRuntimeMetadata> @end
+
+typedef NS_ENUM(NSUInteger, FLEXStaticMetadataRowStyle) {
+    FLEXStaticMetadataRowStyleSubtitle,
+    FLEXStaticMetadataRowStyleKeyValue,
+    FLEXStaticMetadataRowStyleDefault = FLEXStaticMetadataRowStyleSubtitle,
+};
+
+/// Displays a small row as a static key-value pair of information.
+@interface FLEXStaticMetadata : NSObject <FLEXRuntimeMetadata>
+
++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title string:(NSString *)string;
++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title number:(NSNumber *)number;
+
++ (NSArray<FLEXStaticMetadata *> *)classHierarchy:(NSArray<Class> *)classes;
+
+@end
+
+
+/// This is assigned to the \c tag property of each metadata.
+

+ 79 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntimeConstants.h

@@ -0,0 +1,79 @@
+//
+//  FLEXRuntimeConstants.h
+//  FLEX
+//
+//  Created by Tanner on 3/11/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <objc/runtime.h>
+
+#define FLEXEncodeClass(class) ("@\"" #class "\"")
+#define FLEXEncodeObject(obj) (obj ? [NSString stringWithFormat:@"@\"%@\"", [obj class]].UTF8String : @encode(id))
+
+// Arguments 0 and 1 are self and _cmd always
+extern const unsigned int kFLEXNumberOfImplicitArgs;
+
+// See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
+extern NSString *const kFLEXPropertyAttributeKeyTypeEncoding;
+extern NSString *const kFLEXPropertyAttributeKeyBackingIvarName;
+extern NSString *const kFLEXPropertyAttributeKeyReadOnly;
+extern NSString *const kFLEXPropertyAttributeKeyCopy;
+extern NSString *const kFLEXPropertyAttributeKeyRetain;
+extern NSString *const kFLEXPropertyAttributeKeyNonAtomic;
+extern NSString *const kFLEXPropertyAttributeKeyCustomGetter;
+extern NSString *const kFLEXPropertyAttributeKeyCustomSetter;
+extern NSString *const kFLEXPropertyAttributeKeyDynamic;
+extern NSString *const kFLEXPropertyAttributeKeyWeak;
+extern NSString *const kFLEXPropertyAttributeKeyGarbageCollectable;
+extern NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding;
+
+typedef NS_ENUM(NSUInteger, FLEXPropertyAttribute) {
+    FLEXPropertyAttributeTypeEncoding       = 'T',
+    FLEXPropertyAttributeBackingIvarName    = 'V',
+    FLEXPropertyAttributeCopy               = 'C',
+    FLEXPropertyAttributeCustomGetter       = 'G',
+    FLEXPropertyAttributeCustomSetter       = 'S',
+    FLEXPropertyAttributeDynamic            = 'D',
+    FLEXPropertyAttributeGarbageCollectible = 'P',
+    FLEXPropertyAttributeNonAtomic          = 'N',
+    FLEXPropertyAttributeOldTypeEncoding    = 't',
+    FLEXPropertyAttributeReadOnly           = 'R',
+    FLEXPropertyAttributeRetain             = '&',
+    FLEXPropertyAttributeWeak               = 'W'
+};
+
+typedef NS_ENUM(char, FLEXTypeEncoding) {
+    FLEXTypeEncodingNull             = '\0',
+    FLEXTypeEncodingUnknown          = '?',
+    FLEXTypeEncodingChar             = 'c',
+    FLEXTypeEncodingInt              = 'i',
+    FLEXTypeEncodingShort            = 's',
+    FLEXTypeEncodingLong             = 'l',
+    FLEXTypeEncodingLongLong         = 'q',
+    FLEXTypeEncodingUnsignedChar     = 'C',
+    FLEXTypeEncodingUnsignedInt      = 'I',
+    FLEXTypeEncodingUnsignedShort    = 'S',
+    FLEXTypeEncodingUnsignedLong     = 'L',
+    FLEXTypeEncodingUnsignedLongLong = 'Q',
+    FLEXTypeEncodingFloat            = 'f',
+    FLEXTypeEncodingDouble           = 'd',
+    FLEXTypeEncodingLongDouble       = 'D',
+    FLEXTypeEncodingCBool            = 'B',
+    FLEXTypeEncodingVoid             = 'v',
+    FLEXTypeEncodingCString          = '*',
+    FLEXTypeEncodingObjcObject       = '@',
+    FLEXTypeEncodingObjcClass        = '#',
+    FLEXTypeEncodingSelector         = ':',
+    FLEXTypeEncodingArrayBegin       = '[',
+    FLEXTypeEncodingArrayEnd         = ']',
+    FLEXTypeEncodingStructBegin      = '{',
+    FLEXTypeEncodingStructEnd        = '}',
+    FLEXTypeEncodingUnionBegin       = '(',
+    FLEXTypeEncodingUnionEnd         = ')',
+    FLEXTypeEncodingQuote            = '\"',
+    FLEXTypeEncodingBitField         = 'b',
+    FLEXTypeEncodingPointer          = '^',
+    FLEXTypeEncodingConst            = 'r'
+};

+ 56 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXRuntimeSafety.h

@@ -0,0 +1,56 @@
+//
+//  FLEXRuntimeSafety.h
+//  FLEX
+//
+//  Created by Tanner on 3/25/17.
+//
+
+#import <Foundation/Foundation.h>
+#import <objc/runtime.h>
+
+#pragma mark - Classes
+
+extern NSUInteger const kFLEXKnownUnsafeClassCount;
+extern const Class * FLEXKnownUnsafeClassList(void);
+extern NSSet * FLEXKnownUnsafeClassNames(void);
+extern CFSetRef FLEXKnownUnsafeClasses;
+
+static Class cNSObject = nil, cNSProxy = nil;
+
+__attribute__((constructor))
+static void FLEXInitKnownRootClasses() {
+    cNSObject = [NSObject class];
+    cNSProxy = [NSProxy class];
+}
+
+static inline BOOL FLEXClassIsSafe(Class cls) {
+    // Is it nil or known to be unsafe?
+    if (!cls || CFSetContainsValue(FLEXKnownUnsafeClasses, (__bridge void *)cls)) {
+        return NO;
+    }
+    
+    // Is it a known root class?
+    if (!class_getSuperclass(cls)) {
+        return cls == cNSObject || cls == cNSProxy;
+    }
+    
+    // Probably safe
+    return YES;
+}
+
+static inline BOOL FLEXClassNameIsSafe(NSString *cls) {
+    if (!cls) return NO;
+    
+    NSSet *ignored = FLEXKnownUnsafeClassNames();
+    return ![ignored containsObject:cls];
+}
+
+#pragma mark - Ivars
+
+extern CFSetRef FLEXKnownUnsafeIvars;
+
+static inline BOOL FLEXIvarIsSafe(Ivar ivar) {
+    if (!ivar) return NO;
+
+    return !CFSetContainsValue(FLEXKnownUnsafeIvars, ivar);
+}

+ 20 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXScopeCarousel.h

@@ -0,0 +1,20 @@
+//
+//  FLEXScopeCarousel.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 7/17/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+/// Only use on iOS 10 and up. Requires iOS 10 APIs for calculating row sizes.
+@interface FLEXScopeCarousel : UIControl
+
+@property (nonatomic, copy) NSArray<NSString *> *items;
+@property (nonatomic) NSInteger selectedIndex;
+@property (nonatomic) void(^selectedIndexChangedAction)(NSInteger idx);
+
+- (void)registerBlockForDynamicTypeChanges:(void(^)(FLEXScopeCarousel *))handler;
+
+@end

+ 71 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcut.h

@@ -0,0 +1,71 @@
+//
+//  FLEXShortcut.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/10/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXObjectExplorer.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Represents a row in a shortcut section.
+///
+/// The purpsoe of this protocol is to allow delegating a small
+/// subset of the responsibilities of a \c FLEXShortcutsSection
+/// to another object, for a single arbitrary row.
+///
+/// It is useful to make your own shortcuts to append/prepend
+/// them to the existing list of shortcuts for a class.
+@protocol FLEXShortcut <FLEXObjectExplorerItem>
+
+- (nonnull  NSString *)titleWith:(id)object;
+- (nullable NSString *)subtitleWith:(id)object;
+- (nullable void (^)(UIViewController *host))didSelectActionWith:(id)object;
+/// Called when the row is selected
+- (nullable UIViewController *)viewerWith:(id)object;
+/// Basically, whether or not to show a detail disclosure indicator
+- (UITableViewCellAccessoryType)accessoryTypeWith:(id)object;
+/// If nil is returned, the default reuse identifier is used
+- (nullable NSString *)customReuseIdentifierWith:(id)object;
+
+@optional
+/// Called when the (i) button is pressed if the accessory type includes it
+- (UIViewController *)editorWith:(id)object forSection:(FLEXTableViewSection *)section;
+
+@end
+
+
+/// Provides default behavior for FLEX metadata objects. Also works in a limited way with strings.
+/// Used internally. If you wish to use this object, only pass in \c FLEX* metadata objects.
+@interface FLEXShortcut : NSObject <FLEXShortcut>
+
+/// @param item An \c NSString or \c FLEX* metadata object.
+/// @note You may also pass a \c FLEXShortcut conforming object,
+/// and that object will be returned instead.
++ (id<FLEXShortcut>)shortcutFor:(id)item;
+
+@end
+
+
+/// Provides a quick and dirty implementation of the \c FLEXShortcut protocol,
+/// allowing you to specify a static title and dynamic atttributes for everything else.
+/// The object passed into each block is the object passed to each \c FLEXShortcut method.
+///
+/// Does not support the \c -editorWith: method.
+@interface FLEXActionShortcut : NSObject <FLEXShortcut>
+
++ (instancetype)title:(NSString *)title
+             subtitle:(nullable NSString *(^)(id object))subtitleFuture
+               viewer:(nullable UIViewController *(^)(id object))viewerFuture
+        accessoryType:(nullable UITableViewCellAccessoryType(^)(id object))accessoryTypeFuture;
+
++ (instancetype)title:(NSString *)title
+             subtitle:(nullable NSString *(^)(id object))subtitleFuture
+     selectionHandler:(nullable void (^)(UIViewController *host, id object))tapAction
+        accessoryType:(nullable UITableViewCellAccessoryType(^)(id object))accessoryTypeFuture;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 27 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcutsFactory+Defaults.h

@@ -0,0 +1,27 @@
+//
+//  FLEXShortcutsFactory+Defaults.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/29/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+@interface FLEXShortcutsFactory (UIApplication) @end
+
+@interface FLEXShortcutsFactory (Views) @end
+
+@interface FLEXShortcutsFactory (ViewControllers) @end
+
+@interface FLEXShortcutsFactory (UIImage) @end
+
+@interface FLEXShortcutsFactory (NSBundle) @end
+
+@interface FLEXShortcutsFactory (Classes) @end
+
+@interface FLEXShortcutsFactory (Activities) @end
+
+@interface FLEXShortcutsFactory (Blocks) @end
+
+@interface FLEXShortcutsFactory (Foundation) @end

+ 125 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXShortcutsSection.h

@@ -0,0 +1,125 @@
+//
+//  FLEXShortcutsSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/29/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewSection.h"
+#import "FLEXObjectInfoSection.h"
+@class FLEXProperty, FLEXIvar, FLEXMethod;
+
+/// An abstract base class for custom object "shortcuts" where every
+/// row can possibly have some action. The section title is "Shortcuts".
+///
+/// You should only subclass this class if you need simple shortcuts
+/// with plain titles and/or subtitles. This class will automatically
+/// configure each cell appropriately. Since this is intended as a
+/// static section, subclasses should only need to implement the
+/// \c viewControllerToPushForRow: and/or \c didSelectRowAction: methods.
+///
+/// If you create the section using \c forObject:rows:numberOfLines:
+/// then it will provide a view controller from \c viewControllerToPushForRow:
+/// automatically for rows that are a property/ivar/method.
+@interface FLEXShortcutsSection : FLEXTableViewSection <FLEXObjectInfoSection>
+
+/// Uses \c kFLEXDefaultCell
++ (instancetype)forObject:(id)objectOrClass rowTitles:(NSArray<NSString *> *)titles;
+/// Uses \c kFLEXDetailCell for non-empty subtitles, otherwise uses \c kFLEXDefaultCell
++ (instancetype)forObject:(id)objectOrClass
+                rowTitles:(NSArray<NSString *> *)titles
+             rowSubtitles:(NSArray<NSString *> *)subtitles;
+
+/// Uses \c kFLEXDefaultCell for rows that are given a title, otherwise
+/// this uses \c kFLEXDetailCell for any other allowed object.
+///
+/// The section provide a view controller from \c viewControllerToPushForRow:
+/// automatically for rows that are a property/ivar/method.
+///
+/// @param rows A mixed array containing any of the following:
+/// - any \c FLEXShortcut conforming object
+/// - an \c NSString
+/// - a \c FLEXProperty
+/// - a \c FLEXIvar
+/// - a \c FLEXMethodBase (includes \c FLEXMethod of course)
+/// Passing one of the latter 3 will provide a shortcut to that property/ivar/method.
+/// @return \c nil if no rows are provided
++ (instancetype)forObject:(id)objectOrClass rows:(NSArray *)rows;
+
+/// Same as \c forObject:rows: but the given rows are prepended
+/// to the shortcuts already registered for the object's class.
+/// \c forObject:rows: does not use the registered shortcuts at all.
++ (instancetype)forObject:(id)objectOrClass additionalRows:(NSArray *)rows;
+
+/// Calls into \c forObject:rows: using the registered shortcuts for the object's class.
+/// @return \c nil if the object has no shortcuts registered at all
++ (instancetype)forObject:(id)objectOrClass;
+
+/// Subclasses \e may override this to hide the disclosure indicator
+/// for some rows. It is shown for all rows by default, unless
+/// you initialize it with \c forObject:rowTitles:rowSubtitles:
+///
+/// When you hide the disclosure indicator, the row is not selectable.
+- (UITableViewCellAccessoryType)accessoryTypeForRow:(NSInteger)row;
+
+/// The number of lines for the title and subtitle labels. Defaults to 1.
+@property (nonatomic, readonly) NSInteger numberOfLines;
+/// The object used to initialize this section.
+@property (nonatomic, readonly) id object;
+
+/// Whether dynamic subtitles should always be computed as a cell is configured.
+/// Defaults to NO. Has no effect on static subtitles that are passed explicitly.
+@property (nonatomic) BOOL cacheSubtitles;
+
+@end
+
+@class FLEXShortcutsFactory;
+typedef FLEXShortcutsFactory *(^FLEXShortcutsFactoryNames)(NSArray *names);
+typedef void (^FLEXShortcutsFactoryTarget)(Class targetClass);
+
+/// The block properties below are to be used like SnapKit or Masonry.
+/// \c FLEXShortcutsSection.append.properties(@[@"frame",@"bounds"]).forClass(UIView.class);
+///
+/// To safely register your own classes at launch, subclass this class,
+/// override \c +load, and call the appropriate methods on \c self
+@interface FLEXShortcutsFactory : NSObject
+
+/// Returns the list of all registered shortcuts for the given object in this order:
+/// Properties, ivars, methods.
+///
+/// This method traverses up the object's class hierarchy until it finds
+/// something registered. This allows you to show different shortcuts for
+/// the same object in different parts of the class hierarchy.
+///
+/// As an example, UIView may have a -layer shortcut registered. But if
+/// you're inspecting a UIControl, you may not care about the layer or other
+/// UIView-specific things; you might rather see the target-actions registered
+/// for this control, and so you would register that property or ivar to UIControl,
+/// And you would still be able to see the UIView-registered shorcuts by clicking
+/// on the UIView "lens" at the top the explorer view controller screen.
++ (NSArray *)shortcutsForObjectOrClass:(id)objectOrClass;
+
+@property (nonatomic, readonly, class) FLEXShortcutsFactory *append;
+@property (nonatomic, readonly, class) FLEXShortcutsFactory *prepend;
+@property (nonatomic, readonly, class) FLEXShortcutsFactory *replace;
+
+@property (nonatomic, readonly) FLEXShortcutsFactoryNames properties;
+/// Do not try to set \c classProperties at the same time as \c ivars or other instance things.
+@property (nonatomic, readonly) FLEXShortcutsFactoryNames classProperties;
+@property (nonatomic, readonly) FLEXShortcutsFactoryNames ivars;
+@property (nonatomic, readonly) FLEXShortcutsFactoryNames methods;
+/// Do not try to set \c classMethods at the same time as \c ivars or other instance things.
+@property (nonatomic, readonly) FLEXShortcutsFactoryNames classMethods;
+
+/// Accepts the target class. If you pass a regular class object,
+/// shortcuts will appear on instances. If you pass a metaclass object,
+/// shortcuts will appear when exploring a class object.
+///
+/// For example, some class method shortcuts are added to the NSObject meta
+/// class by default so that you can see +alloc and +new when exploring
+/// a class object. If you wanted these to show up when exploring
+/// instances you would pass them to the classMethods method above.
+@property (nonatomic, readonly) FLEXShortcutsFactoryTarget forClass;
+
+@end

+ 28 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXSingleRowSection.h

@@ -0,0 +1,28 @@
+//
+//  FLEXSingleRowSection.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 9/25/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewSection.h"
+
+/// A section providing a specific single row.
+///
+/// You may optionally provide a view controller to push when the row
+/// is selected, or an action to perform when it is selected.
+/// Which one is used first is up to the table view data source.
+@interface FLEXSingleRowSection : FLEXTableViewSection
+
+/// @param reuseIdentifier if nil, kFLEXDefaultCell is used.
++ (instancetype)title:(NSString *)sectionTitle
+                reuse:(NSString *)reuseIdentifier
+                 cell:(void(^)(__kindof UITableViewCell *cell))cellConfiguration;
+
+@property (nonatomic) UIViewController *pushOnSelection;
+@property (nonatomic) void (^selectionAction)(UIViewController *host);
+/// Called to determine whether the single row should display itself or not.
+@property (nonatomic) BOOL (^filterMatcher)(NSString *filterText);
+
+@end

+ 14 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXSubtitleTableViewCell.h

@@ -0,0 +1,14 @@
+//
+//  FLEXSubtitleTableViewCell.h
+//  FLEX
+//
+//  Created by Tanner on 4/17/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXTableViewCell.h"
+
+/// A cell initialized with \c UITableViewCellStyleSubtitle
+@interface FLEXSubtitleTableViewCell : FLEXTableViewCell
+
+@end

+ 48 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableView.h

@@ -0,0 +1,48 @@
+//
+//  FLEXTableView.h
+//  FLEX
+//
+//  Created by Tanner on 4/17/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark Reuse identifiers
+
+typedef NSString * FLEXTableViewCellReuseIdentifier;
+
+/// A regular \c FLEXTableViewCell initialized with \c UITableViewCellStyleDefault
+extern FLEXTableViewCellReuseIdentifier const kFLEXDefaultCell;
+/// A \c FLEXSubtitleTableViewCell initialized with \c UITableViewCellStyleSubtitle
+extern FLEXTableViewCellReuseIdentifier const kFLEXDetailCell;
+/// A \c FLEXMultilineTableViewCell initialized with \c UITableViewCellStyleDefault
+extern FLEXTableViewCellReuseIdentifier const kFLEXMultilineCell;
+/// A \c FLEXMultilineTableViewCell initialized with \c UITableViewCellStyleSubtitle
+extern FLEXTableViewCellReuseIdentifier const kFLEXMultilineDetailCell;
+/// A \c FLEXTableViewCell initialized with \c UITableViewCellStyleValue1
+extern FLEXTableViewCellReuseIdentifier const kFLEXKeyValueCell;
+/// A \c FLEXSubtitleTableViewCell which uses monospaced fonts for both labels
+extern FLEXTableViewCellReuseIdentifier const kFLEXCodeFontCell;
+
+#pragma mark - FLEXTableView
+@interface FLEXTableView : UITableView
+
++ (instancetype)flexDefaultTableView;
++ (instancetype)groupedTableView;
++ (instancetype)plainTableView;
++ (instancetype)style:(UITableViewStyle)style;
+
+/// You do not need to register classes for any of the default reuse identifiers above
+/// (annotated as \c FLEXTableViewCellReuseIdentifier types) unless you wish to provide
+/// a custom cell for any of those reuse identifiers. By default, \c FLEXTableViewCell,
+/// \c FLEXSubtitleTableViewCell, and \c FLEXMultilineTableViewCell are used, respectively.
+///
+/// @param registrationMapping A map of reuse identifiers to \c UITableViewCell (sub)class objects.
+- (void)registerCells:(NSDictionary<NSString *, Class> *)registrationMapping;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 23 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewCell.h

@@ -0,0 +1,23 @@
+//
+//  FLEXTableViewCell.h
+//  FLEX
+//
+//  Created by Tanner on 4/17/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface FLEXTableViewCell : UITableViewCell
+
+/// Use this instead of .textLabel
+@property (nonatomic, readonly) UILabel *titleLabel;
+/// Use this instead of .detailTextLabel
+@property (nonatomic, readonly) UILabel *subtitleLabel;
+
+/// Subclasses can override this instead of initializers to
+/// perform additional initialization without lots of boilerplate.
+/// Remember to call super!
+- (void)postInit;
+
+@end

+ 149 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewController.h

@@ -0,0 +1,149 @@
+//
+//  FLEXTableViewController.h
+//  FLEX
+//
+//  Created by Tanner on 7/5/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "FLEXTableView.h"
+@class FLEXScopeCarousel, FLEXWindow, FLEXTableViewSection;
+
+typedef CGFloat FLEXDebounceInterval;
+/// No delay, all events delivered
+extern CGFloat const kFLEXDebounceInstant;
+/// Small delay which makes UI seem smoother by avoiding rapid events
+extern CGFloat const kFLEXDebounceFast;
+/// Slower than Fast, faster than ExpensiveIO
+extern CGFloat const kFLEXDebounceForAsyncSearch;
+/// The least frequent, at just over once per second; for I/O or other expensive operations
+extern CGFloat const kFLEXDebounceForExpensiveIO;
+
+@protocol FLEXSearchResultsUpdating <NSObject>
+/// A method to handle search query update events.
+///
+/// \c searchBarDebounceInterval is used to reduce the frequency at which this
+/// method is called. This method is also called when the search bar becomes
+/// the first responder, and when the selected search bar scope index changes.
+- (void)updateSearchResults:(NSString *)newText;
+@end
+
+@interface FLEXTableViewController : UITableViewController <
+    UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate
+>
+
+/// A grouped table view. Inset on iOS 13.
+///
+/// Simply calls into \c initWithStyle:
+- (id)init;
+
+/// Subclasses may override to configure the controller before \c viewDidLoad:
+- (id)initWithStyle:(UITableViewStyle)style;
+
+@property (nonatomic) FLEXTableView *tableView;
+
+/// If your subclass conforms to \c FLEXSearchResultsUpdating
+/// then this property is assigned to \c self automatically.
+///
+/// Setting \c filterDelegate will also set this property to that object.
+@property (nonatomic, weak) id<FLEXSearchResultsUpdating> searchDelegate;
+
+/// Defaults to NO.
+///
+/// Setting this to YES will initialize the carousel and the view.
+@property (nonatomic) BOOL showsCarousel;
+/// A horizontally scrolling list with functionality similar to
+/// that of a search bar's scope bar. You'd want to use this when
+/// you have potentially more than 4 scope options.
+@property (nonatomic) FLEXScopeCarousel *carousel;
+
+/// Defaults to NO.
+///
+/// Setting this to YES will initialize searchController and the view.
+@property (nonatomic) BOOL showsSearchBar;
+/// Defaults to NO.
+///
+/// Setting this to YES will make the search bar appear whenever the view appears.
+/// Otherwise, iOS will only show the search bar when you scroll up.
+@property (nonatomic) BOOL showSearchBarInitially;
+
+/// nil unless showsSearchBar is set to YES.
+///
+/// self is used as the default search results updater and delegate.
+/// The search bar will not dim the background or hide the navigation bar by default.
+/// On iOS 11 and up, the search bar will appear in the navigation bar below the title.
+@property (nonatomic) UISearchController *searchController;
+/// Used to initialize the search controller. Defaults to nil.
+@property (nonatomic) UIViewController *searchResultsController;
+/// Defaults to "Fast"
+///
+/// Determines how often search bar results will be "debounced."
+/// Empty query events are always sent instantly. Query events will
+/// be sent when the user has not changed the query for this interval.
+@property (nonatomic) FLEXDebounceInterval searchBarDebounceInterval;
+/// Whether the search bar stays at the top of the view while scrolling.
+///
+/// Calls into self.navigationItem.hidesSearchBarWhenScrolling.
+/// Do not change self.navigationItem.hidesSearchBarWhenScrolling directly,
+/// or it will not be respsected. Use this instead.
+/// Defaults to NO.
+@property (nonatomic) BOOL pinSearchBar;
+/// By default, we will show the search bar's cancel button when
+/// search becomes active and hide it when search is dismissed.
+///
+/// Do not set the showsCancelButton property on the searchController's
+/// searchBar manually. Set this property after turning on showsSearchBar.
+///
+/// Does nothing pre-iOS 13, safe to call on any version.
+@property (nonatomic) BOOL automaticallyShowsSearchBarCancelButton;
+
+/// If using the scope bar, self.searchController.searchBar.selectedScopeButtonIndex.
+/// Otherwise, this is the selected index of the carousel, or NSNotFound if using neither.
+@property (nonatomic) NSInteger selectedScope;
+/// self.searchController.searchBar.text
+@property (nonatomic, readonly, copy) NSString *searchText;
+
+/// A totally optional delegate to forward search results updater calls to.
+/// If a delegate is set, updateSearchResults: is not called on this view controller.
+@property (nonatomic, weak) id<FLEXSearchResultsUpdating> searchResultsUpdater;
+
+/// self.view.window as a \c FLEXWindow
+@property (nonatomic, readonly) FLEXWindow *window;
+
+/// Convenient for doing some async processor-intensive searching
+/// in the background before updating the UI back on the main queue.
+- (void)onBackgroundQueue:(NSArray *(^)(void))backgroundBlock thenOnMainQueue:(void(^)(NSArray *))mainBlock;
+
+/// Adds up to 3 additional items to the toolbar in right-to-left order.
+///
+/// That is, the first item in the given array will be the rightmost item behind
+/// any existing toolbar items. By default, buttons for bookmarks and tabs are shown.
+///
+/// If you wish to have more control over how the buttons are arranged or which
+/// buttons are displayed, you can access the properties for the pre-existing
+/// toolbar items directly and manually set \c self.toolbarItems by overriding
+/// the \c setupToolbarItems method below.
+- (void)addToolbarItems:(NSArray<UIBarButtonItem *> *)items;
+
+/// Subclasses may override. You should not need to call this method directly.
+- (void)setupToolbarItems;
+
+@property (nonatomic, readonly) UIBarButtonItem *shareToolbarItem;
+@property (nonatomic, readonly) UIBarButtonItem *bookmarksToolbarItem;
+@property (nonatomic, readonly) UIBarButtonItem *openTabsToolbarItem;
+
+/// Whether or not to display the "share" icon in the middle of the toolbar. NO by default.
+///
+/// Turning this on after you have added custom toolbar items will
+/// push off the leftmost toolbar item and shift the others leftward.
+@property (nonatomic) BOOL showsShareToolbarItem;
+/// Called when the share button is pressed.
+/// Default implementation does nothign. Subclasses may override.
+- (void)shareButtonPressed:(UIBarButtonItem *)sender;
+
+/// Subclasses may call this to opt-out of all toolbar related behavior.
+/// This is necessary if you want to disable the gesture which reveals the toolbar.
+- (void)disableToolbar;
+
+@end

+ 149 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXTableViewSection.h

@@ -0,0 +1,149 @@
+//
+//  FLEXTableViewSection.h
+//  FLEX
+//
+//  Created by Tanner on 1/29/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "FLEXMacros.h"
+#import "NSArray+FLEX.h"
+@class FLEXTableView;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark FLEXTableViewSection
+
+/// An abstract base class for table view sections.
+///
+/// Many properties or methods here return nil or some logical equivalent by default.
+/// Even so, most of the methods with defaults are intended to be overriden by subclasses.
+/// Some methods are not implemented at all and MUST be implemented by a subclass.
+@interface FLEXTableViewSection : NSObject {
+    @protected
+    /// Unused by default, use if you want
+    NSString *_title;
+    
+    @private
+    __weak UITableView *_tableView;
+    NSInteger _sectionIndex;
+}
+
+#pragma mark - Data
+
+/// A title to be displayed for the custom section.
+/// Subclasses may override or use the \c _title ivar.
+@property (nonatomic, readonly, nullable, copy) NSString *title;
+/// The number of rows in this section. Subclasses must override.
+/// This should not change until \c filterText is changed or \c reloadData is called.
+@property (nonatomic, readonly) NSInteger numberOfRows;
+/// A map of reuse identifiers to \c UITableViewCell (sub)class objects.
+/// Subclasses \e may override this as necessary, but are not required to.
+/// See \c FLEXTableView.h for more information.
+/// @return nil by default.
+@property (nonatomic, readonly, nullable) NSDictionary<NSString *, Class> *cellRegistrationMapping;
+
+/// The section should filter itself based on the contents of this property
+/// as it is set. If it is set to nil or an empty string, it should not filter.
+/// Subclasses should override or observe this property and react to changes.
+///
+/// It is common practice to use two arrays for the underlying model:
+/// One to hold all rows, and one to hold unfiltered rows. When \c setFilterText:
+/// is called, call \c super to store the new value, and re-filter your model accordingly.
+@property (nonatomic, nullable) NSString *filterText;
+
+/// Provides an avenue for the section to refresh data or change the number of rows.
+///
+/// This is called before reloading the table view itself. If your section pulls data
+/// from an external data source, this is a good place to refresh that data entirely.
+/// If your section does not, then it might be simpler for you to just override
+/// \c setFilterText: to call \c super and call \c reloadData.
+- (void)reloadData;
+
+/// Like \c reloadData, but optionally reloads the table view section
+/// associated with this section object, if any. Do not override.
+/// Do not call outside of the main thread.
+- (void)reloadData:(BOOL)updateTable;
+
+/// Provide a table view and section index to allow the section to efficiently reload
+/// its own section of the table when something changes it. The table reference is
+/// held weakly, and subclasses cannot access it or the index. Call this method again
+/// if the section numbers have changed since you last called it.
+- (void)setTable:(UITableView *)tableView section:(NSInteger)index;
+
+#pragma mark - Row Selection
+
+/// Whether the given row should be selectable, such as if tapping the cell
+/// should take the user to a new screen or trigger an action.
+/// Subclasses \e may override this as necessary, but are not required to.
+/// @return \c NO by default
+- (BOOL)canSelectRow:(NSInteger)row;
+
+/// An action "future" to be triggered when the row is selected, if the row
+/// supports being selected as indicated by \c canSelectRow:. Subclasses
+/// must implement this in accordance with how they implement \c canSelectRow:
+/// if they do not implement \c viewControllerToPushForRow:
+/// @return This returns \c nil if no view controller is provided by
+/// \c viewControllerToPushForRow: — otherwise it pushes that view controller
+/// onto \c host.navigationController
+- (nullable void(^)(__kindof UIViewController *host))didSelectRowAction:(NSInteger)row;
+
+/// A view controller to display when the row is selected, if the row
+/// supports being selected as indicated by \c canSelectRow:. Subclasses
+/// must implement this in accordance with how they implement \c canSelectRow:
+/// if they do not implement \c didSelectRowAction:
+/// @return \c nil by default
+- (nullable UIViewController *)viewControllerToPushForRow:(NSInteger)row;
+
+/// Called when the accessory view's detail button is pressed.
+/// @return \c nil by default.
+- (nullable void(^)(__kindof UIViewController *host))didPressInfoButtonAction:(NSInteger)row;
+
+#pragma mark - Context Menus
+#if FLEX_AT_LEAST_IOS13_SDK
+
+/// By default, this is the title of the row.
+/// @return The title of the context menu, if any.
+- (nullable NSString *)menuTitleForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
+/// Protected, not intended for public use. \c menuTitleForRow:
+/// already includes the value returned from this method.
+/// 
+/// By default, this returns \c @"". Subclasses may override to
+/// provide a detailed description of the target of the context menu.
+- (NSString *)menuSubtitleForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
+/// The context menu items, if any. Subclasses may override.
+/// By default, only inludes items for \c copyMenuItemsForRow:.
+- (nullable NSArray<UIMenuElement *> *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender API_AVAILABLE(ios(13.0));
+/// Subclasses may override to return a list of copiable items.
+///
+/// Every two elements in the list compose a key-value pair, where the key
+/// should be a description of what will be copied, and the values should be
+/// the strings to copy. Return an empty string as a value to show a disabled action.
+- (nullable NSArray<NSString *> *)copyMenuItemsForRow:(NSInteger)row API_AVAILABLE(ios(13.0));
+#endif
+
+#pragma mark - Cell Configuration
+
+/// Provide a reuse identifier for the given row. Subclasses should override.
+///
+/// Custom reuse identifiers should be specified in \c cellRegistrationMapping.
+/// You may return any of the identifiers in \c FLEXTableView.h
+/// without including them in the \c cellRegistrationMapping.
+/// @return \c kFLEXDefaultCell by default.
+- (NSString *)reuseIdentifierForRow:(NSInteger)row;
+/// Configure a cell for the given row. Subclasses must override.
+- (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row;
+
+#pragma mark - External Convenience
+
+/// For use by whatever view controller uses your section. Not required.
+/// @return An optional title.
+- (nullable NSString *)titleForRow:(NSInteger)row;
+/// For use by whatever view controller uses your section. Not required.
+/// @return An optional subtitle.
+- (nullable NSString *)subtitleForRow:(NSInteger)row;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 46 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXTypeEncodingParser.h

@@ -0,0 +1,46 @@
+//
+//  FLEXTypeEncodingParser.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 8/22/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// @return \c YES if the type is supported, \c NO otherwise
+BOOL FLEXGetSizeAndAlignment(const char *type, NSUInteger * _Nullable sizep, NSUInteger * _Nullable alignp);
+
+@interface FLEXTypeEncodingParser : NSObject
+
+/// \c cleanedEncoding is necessary because a type encoding may contain a pointer
+/// to an unsupported type. \c NSMethodSignature will pass each type to \c NSGetSizeAndAlignment
+/// which will throw an exception on unsupported struct pointers, and this exception is caught
+/// by \c NSMethodSignature, but it still bothers anyone debugging with \c objc_exception_throw
+///
+/// @param cleanedEncoding the "safe" type encoding you can pass to \c NSMethodSignature
+/// @return whether the given type encoding can be passed to
+/// \c NSMethodSignature without it throwing an exception.
++ (BOOL)methodTypeEncodingSupported:(NSString *)typeEncoding cleaned:(NSString *_Nonnull*_Nullable)cleanedEncoding;
+
+/// @return The type encoding of an individual argument in a method's type encoding string.
+/// Pass 0 to get the type of the return value. 1 and 2 are `self` and `_cmd` respectively.
++ (NSString *)type:(NSString *)typeEncoding forMethodArgumentAtIndex:(NSUInteger)idx;
+
+/// @return The size in bytes of the typeof an individual argument in a method's type encoding string.
+/// Pass 0 to get the size of the return value. 1 and 2 are `self` and `_cmd` respectively.
++ (ssize_t)size:(NSString *)typeEncoding forMethodArgumentAtIndex:(NSUInteger)idx;
+
+/// @param unaligned whether to compute the aligned or unaligned size.
+/// @return The size in bytes, or \c -1 if the type encoding is unsupported.
+/// Do not pass in the result of \c method_getTypeEncoding
++ (ssize_t)sizeForTypeEncoding:(NSString *)type alignment:(nullable ssize_t *)alignOut unaligned:(BOOL)unaligned;
+
+/// Defaults to \C unaligned:NO
++ (ssize_t)sizeForTypeEncoding:(NSString *)type alignment:(nullable ssize_t *)alignOut;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 15 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXViewControllerShortcuts.h

@@ -0,0 +1,15 @@
+//
+//  FLEXViewControllerShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/12/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+@interface FLEXViewControllerShortcuts : FLEXShortcutsSection
+
++ (instancetype)forObject:(UIViewController *)viewController;
+
+@end

+ 14 - 0
layout/Library/Frameworks/FLEX.framework/Headers/FLEXViewShortcuts.h

@@ -0,0 +1,14 @@
+//
+//  FLEXViewShortcuts.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/11/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXShortcutsSection.h"
+
+/// Adds "Nearest View Controller" and "Preview Image" shortcuts to all views
+@interface FLEXViewShortcuts : FLEXShortcutsSection
+
+@end

+ 32 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSArray+FLEX.h

@@ -0,0 +1,32 @@
+//
+//  NSArray+FLEX.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 9/25/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSArray<T> (Functional)
+
+/// Actually more like flatmap, but it seems like the objc way to allow returning nil to omit objects.
+/// So, return nil from the block to omit objects, and return an object to include it in the new array.
+/// Unlike flatmap, however, this will not flatten arrays of arrays into a single array.
+- (__kindof NSArray *)flex_mapped:(id(^)(T obj, NSUInteger idx))mapFunc;
+/// Like flex_mapped, but expects arrays to be returned, and flattens them into one array.
+- (__kindof NSArray *)flex_flatmapped:(NSArray *(^)(id, NSUInteger idx))block;
+- (instancetype)flex_filtered:(BOOL(^)(T obj, NSUInteger idx))filterFunc;
+- (void)flex_forEach:(void(^)(T obj, NSUInteger idx))block;
+
+/// Unlike \c subArrayWithRange: this will not throw an exception if \c maxLength
+/// is greater than the size of the array. If the array has one element and
+/// \c maxLength is greater than 1, you get an array with 1 element back.
+- (instancetype)flex_subArrayUpto:(NSUInteger)maxLength;
+
++ (instancetype)flex_forEachUpTo:(NSUInteger)bound map:(T(^)(NSUInteger i))block;
++ (instancetype)flex_mapped:(id<NSFastEnumeration>)collection block:(id(^)(T obj, NSUInteger idx))mapFunc;
+
+- (instancetype)sortedUsingSelector:(SEL)selector;
+
+@end

+ 21 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSDictionary+ObjcRuntime.h

@@ -0,0 +1,21 @@
+//
+//  NSDictionary+ObjcRuntime.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/5/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <objc/runtime.h>
+
+@interface NSDictionary (ObjcRuntime)
+
+/// \c kFLEXPropertyAttributeKeyTypeEncoding is the only required key.
+/// Keys representing a boolean value should have a value of \c YES instead of an empty string.
+- (NSString *)propertyAttributesString;
+
++ (instancetype)attributesDictionaryForProperty:(objc_property_t)property;
+
+@end

+ 20 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSMapTable+FLEX_Subscripting.h

@@ -0,0 +1,20 @@
+//
+//  NSMapTable+FLEX_Subscripting.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 1/9/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSMapTable<KeyType, ObjectType> (FLEX_Subscripting)
+
+- (nullable ObjectType)objectForKeyedSubscript:(KeyType)key;
+- (void)setObject:(nullable ObjectType)obj forKeyedSubscript:(KeyType <NSCopying>)key;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 240 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSObject+FLEX_Reflection.h

@@ -0,0 +1,240 @@
+//
+//  NSObject+FLEX_Reflection.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 6/30/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import <objc/runtime.h>
+@class FLEXMirror, FLEXMethod, FLEXIvar, FLEXProperty, FLEXMethodBase, FLEXPropertyAttributes, FLEXProtocol;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSObject (tvOS)
+- (UIViewController *)topViewController;
+- (BOOL)darkMode;
+@end
+
+/// Returns the type encoding string given the encoding for the return type and parameters, if any.
+/// @discussion Example usage for a \c void returning method which takes
+/// an \c int: @code FLEXTypeEncoding(@encode(void), @encode(int));
+/// @param returnType The encoded return type. \c void for exmaple would be \c @encode(void).
+/// @param count The number of parameters in this type encoding string.
+/// @return The type encoding string, or \c nil if \e returnType is \c NULL.
+NSString * FLEXTypeEncodingString(const char *returnType, NSUInteger count, ...);
+
+NSArray<Class> *FLEXGetAllSubclasses(_Nullable Class cls, BOOL includeSelf);
+NSArray<Class> *FLEXGetClassHierarchy(_Nullable Class cls, BOOL includeSelf);
+NSArray<FLEXProtocol *> *FLEXGetConformedProtocols(_Nullable Class cls);
+
+NSArray<FLEXIvar *> *FLEXGetAllIvars(_Nullable Class cls);
+/// @param cls a class object to get instance properties,
+/// or a metaclass object to get class properties
+NSArray<FLEXProperty *> *FLEXGetAllProperties(_Nullable Class cls);
+/// @param cls a class object to get instance methods,
+/// or a metaclass object to get class methods
+/// @param instance used to mark methods as instance methods or not.
+/// Not used to determine whether to get instance or class methods. 
+NSArray<FLEXMethod *> *FLEXGetAllMethods(_Nullable Class cls, BOOL instance);
+/// @param cls a class object to get all instance and class methods.
+NSArray<FLEXMethod *> *FLEXGetAllInstanceAndClassMethods(_Nullable Class cls);
+
+
+
+#pragma mark Reflection
+@interface NSObject (Reflection)
+
+@property (nonatomic, readonly       ) FLEXMirror *flex_reflection;
+@property (nonatomic, readonly, class) FLEXMirror *flex_reflection;
+
+/// Calls into /c FLEXGetAllSubclasses
+/// @return Every subclass of the receiving class, including the receiver itself.
+@property (nonatomic, readonly, class) NSArray<Class> *flex_allSubclasses;
+
+/// @return The \c Class object for the metaclass of the recieving class, or \c Nil if the class is Nil or not registered.
+@property (nonatomic, readonly, class) Class flex_metaclass;
+/// @return The size in bytes of instances of the recieving class, or \c 0 if \e cls is \c Nil.
+@property (nonatomic, readonly, class) size_t flex_instanceSize;
+
+/// Changes the class of an object instance.
+/// @return The previous value of the objects \c class, or \c Nil if the object is \c nil.
+- (Class)flex_setClass:(Class)cls;
+/// Sets the recieving class's superclass. "You should not use this method" — Apple.
+/// @return The old superclass.
++ (Class)flex_setSuperclass:(Class)superclass;
+
+/// Calls into \c FLEXGetClassHierarchy()
+/// @return a list of classes going up the class hierarchy,
+/// starting with the receiver and ending with the root class.
+@property (nonatomic, readonly, class) NSArray<Class> *flex_classHierarchy;
+
+/// Calls into \c FLEXGetConformedProtocols
+/// @return a list of protocols this class itself conforms to.
+@property (nonatomic, readonly, class) NSArray<FLEXProtocol *> *flex_protocols;
+
+@end
+
+
+#pragma mark Methods
+@interface NSObject (Methods)
+
+/// All instance and class methods specific to the recieving class.
+/// @discussion This method will only retrieve methods specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXMethod objects.
+@property (nonatomic, readonly, class) NSArray<FLEXMethod *> *flex_allMethods;
+/// All instance methods specific to the recieving class.
+/// @discussion This method will only retrieve methods specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXMethod objects.
+@property (nonatomic, readonly, class) NSArray<FLEXMethod *> *flex_allInstanceMethods;
+/// All class methods specific to the recieving class.
+/// @discussion This method will only retrieve methods specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXMethod objects.
+@property (nonatomic, readonly, class) NSArray<FLEXMethod *> *flex_allClassMethods;
+
+/// Retrieves the class's instance method with the given name.
+/// @return An initialized \c FLEXMethod object, or \c nil if the method wasn't found.
++ (FLEXMethod *)flex_methodNamed:(NSString *)name;
+
+/// Retrieves the class's class method with the given name.
+/// @return An initialized \c FLEXMethod object, or \c nil if the method wasn't found.
++ (FLEXMethod *)flex_classMethodNamed:(NSString *)name;
+
+/// Adds a new method to the recieving class with a given name and implementation.
+/// @discussion This method will add an override of a superclass's implementation,
+/// but will not replace an existing implementation in the class.
+/// To change an existing implementation, use \c replaceImplementationOfMethod:with:.
+///
+/// Type encodings start with the return type and end with the parameter types in order.
+/// The type encoding for \c NSArray's \c count property getter looks like this:
+/// @code [NSString stringWithFormat:@"%s%s%s%s", @encode(void), @encode(id), @encode(SEL), @encode(NSUInteger)] @endcode
+/// Using the \c FLEXTypeEncoding function for the same method looks like this:
+/// @code FLEXTypeEncodingString(@encode(void), 1, @encode(NSUInteger)) @endcode
+/// @param typeEncoding The type encoding string. Consider using the \c FLEXTypeEncodingString() function.
+/// @param instanceMethod NO to add the method to the class itself or YES to add it as an instance method.
+/// @return YES if the method was added successfully, \c NO otherwise
+/// (for example, the class already contains a method implementation with that name).
++ (BOOL)addMethod:(SEL)selector
+     typeEncoding:(NSString *)typeEncoding
+   implementation:(IMP)implementaiton
+      toInstances:(BOOL)instanceMethod;
+
+/// Replaces the implementation of a method in the recieving class.
+/// @param instanceMethod YES to replace the instance method, NO to replace the class method.
+/// @note This function behaves in two different ways:
+///
+/// - If the method does not yet exist in the recieving class, it is added as if
+/// \c addMethod:typeEncoding:implementation were called.
+///
+/// - If the method does exist, its \c IMP is replaced.
+/// @return The previous \c IMP of \e method.
++ (IMP)replaceImplementationOfMethod:(FLEXMethodBase *)method with:(IMP)implementation useInstance:(BOOL)instanceMethod;
+/// Swaps the implementations of the given methods.
+/// @discussion If one or neither of the given methods exist in the recieving class,
+/// they are added to the class with their implementations swapped as if each method did exist.
+/// This method will not fail if each \c FLEXSimpleMethod contains a valid selector.
+/// @param instanceMethod YES to swizzle the instance method, NO to swizzle the class method.
++ (void)swizzle:(FLEXMethodBase *)original with:(FLEXMethodBase *)other onInstance:(BOOL)instanceMethod;
+/// Swaps the implementations of the given methods.
+/// @param instanceMethod YES to swizzle the instance method, NO to swizzle the class method.
+/// @return \c YES if successful, and \c NO if selectors could not be retrieved from the given strings.
++ (BOOL)swizzleByName:(NSString *)original with:(NSString *)other onInstance:(BOOL)instanceMethod;
+/// Swaps the implementations of methods corresponding to the given selectors.
++ (void)swizzleBySelector:(SEL)original with:(SEL)other onInstance:(BOOL)instanceMethod;
+
+@end
+
+
+#pragma mark Properties
+@interface NSObject (Ivars)
+
+/// All of the instance variables specific to the recieving class.
+/// @discussion This method will only retrieve instance varibles specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call \c [[self superclass] allIvars].
+/// @return An array of \c FLEXIvar objects.
+@property (nonatomic, readonly, class) NSArray<FLEXIvar *> *flex_allIvars;
+
+/// Retrieves an instance variable with the corresponding name.
+/// @return An initialized \c FLEXIvar object, or \c nil if the Ivar wasn't found.
++ (FLEXIvar *)flex_ivarNamed:(NSString *)name;
+
+/// @return The address of the given ivar in the recieving object in memory,
+/// or \c NULL if it could not be found.
+- (void *)flex_getIvarAddress:(FLEXIvar *)ivar;
+/// @return The address of the given ivar in the recieving object in memory,
+/// or \c NULL if it could not be found.
+- (void *)flex_getIvarAddressByName:(NSString *)name;
+/// @discussion This method faster than creating an \c FLEXIvar and calling
+/// \c -getIvarAddress: if you already have an \c Ivar on hand
+/// @return The address of the given ivar in the recieving object in memory,
+/// or \c NULL if it could not be found\.
+- (void *)flex_getObjcIvarAddress:(Ivar)ivar;
+
+/// Sets the value of the given instance variable on the recieving object.
+/// @discussion Use only when the target instance variable is an object.
+- (void)flex_setIvar:(FLEXIvar *)ivar object:(id)value;
+/// Sets the value of the given instance variable on the recieving object.
+/// @discussion Use only when the target instance variable is an object.
+/// @return \c YES if successful, or \c NO if the instance variable could not be found.
+- (BOOL)flex_setIvarByName:(NSString *)name object:(id)value;
+/// @discussion Use only when the target instance variable is an object.
+/// This method is faster than creating an \c FLEXIvar and calling
+/// \c -setIvar: if you already have an \c Ivar on hand.
+- (void)flex_setObjcIvar:(Ivar)ivar object:(id)value;
+
+/// Sets the value of the given instance variable on the recieving object to the
+/// \e size number of bytes of data at \e value.
+/// @discussion Use one of the other methods if you can help it.
+- (void)flex_setIvar:(FLEXIvar *)ivar value:(void *)value size:(size_t)size;
+/// Sets the value of the given instance variable on the recieving object to the
+/// \e size number of bytes of data at \e value.
+/// @discussion Use one of the other methods if you can help it
+/// @return \c YES if successful, or \c NO if the instance variable could not be found.
+- (BOOL)flex_setIvarByName:(NSString *)name value:(void *)value size:(size_t)size;
+/// Sets the value of the given instance variable on the recieving object to the
+/// \e size number of bytes of data at \e value.
+/// @discussion This is faster than creating an \c FLEXIvar and calling
+/// \c -setIvar:value:size if you already have an \c Ivar on hand.
+- (void)flex_setObjcIvar:(Ivar)ivar value:(void *)value size:(size_t)size;
+
+@end
+
+#pragma mark Properties
+@interface NSObject (Properties)
+
+/// All instance and class properties specific to the recieving class.
+/// @discussion This method will only retrieve properties specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXProperty objects.
+@property (nonatomic, readonly, class) NSArray<FLEXProperty *> *flex_allProperties;
+/// All instance properties specific to the recieving class.
+/// @discussion This method will only retrieve properties specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXProperty objects.
+@property (nonatomic, readonly, class) NSArray<FLEXProperty *> *flex_allInstanceProperties;
+/// All class properties specific to the recieving class.
+/// @discussion This method will only retrieve properties specific to the recieving class.
+/// To retrieve instance variables on a parent class, simply call this on \c [self superclass].
+/// @return An array of \c FLEXProperty objects.
+@property (nonatomic, readonly, class) NSArray<FLEXProperty *> *flex_allClassProperties;
+
+/// Retrieves the class's property with the given name.
+/// @return An initialized \c FLEXProperty object, or \c nil if the property wasn't found.
++ (FLEXProperty *)flex_propertyNamed:(NSString *)name;
+/// @return An initialized \c FLEXProperty object, or \c nil if the property wasn't found.
++ (FLEXProperty *)flex_classPropertyNamed:(NSString *)name;
+
+/// Replaces the given property on the recieving class.
++ (void)flex_replaceProperty:(FLEXProperty *)property;
+/// Replaces the given property on the recieving class. Useful for changing a property's attributes.
++ (void)flex_replaceProperty:(NSString *)name attributes:(FLEXPropertyAttributes *)attributes;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 33 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSString+FLEX.h

@@ -0,0 +1,33 @@
+//
+//  NSString+FLEX.h
+//  FLEX
+//
+//  Created by Tanner on 3/26/17.
+//  Copyright © 2017 Tanner Bennett. All rights reserved.
+//
+
+#import "FLEXRuntimeConstants.h"
+
+@interface NSString (FLEXTypeEncoding)
+
+///@return whether this type starts with the const specifier
+@property (nonatomic, readonly) BOOL flex_typeIsConst;
+/// @return the first char in the type encoding that is not the const specifier
+@property (nonatomic, readonly) FLEXTypeEncoding flex_firstNonConstType;
+/// @return the first char in the type encoding after the pointer specifier, if it is a pointer
+@property (nonatomic, readonly) FLEXTypeEncoding flex_pointeeType;
+/// @return whether this type is an objc object of any kind, even if it's const
+@property (nonatomic, readonly) BOOL flex_typeIsObjectOrClass;
+/// @return the class named in this type encoding if it is of the form \c @"MYClass"
+@property (nonatomic, readonly) Class flex_typeClass;
+/// Includes C strings and selectors as well as regular pointers
+@property (nonatomic, readonly) BOOL flex_typeIsNonObjcPointer;
+
+@end
+
+@interface NSString (KeyPaths)
+
+- (NSString *)stringByRemovingLastKeyPathComponent;
+- (NSString *)stringByReplacingLastKeyPathComponent:(NSString *)replacement;
+
+@end

+ 23 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSString+ObjcRuntime.h

@@ -0,0 +1,23 @@
+//
+//  NSString+ObjcRuntime.h
+//  FLEX
+//
+//  Derived from MirrorKit.
+//  Created by Tanner on 7/1/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSString (Utilities)
+
+/// A dictionary of property attributes if the receiver is a valid property attributes string.
+/// Values are either a string or \c YES. Boolean attributes which are false will not be
+/// present in the dictionary. See this link on how to construct a proper attributes string:
+/// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html
+///
+/// Note: this method doesn't work properly for certain type encodings, and neither does
+/// the property_copyAttributeValue function in the runtime itself. Radar: FB7499230
+- (NSDictionary *)propertyAttributes;
+
+@end

+ 19 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSTimer+FLEX.h

@@ -0,0 +1,19 @@
+//
+//  NSTimer+Blocks.h
+//  FLEX
+//
+//  Created by Tanner on 3/23/17.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef void (^VoidBlock)(void);
+
+@interface NSTimer (Blocks)
+
++ (instancetype)fireSecondsFromNow:(NSTimeInterval)delay block:(VoidBlock)block;
+
+// Forward declaration
+//+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block;
+
+@end

+ 44 - 0
layout/Library/Frameworks/FLEX.framework/Headers/NSUserDefaults+FLEX.h

@@ -0,0 +1,44 @@
+//
+//  NSUserDefaults+FLEX.h
+//  FLEX
+//
+//  Created by Tanner on 3/10/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+// Only use these if the getters and setters aren't good enough for whatever reason
+extern NSString * const kFLEXDefaultsToolbarTopMarginKey;
+extern NSString * const kFLEXDefaultsiOSPersistentOSLogKey;
+extern NSString * const kFLEXDefaultsHidePropertyIvarsKey;
+extern NSString * const kFLEXDefaultsHidePropertyMethodsKey;
+extern NSString * const kFLEXDefaultsHideMethodOverridesKey;
+extern NSString * const kFLEXDefaultsHideVariablePreviewsKey;
+extern NSString * const kFLEXDefaultsNetworkHostBlacklistKey;
+extern NSString * const kFLEXDefaultsDisableOSLogForceASLKey;
+extern NSString * const kFLEXDefaultsRegisterJSONExplorerKey;
+
+/// All BOOL preferences are NO by default
+@interface NSUserDefaults (FLEX)
+
+- (void)flex_toggleBoolForKey:(NSString *)key;
+
+@property (nonatomic) double flex_toolbarTopMargin;
+
+// Not actually stored in defaults, but written to a file
+@property (nonatomic) NSArray<NSString *> *flex_networkHostBlacklist;
+
+/// Whether or not to register the object explorer as a JSON viewer on launch
+@property (nonatomic) BOOL flex_registerDictionaryJSONViewerOnLaunch;
+
+/// Disable os_log and re-enable ASL. May break Console.app output.
+@property (nonatomic) BOOL flex_disableOSLog;
+@property (nonatomic) BOOL flex_cacheOSLogMessages;
+
+@property (nonatomic) BOOL flex_explorerHidesPropertyIvars;
+@property (nonatomic) BOOL flex_explorerHidesPropertyMethods;
+@property (nonatomic) BOOL flex_explorerShowsMethodOverrides;
+@property (nonatomic) BOOL flex_explorerHidesVariablePreviews;
+
+@end

+ 38 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIBarButtonItem+FLEX.h

@@ -0,0 +1,38 @@
+//
+//  UIBarButtonItem+FLEX.h
+//  FLEX
+//
+//  Created by Tanner on 2/4/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#define FLEXBarButtonItemSystem(item, tgt, sel) \
+    [UIBarButtonItem flex_systemItem:UIBarButtonSystemItem##item target:tgt action:sel]
+
+@interface UIBarButtonItem (FLEX)
+
+@property (nonatomic, readonly, class) UIBarButtonItem *flex_flexibleSpace;
+@property (nonatomic, readonly, class) UIBarButtonItem *flex_fixedSpace;
+
++ (instancetype)flex_itemWithCustomView:(UIView *)customView;
++ (instancetype)flex_backItemWithTitle:(NSString *)title;
+
++ (instancetype)flex_systemItem:(UIBarButtonSystemItem)item target:(id)target action:(SEL)action;
+
++ (instancetype)flex_itemWithTitle:(NSString *)title target:(id)target action:(SEL)action;
++ (instancetype)flex_doneStyleitemWithTitle:(NSString *)title target:(id)target action:(SEL)action;
+
++ (instancetype)flex_itemWithImage:(UIImage *)image target:(id)target action:(SEL)action;
+
++ (instancetype)flex_disabledSystemItem:(UIBarButtonSystemItem)item;
++ (instancetype)flex_disabledItemWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style;
++ (instancetype)flex_disabledItemWithImage:(UIImage *)image;
+
+/// @return the receiver
+- (UIBarButtonItem *)flex_withTintColor:(UIColor *)tint;
+
+- (void)_setWidth:(CGFloat)width;
+
+@end

+ 17 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIFont+FLEX.h

@@ -0,0 +1,17 @@
+//
+//  UIFont+FLEX.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/20/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIFont (FLEX)
+
+@property (nonatomic, readonly, class) UIFont *flex_defaultTableCellFont;
+@property (nonatomic, readonly, class) UIFont *flex_codeFont;
+@property (nonatomic, readonly, class) UIFont *flex_smallCodeFont;
+
+@end

+ 21 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIGestureRecognizer+Blocks.h

@@ -0,0 +1,21 @@
+//
+//  UIGestureRecognizer+Blocks.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/20/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void (^GestureBlock)(UIGestureRecognizer *gesture);
+
+
+@interface UIGestureRecognizer (Blocks)
+
++ (instancetype)action:(GestureBlock)action;
+
+@property (nonatomic) GestureBlock action;
+
+@end
+

+ 19 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIMenu+FLEX.h

@@ -0,0 +1,19 @@
+//
+//  UIMenu+FLEX.h
+//  FLEX
+//
+//  Created by Tanner on 1/28/20.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIMenu (FLEX)
+
++ (instancetype)flex_inlineMenuWithTitle:(NSString *)title
+                                   image:(UIImage *)image
+                                children:(NSArray<UIMenuElement *> *)children;
+
+- (instancetype)flex_collapsed;
+
+@end

+ 16 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIPasteboard+FLEX.h

@@ -0,0 +1,16 @@
+//
+//  UIPasteboard+FLEX.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 12/9/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIPasteboard (FLEX)
+
+/// For copying an object which could be a string, data, or number
+- (void)flex_copy:(id)unknownType;
+
+@end

+ 14 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UITextField+Range.h

@@ -0,0 +1,14 @@
+//
+//  UITextField+Range.h
+//  FLEX
+//
+//  Created by Tanner on 6/13/17.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UITextField (Range)
+
+@property (nonatomic, readonly) NSRange selectedRange;
+
+@end

+ 27 - 0
layout/Library/Frameworks/FLEX.framework/Headers/UIView+FLEX_Layout.h

@@ -0,0 +1,27 @@
+//
+//  UIView+FLEX_Layout.h
+//  FLEX
+//
+//  Created by Tanner Bennett on 7/18/19.
+//  Copyright © 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#define Padding(p) UIEdgeInsetsMake(p, p, p, p)
+
+@interface UIView (darkMode)
+- (BOOL)darkMode;
+@end
+
+@interface UIView (FLEX_Layout)
+
+- (void)centerInView:(UIView *)view;
+- (void)pinEdgesTo:(UIView *)view;
+- (void)pinEdgesTo:(UIView *)view withInsets:(UIEdgeInsets)insets;
+- (void)pinEdgesToSuperview;
+- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets;
+- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets aboveView:(UIView *)sibling;
+- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets belowView:(UIView *)sibling;
+
+@end

BIN
layout/Library/Frameworks/FLEX.framework/Info.plist


+ 21 - 0
layout/Library/Frameworks/FLEX.framework/LICENSE

@@ -0,0 +1,21 @@
+
+FMDB
+Copyright (c) 2008-2014 Flying Meat Inc.
+
+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.

+ 6 - 0
layout/Library/Frameworks/FLEX.framework/Modules/module.modulemap

@@ -0,0 +1,6 @@
+framework module FLEX {
+  umbrella header "FLEX.h"
+
+  export *
+  module * { export * }
+}

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputColorView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputColorView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/30/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputView.h"
+
+@interface FLEXArgumentInputColorView : FLEXArgumentInputView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputDateView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputDataView.h
+//  Flipboard
+//
+//  Created by Daniel Rodriguez Troitino on 2/14/15.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputView.h"
+
+@interface FLEXArgumentInputDateView : FLEXArgumentInputView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputFontView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputFontView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/28/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputView.h"
+
+@interface FLEXArgumentInputFontView : FLEXArgumentInputView
+
+@end

+ 12 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputFontsPickerView.h

@@ -0,0 +1,12 @@
+//
+//  FLEXArgumentInputFontsPickerView.h
+//  FLEX
+//
+//  Created by 啟倫 陳 on 2014/7/27.
+//  Copyright (c) 2014年 f. All rights reserved.
+//
+
+#import "FLEXArgumentInputTextView.h"
+
+@interface FLEXArgumentInputFontsPickerView : FLEXArgumentInputTextView <UIPickerViewDataSource, UIPickerViewDelegate>
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputNotSupportedView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputNotSupportedView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/18/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputTextView.h"
+
+@interface FLEXArgumentInputNotSupportedView : FLEXArgumentInputTextView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputNumberView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputNumberView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/15/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputTextView.h"
+
+@interface FLEXArgumentInputNumberView : FLEXArgumentInputTextView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputObjectView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputObjectView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/15/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputTextView.h"
+
+@interface FLEXArgumentInputObjectView : FLEXArgumentInputTextView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputStringView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputStringView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/28/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputTextView.h"
+
+@interface FLEXArgumentInputStringView : FLEXArgumentInputTextView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputStructView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputStructView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/16/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputView.h"
+
+@interface FLEXArgumentInputStructView : FLEXArgumentInputView
+
+@end

+ 13 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputSwitchView.h

@@ -0,0 +1,13 @@
+//
+//  FLEXArgumentInputSwitchView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/16/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXArgumentInputView.h"
+
+@interface FLEXArgumentInputSwitchView : FLEXArgumentInputView
+
+@end

+ 24 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputTextView.h

@@ -0,0 +1,24 @@
+//
+//  FLEXArgumentInputTextView.h
+//  FLEXInjected
+//
+//  Created by Ryan Olson on 6/15/14.
+//
+//
+
+#import "FLEXArgumentInputView.h"
+#if TARGET_OS_TV
+#import "KBSelectableTextView.h"
+#endif
+
+@interface FLEXArgumentInputTextView : FLEXArgumentInputView <UITextViewDelegate>
+
+// For subclass eyes only
+#if TARGET_OS_TV
+@property (nonatomic, readonly) KBSelectableTextView *inputTextView;
+#else
+@property (nonatomic, readonly) UITextView *inputTextView;
+#endif
+@property (nonatomic) NSString *inputPlaceholderText;
+
+@end

+ 64 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputView.h

@@ -0,0 +1,64 @@
+//
+//  FLEXArgumentInputView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 5/30/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSUInteger, FLEXArgumentInputViewSize) {
+    /// 2 lines, medium-sized
+    FLEXArgumentInputViewSizeDefault = 0,
+    /// One line
+    FLEXArgumentInputViewSizeSmall,
+    /// Several lines
+    FLEXArgumentInputViewSizeLarge
+};
+
+@protocol FLEXArgumentInputViewDelegate;
+
+@interface FLEXArgumentInputView : UIView
+
+- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding;
+
+/// The name of the field. Optional (can be nil).
+@property (nonatomic, copy) NSString *title;
+
+/// To populate the filed with an initial value, set this property.
+/// To reteive the value input by the user, access the property.
+/// Primitive types and structs should/will be boxed in NSValue containers.
+/// Concrete subclasses should override both the setter and getter for this property.
+/// Subclasses can call super.inputValue to access a backing store for the value.
+@property (nonatomic) id inputValue;
+
+/// Setting this value to large will make some argument input views increase the size of their input field(s).
+/// Useful to increase the use of space if there is only one input view on screen (i.e. for property and ivar editing).
+@property (nonatomic) FLEXArgumentInputViewSize targetSize;
+
+/// Users of the input view can get delegate callbacks for incremental changes in user input.
+@property (nonatomic, weak) id <FLEXArgumentInputViewDelegate> delegate;
+
+// Subclasses can override
+
+/// If the input view has one or more text views, returns YES when one of them is focused.
+@property (nonatomic, readonly) BOOL inputViewIsFirstResponder;
+
+/// For subclasses to indicate that they can handle editing a field the give type and value.
+/// Used by FLEXArgumentInputViewFactory to create appropriate input views.
++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value;
+
+// For subclass eyes only
+
+@property (nonatomic, readonly) UILabel *titleLabel;
+@property (nonatomic, readonly) NSString *typeEncoding;
+@property (nonatomic, readonly) CGFloat topInputFieldVerticalLayoutGuide;
+
+@end
+
+@protocol FLEXArgumentInputViewDelegate <NSObject>
+
+- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView;
+
+@end

+ 24 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXArgumentInputViewFactory.h

@@ -0,0 +1,24 @@
+//
+//  FLEXArgumentInputViewFactory.h
+//  FLEXInjected
+//
+//  Created by Ryan Olson on 6/15/14.
+//
+//
+
+#import <Foundation/Foundation.h>
+#import "FLEXArgumentInputSwitchView.h"
+
+@interface FLEXArgumentInputViewFactory : NSObject
+
+/// Forwards to argumentInputViewForTypeEncoding:currentValue: with a nil currentValue.
++ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding;
+
+/// The main factory method for making argument input view subclasses that are the best fit for the type.
++ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue;
+
+/// A way to check if we should try editing a filed given its type encoding and value.
+/// Useful when deciding whether to edit or explore a property, ivar, or NSUserDefaults value.
++ (BOOL)canEditFieldWithTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue;
+
+@end

+ 21 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXDefaultEditorViewController.h

@@ -0,0 +1,21 @@
+//
+//  FLEXDefaultEditorViewController.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 5/23/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import "FLEXFieldEditorViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FLEXDefaultEditorViewController : FLEXVariableEditorViewController
+
++ (instancetype)target:(NSUserDefaults *)defaults key:(NSString *)key commitHandler:(void(^_Nullable)())onCommit;
+
++ (BOOL)canEditDefaultWithValue:(nullable id)currentValue;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFieldEditorView.h

@@ -0,0 +1,20 @@
+//
+//  FLEXFieldEditorView.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 5/16/14.
+//  Copyright (c) 2020 FLEX Team. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class FLEXArgumentInputView;
+
+@interface FLEXFieldEditorView : UIView
+
+@property (nonatomic, copy) NSString *targetDescription;
+@property (nonatomic, copy) NSString *fieldDescription;
+
+@property (nonatomic, copy) NSArray<FLEXArgumentInputView *> *argumentInputViews;
+
+@end

+ 18 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFileBrowserController.h

@@ -0,0 +1,18 @@
+//
+//  FLEXFileBrowserController.h
+//  Flipboard
+//
+//  Created by Ryan Olson on 6/9/14.
+//  Based on previous work by Evan Doll
+//
+
+#import "FLEXTableViewController.h"
+#import "FLEXGlobalsEntry.h"
+#import "FLEXFileBrowserSearchOperation.h"
+
+@interface FLEXFileBrowserController : FLEXTableViewController <FLEXGlobalsEntry>
+
++ (instancetype)path:(NSString *)path;
+- (id)initWithPath:(NSString *)path;
+
+@end

+ 0 - 0
layout/Library/Frameworks/FLEX.framework/PrivateHeaders/FLEXFileBrowserSearchOperation.h


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio